From cc3402ab813ba88878b4a404f4708d4206b34512 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 22 May 2017 14:48:42 +0200 Subject: [PATCH 1/5] Added RunTime exception catching for image_reply In some cases the c++ object is already deleted. If we just ignore it, nothing breaks. CURA-3844 --- plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index 9b0eee7096..afeaadbb7a 100755 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -306,8 +306,11 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): def _stopCamera(self): self._camera_timer.stop() if self._image_reply: - self._image_reply.abort() - self._image_reply.downloadProgress.disconnect(self._onStreamDownloadProgress) + try: + self._image_reply.abort() + self._image_reply.downloadProgress.disconnect(self._onStreamDownloadProgress) + except RuntimeError: + pass # It can happen that the wrapped c++ object is already deleted. self._image_reply = None self._image_request = None From bec43d5b9a6d467a7c9e147e457068f61cd71802 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 22 May 2017 14:25:43 +0200 Subject: [PATCH 2/5] Make sure that the preferred material name variable exists Another small bug I found when looking through this MachineManager code. My IDE was complaining that the preferred_material_name was not always initialised and that preferred_material was an unused variable. Doesn't contribute to issue CURA-3803. --- cura/Settings/MachineManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 6f1b82a7b8..04a3f91e50 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -781,7 +781,7 @@ class MachineManager(QObject): self.blurSettings.emit() self._active_container_stack.variant = containers[0] Logger.log("d", "Active variant changed to {active_variant_id}".format(active_variant_id = containers[0].getId())) - preferred_material = None + preferred_material_name = None if old_material: preferred_material_name = old_material.getName() From 1f33a0d4cd063b94c35f672a4fb42a5ba7967eb7 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 22 May 2017 15:35:34 +0200 Subject: [PATCH 3/5] Use per-parameter-value compression for signals This will only emit one signal for each unique combination of parameters. Contributes to issue CURA-3803. --- cura/Settings/MachineManager.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 04a3f91e50..96ccc89ccf 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -16,7 +16,7 @@ from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.ContainerStack import ContainerStack from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.SettingFunction import SettingFunction -from UM.Signal import postponeSignals +from UM.Signal import postponeSignals, CompressTechnique import UM.FlameProfiler from cura.QualityManager import QualityManager @@ -705,7 +705,7 @@ class MachineManager(QObject): # Depending on from/to material+current variant, a quality profile is chosen and set. @pyqtSlot(str) def setActiveMaterial(self, material_id: str): - with postponeSignals(*self._getContainerChangedSignals()): + with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): containers = ContainerRegistry.getInstance().findInstanceContainers(id = material_id) if not containers or not self._active_container_stack: return @@ -770,7 +770,7 @@ class MachineManager(QObject): @pyqtSlot(str) def setActiveVariant(self, variant_id: str): - with postponeSignals(*self._getContainerChangedSignals()): + with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): containers = ContainerRegistry.getInstance().findInstanceContainers(id = variant_id) if not containers or not self._active_container_stack: return @@ -793,7 +793,7 @@ class MachineManager(QObject): # \param quality_id The quality_id of either a quality or a quality_changes @pyqtSlot(str) def setActiveQuality(self, quality_id: str): - with postponeSignals(*self._getContainerChangedSignals(), compress = True): + with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): self.blurSettings.emit() containers = ContainerRegistry.getInstance().findInstanceContainers(id = quality_id) From 9a08e0cc270d54bd9caff96fc823ba88d72eea58 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 23 May 2017 11:51:28 +0200 Subject: [PATCH 4/5] Only use for detecting material file version CURA-3540 --- .../XmlMaterialProfile/XmlMaterialProfile.py | 18 +----------------- .../XmlMaterialProfile/XmlMaterialUpgrader.py | 18 +----------------- 2 files changed, 2 insertions(+), 34 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index bddb801030..7519565302 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -395,29 +395,13 @@ class XmlMaterialProfile(InstanceContainer): def getVersionFromSerialized(self, serialized: str) -> Optional[int]: data = ET.fromstring(serialized) - # get format version - version = None - metadata = data.iterfind("./um:metadata/*", self.__namespaces) - for entry in metadata: - tag_name = _tag_without_namespace(entry) - if tag_name == "version": - try: - version = int(entry.text) - except Exception as e: - raise InvalidInstanceError("Invalid version string '%s': %s" % (entry.text, e)) - break - if version is None: - raise InvalidInstanceError("Missing version in metadata") - + version = 1 # get setting version if "version" in data.attrib: setting_version = self.xmlVersionToSettingVersion(data.attrib["version"]) else: setting_version = self.xmlVersionToSettingVersion("1.2") - if version is None: - raise InvalidInstanceError("Missing version in metadata") - return version * 1000000 + setting_version ## Overridden from InstanceContainer diff --git a/plugins/XmlMaterialProfile/XmlMaterialUpgrader.py b/plugins/XmlMaterialProfile/XmlMaterialUpgrader.py index 8f1d1e9ec6..ad20a44c28 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialUpgrader.py +++ b/plugins/XmlMaterialProfile/XmlMaterialUpgrader.py @@ -10,29 +10,13 @@ class XmlMaterialUpgrader(VersionUpgrade): def getXmlVersion(self, serialized): data = ET.fromstring(serialized) - # get format version - version = None - metadata = data.iterfind("./um:metadata/*") - for entry in metadata: - tag_name = entry.tag - if tag_name == "version": - try: - version = int(entry.text) - except Exception as e: - raise ValueError("Invalid version string '%s': %s" % (entry.text, e)) - break - if version is None: - raise RuntimeError("Missing version in metadata") - + version = 1 # get setting version if "version" in data.attrib: setting_version = self._xmlVersionToSettingVersion(data.attrib["version"]) else: setting_version = self._xmlVersionToSettingVersion("1.2") - if version is None: - raise RuntimeError("Missing version in metadata") - return version * 1000000 + setting_version def _xmlVersionToSettingVersion(self, xml_version: str) -> int: From da39ab809338ec2a1f3279815753b2870e933035 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 23 May 2017 13:34:50 +0200 Subject: [PATCH 5/5] Remove duplicate "enabled" for "infill_angles" --- resources/definitions/fdmprinter.def.json | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index bea23144c1..8372be8f6a 100755 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1157,7 +1157,6 @@ "type": "[int]", "default_value": "[ ]", "enabled": "infill_pattern != 'concentric' and infill_pattern != 'concentric_3d' and infill_pattern != 'cubicsubdiv'", - "enabled": "infill_sparse_density > 0", "settable_per_mesh": true }, "spaghetti_infill_enabled":