From 2375c832bee7479b63e19a6a1a866bb5faf607db Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 11:50:17 +0200 Subject: [PATCH 1/6] Revert "ReplaceQuality changes only emits signals if there was a change" This reverts commit 9a387f9ee2beb705afe959df92d405fc81720ccf. --- cura/Settings/MachineManager.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 80e37fc7c5..ba8ef39e54 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -811,13 +811,13 @@ class MachineManager(QObject): # Quality profile come in two flavours: type=quality and type=quality_changes # If we found a quality_changes profile then look up its parent quality profile. container_type = containers[0].getMetaDataEntry("type") + quality_name = containers[0].getName() + quality_type = containers[0].getMetaDataEntry("quality_type") # Get quality container and optionally the quality_changes container. if container_type == "quality": - quality_type = containers[0].getMetaDataEntry("quality_type") new_quality_settings_list = self.determineQualityAndQualityChangesForQualityType(quality_type) elif container_type == "quality_changes": - quality_name = containers[0].getName() new_quality_settings_list = self._determineQualityAndQualityChangesForQualityChanges(quality_name) else: Logger.log("e", "Tried to set quality to a container that is not of the right type") @@ -954,16 +954,12 @@ class MachineManager(QObject): # Disconnect the signal handling from the old container. container_type = container.getMetaDataEntry("type") if container_type == "quality": - if stack.quality == container: - return # Nothing to do stack.quality.nameChanged.disconnect(self._onQualityNameChanged) stack.setQuality(container) stack.qualityChanges.nameChanged.connect(self._onQualityNameChanged) elif container_type == "quality_changes" or container_type is None: # If the container is an empty container, we need to change the quality_changes. # Quality can never be set to empty. - if stack.qualityChanges == container: - return # Nothing to do stack.qualityChanges.nameChanged.disconnect(self._onQualityNameChanged) stack.setQualityChanges(container) stack.qualityChanges.nameChanged.connect(self._onQualityNameChanged) From e313794b1269a7c2e7ea6ea16c8362c0d0b7041b Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 13:16:49 +0200 Subject: [PATCH 2/6] Fixed posponing of certain events CURA-3780 --- cura/Settings/CuraContainerStack.py | 12 ++++++------ cura/Settings/MachineManager.py | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cura/Settings/CuraContainerStack.py b/cura/Settings/CuraContainerStack.py index b76062b7aa..6cffa6030b 100755 --- a/cura/Settings/CuraContainerStack.py +++ b/cura/Settings/CuraContainerStack.py @@ -66,8 +66,8 @@ class CuraContainerStack(ContainerStack): ## Set the quality changes container. # # \param new_quality_changes The new quality changes container. It is expected to have a "type" metadata entry with the value "quality_changes". - def setQualityChanges(self, new_quality_changes: InstanceContainer) -> None: - self.replaceContainer(_ContainerIndexes.QualityChanges, new_quality_changes) + def setQualityChanges(self, new_quality_changes: InstanceContainer, postpone_emit = False) -> None: + self.replaceContainer(_ContainerIndexes.QualityChanges, new_quality_changes, postpone_emit = postpone_emit) ## Set the quality changes container by an ID. # @@ -93,8 +93,8 @@ class CuraContainerStack(ContainerStack): ## Set the quality container. # # \param new_quality The new quality container. It is expected to have a "type" metadata entry with the value "quality". - def setQuality(self, new_quality: InstanceContainer) -> None: - self.replaceContainer(_ContainerIndexes.Quality, new_quality) + def setQuality(self, new_quality: InstanceContainer, postpone_emit = False) -> None: + self.replaceContainer(_ContainerIndexes.Quality, new_quality, postpone_emit = postpone_emit) ## Set the quality container by an ID. # @@ -131,8 +131,8 @@ class CuraContainerStack(ContainerStack): ## Set the material container. # # \param new_quality_changes The new material container. It is expected to have a "type" metadata entry with the value "quality_changes". - def setMaterial(self, new_material: InstanceContainer) -> None: - self.replaceContainer(_ContainerIndexes.Material, new_material) + def setMaterial(self, new_material: InstanceContainer, postpone_emit = False) -> None: + self.replaceContainer(_ContainerIndexes.Material, new_material, postpone_emit = postpone_emit) ## Set the material container by an ID. # diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index ba8ef39e54..f9bdd0805a 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -835,8 +835,8 @@ class MachineManager(QObject): name_changed_connect_stacks.append(stack_quality) name_changed_connect_stacks.append(stack_quality_changes) - self._replaceQualityOrQualityChangesInStack(stack, stack_quality) - self._replaceQualityOrQualityChangesInStack(stack, stack_quality_changes) + self._replaceQualityOrQualityChangesInStack(stack, stack_quality, postpone_emit=True) + self._replaceQualityOrQualityChangesInStack(stack, stack_quality_changes, postpone_emit=True) # Send emits that are postponed in replaceContainer. # Here the stacks are finished replacing and every value can be resolved based on the current state. @@ -955,13 +955,13 @@ class MachineManager(QObject): container_type = container.getMetaDataEntry("type") if container_type == "quality": stack.quality.nameChanged.disconnect(self._onQualityNameChanged) - stack.setQuality(container) + stack.setQuality(container, postpone_emit = postpone_emit) stack.qualityChanges.nameChanged.connect(self._onQualityNameChanged) elif container_type == "quality_changes" or container_type is None: # If the container is an empty container, we need to change the quality_changes. # Quality can never be set to empty. stack.qualityChanges.nameChanged.disconnect(self._onQualityNameChanged) - stack.setQualityChanges(container) + stack.setQualityChanges(container, postpone_emit = postpone_emit) stack.qualityChanges.nameChanged.connect(self._onQualityNameChanged) self._onQualityNameChanged() From bfb76540d01ec754211a7f8afbe9d98cb90de5aa Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 10 May 2017 13:22:34 +0200 Subject: [PATCH 3/6] InstanceContainerchanged is now also on a timer. This greatly reduces the signal storm resulting from changing quality / material in multi extrusion machines. CURA-3780 --- cura/Settings/MachineManager.py | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index f9bdd0805a..fcdc5a2b46 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -51,6 +51,11 @@ class MachineManager(QObject): self._error_check_timer.setSingleShot(True) self._error_check_timer.timeout.connect(self._updateStacksHaveErrors) + self._instance_container_timer = QTimer() + self._instance_container_timer.setInterval(250) + self._instance_container_timer.setSingleShot(True) + self._instance_container_timer.timeout.connect(self.__onInstanceContainersChanged) + Application.getInstance().globalContainerStackChanged.connect(self._onGlobalContainerChanged) ## When the global container is changed, active material probably needs to be updated. self.globalContainerChanged.connect(self.activeMaterialChanged) @@ -317,23 +322,15 @@ class MachineManager(QObject): # on _active_container_stack. If it changes, then the properties change. self.activeQualityChanged.emit() - def _onInstanceContainersChanged(self, container): - container_type = container.getMetaDataEntry("type") - - if container_type == "quality": - self.activeQualityChanged.emit() - elif container_type == "variant": - self.activeVariantChanged.emit() - elif container_type == "material": - self.activeMaterialChanged.emit() - else: - # We don't know which one it is, send all the signals - self.activeQualityChanged.emit() - self.activeVariantChanged.emit() - self.activeMaterialChanged.emit() - + def __onInstanceContainersChanged(self): + self.activeQualityChanged.emit() + self.activeVariantChanged.emit() + self.activeMaterialChanged.emit() self._error_check_timer.start() + def _onInstanceContainersChanged(self, container): + self._instance_container_timer.start() + def _onPropertyChanged(self, key, property_name): if property_name == "value": # Notify UI items, such as the "changed" star in profile pull down menu. From 9bb6aadc660b4c0cf5cbe919124ef37517f819ed Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 10 May 2017 13:59:02 +0200 Subject: [PATCH 4/6] Remove non-existing nozzle offset settings They seem to be auto-generated or some sort. --- resources/definitions/alya3dp.def.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/resources/definitions/alya3dp.def.json b/resources/definitions/alya3dp.def.json index a0e9f03fbb..1ea16773d6 100644 --- a/resources/definitions/alya3dp.def.json +++ b/resources/definitions/alya3dp.def.json @@ -42,12 +42,6 @@ "machine_nozzle_gantry_distance": { "default_value": 55 }, - "machine_nozzle_offset_x_1": { - "default_value": 18 - }, - "machine_nozzle_offset_y_1": { - "default_value": 0 - }, "machine_gcode_flavor": { "default_value": "RepRap" }, From 69eb9812596d44176801a1d1c2f4bd9cf4d5d4c4 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 10 May 2017 14:02:38 +0200 Subject: [PATCH 5/6] Remove nozzle offsets from printer definition This setting is only defined in fdmextruder, so it can't be used here. --- resources/definitions/innovo_inventor.def.json | 6 ------ 1 file changed, 6 deletions(-) diff --git a/resources/definitions/innovo_inventor.def.json b/resources/definitions/innovo_inventor.def.json index 40a2849979..4b169c5e31 100644 --- a/resources/definitions/innovo_inventor.def.json +++ b/resources/definitions/innovo_inventor.def.json @@ -44,12 +44,6 @@ "gantry_height": { "default_value": 82.3 }, - "machine_nozzle_offset_x": { - "default_value": 0 - }, - "machine_nozzle_offset_y": { - "default_value": 15 - }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, From d18e96972e40c41b6fd89fd7e9ca60a5ad67f8ff Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 10 May 2017 15:28:19 +0200 Subject: [PATCH 6/6] Rename TPU Normal Print to TPU Draft Print The profile name is 'Draft' so this makes it easier to find. This also makes it consistent with the rest of the profile file names. It's good to do this before we need to make a version upgrade for it. --- ...U_Normal_Print.inst.cfg => um3_aa0.8_TPU_Draft_Print.inst.cfg} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename resources/quality/ultimaker3/{um3_aa0.8_TPU_Normal_Print.inst.cfg => um3_aa0.8_TPU_Draft_Print.inst.cfg} (100%) diff --git a/resources/quality/ultimaker3/um3_aa0.8_TPU_Normal_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg similarity index 100% rename from resources/quality/ultimaker3/um3_aa0.8_TPU_Normal_Print.inst.cfg rename to resources/quality/ultimaker3/um3_aa0.8_TPU_Draft_Print.inst.cfg