From e2e9e7964c2bbfb1274df5f017350746fc7385e2 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 10 Jun 2016 11:48:33 +0200 Subject: [PATCH 1/3] Fixed duplication if no name was changed CURA-1427 --- cura/MachineManagerModel.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cura/MachineManagerModel.py b/cura/MachineManagerModel.py index 443c19d302..0e7230fb79 100644 --- a/cura/MachineManagerModel.py +++ b/cura/MachineManagerModel.py @@ -304,6 +304,10 @@ class MachineManagerModel(QObject): new_name = self._createUniqueName("quality", containers[0].getName(), new_name, catalog.i18nc("@label", "Custom profile")) + if containers[0].getName() == new_name: + # Nothing to do. + return + # As we also want the id of the container to be changed (so that profile name is the name of the file # on disk. We need to create a new instance and remove it (so the old file of the container is removed) # If we don't do that, we might get duplicates & other weird issues. From 9672b3360c92728fba54466f7e1584e444aae7a2 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 10 Jun 2016 12:26:11 +0200 Subject: [PATCH 2/3] Changing settings in extruder stack now also triggers reslice CURA-1689 --- cura/ExtruderManager.py | 6 ++++++ plugins/CuraEngineBackend/CuraEngineBackend.py | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/cura/ExtruderManager.py b/cura/ExtruderManager.py index edd6ab7d23..578905a63a 100644 --- a/cura/ExtruderManager.py +++ b/cura/ExtruderManager.py @@ -66,6 +66,12 @@ class ExtruderManager(QObject): self._active_extruder_index = index self.activeExtruderChanged.emit() + def getActiveExtruderStack(self): + try: + return self._extruder_trains[UM.Application.getInstance().getGlobalContainerStack().getBottom().getId()][str(self._active_extruder_index)] + except AttributeError: + return None + ## Adds all extruders of a specific machine definition to the extruder # manager. # diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 3e22f8f6fb..80f2614e87 100644 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -12,6 +12,8 @@ from UM.PluginRegistry import PluginRegistry from UM.Resources import Resources from UM.Settings.Validator import ValidatorState #To find if a setting is in an error state. We can't slice then. +from cura.ExtruderManager import ExtruderManager + from cura.OneAtATimeIterator import OneAtATimeIterator from . import ProcessSlicedLayersJob from . import ProcessGCodeJob @@ -59,6 +61,10 @@ class CuraEngineBackend(Backend): Application.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged) self._onGlobalStackChanged() + self._active_extruder_stack = None + ExtruderManager.getInstance().activeExtruderChanged.connect(self._onActiveExtruderChanged) + self._onActiveExtruderChanged() + #When you update a setting and other settings get changed through inheritance, many propertyChanged signals are fired. #This timer will group them up, and only slice for the last setting changed signal. #TODO: Properly group propertyChanged signals by whether they are triggered by the same user interaction. @@ -367,4 +373,16 @@ class CuraEngineBackend(Backend): if self._global_container_stack: self._global_container_stack.propertyChanged.connect(self._onSettingChanged) #Note: Only starts slicing when the value changed. self._global_container_stack.containersChanged.connect(self._onChanged) + self._onActiveExtruderChanged() self._onChanged() + + def _onActiveExtruderChanged(self): + if self._active_extruder_stack: + self._active_extruder_stack.propertyChanged.disconnect(self._onSettingChanged) + self._active_extruder_stack.containersChanged.disconnect(self._onChanged) + + self._active_extruder_stack = ExtruderManager.getInstance().getActiveExtruderStack() + if self._active_extruder_stack: + self._active_extruder_stack.propertyChanged.connect(self._onSettingChanged) # Note: Only starts slicing when the value changed. + self._active_extruder_stack.containersChanged.connect(self._onChanged) + self._onChanged() \ No newline at end of file From 179b6eeaac0381b5ddc4faa941da981dba4ade30 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 10 Jun 2016 13:16:54 +0200 Subject: [PATCH 3/3] Fixed issue where not having a machine caused extruder retrieval to fail CURA-1689 --- cura/ExtruderManager.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cura/ExtruderManager.py b/cura/ExtruderManager.py index 578905a63a..72b6086e26 100644 --- a/cura/ExtruderManager.py +++ b/cura/ExtruderManager.py @@ -71,6 +71,8 @@ class ExtruderManager(QObject): return self._extruder_trains[UM.Application.getInstance().getGlobalContainerStack().getBottom().getId()][str(self._active_extruder_index)] except AttributeError: return None + except KeyError: + return None ## Adds all extruders of a specific machine definition to the extruder # manager.