From 9db8bff924623c41f34bb874a5707f3518b2f8a5 Mon Sep 17 00:00:00 2001 From: ChrisTerBeke Date: Mon, 27 Nov 2017 17:18:38 +0100 Subject: [PATCH 1/2] Merge pull request #2838 from fieldOfView/fix_crashhandler_crash Fix error when CrashHandler is opened before opengl is initialised --- cura/CrashHandler.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py index c6f94f0a80..85ff5d197d 100644 --- a/cura/CrashHandler.py +++ b/cura/CrashHandler.py @@ -126,13 +126,18 @@ class CrashHandler: return group def _getOpenGLInfo(self): + opengl_instance = OpenGL.getInstance() + if not opengl_instance: + self.data["opengl"] = {"version": "n/a", "vendor": "n/a", "type": "n/a"} + return catalog.i18nc("@label", "not yet initialised
") + info = "" - self.data["opengl"] = {"version": OpenGL.getInstance().getOpenGLVersion(), "vendor": OpenGL.getInstance().getGPUVendorName(), "type": OpenGL.getInstance().getGPUType()} + self.data["opengl"] = {"version": opengl_instance.getOpenGLVersion(), "vendor": opengl_instance.getGPUVendorName(), "type": opengl_instance.getGPUType()} return info From 6db06ea7134d51888517a2dc00eba371ade2b9e9 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 28 Nov 2017 11:15:48 +0100 Subject: [PATCH 2/2] Fix project loading for single-extrusion machines CURA-4617 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 30 ++++++++------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index acd4242fff..9f03c9ae3d 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -827,6 +827,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): preferred_quality_id = global_stack.getMetaDataEntry("preferred_quality", None) if preferred_quality_id is not None: definition_id = global_stack.definition.getId() + definition_id = global_stack.definition.getMetaDataEntry("quality_definition", definition_id) if not parseBool(global_stack.getMetaDataEntry("has_machine_quality", "False")): definition_id = "fdmprinter" @@ -859,25 +860,14 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # be correct. For example, for UM2, the quality container can be "draft" while it should be "um2_draft" # instead. # In this code branch, we try to fix those incorrect quality containers. - search_criteria = {"type": "quality", - "quality_type": global_stack.quality.getMetaDataEntry("quality_type")} - search_criteria["definition"] = global_stack.definition.getId() - if not parseBool(global_stack.getMetaDataEntry("has_machine_quality", "False")): - search_criteria["definition"] = "fdmprinter" + # + # ***IMPORTANT***: We only do this fix for single-extrusion machines. + # We will first find the correct quality profile for the extruder, then apply the same + # quality profile for the global stack. + # + if len(extruder_stacks) == 1: + extruder_stack = extruder_stacks[0] - containers = self._container_registry.findInstanceContainers(**search_criteria) - containers = [c for c in containers if not c.getMetaDataEntry("material", "")] - if not containers: - # cannot find machine-specific qualities, so just use fdmprinter to search again - search_criteria["definition"] = "fdmprinter" - containers = self._container_registry.findInstanceContainers(**search_criteria) - containers = [c for c in containers if not c.getMetaDataEntry("material", "")] - - if containers: - new_quality_container = containers[0] - global_stack.quality = new_quality_container - - for extruder_stack in extruder_stacks: search_criteria = {"type": "quality", "quality_type": global_stack.quality.getMetaDataEntry("quality_type")} search_criteria["definition"] = global_stack.definition.getId() @@ -888,7 +878,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader): search_criteria["material"] = extruder_stack.material.getId() containers = self._container_registry.findInstanceContainers(**search_criteria) if containers: - extruder_stack.quality = containers[0] + new_quality_container = containers[0] + extruder_stack.quality = new_quality_container + global_stack.quality = new_quality_container # Replacing the old containers if resolve is "new". # When resolve is "new", some containers will get renamed, so all the other containers that reference to those