From 78ac4ef999b9bf4d9f011a9f7efa8a13dc1d8309 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Tue, 18 Oct 2016 13:26:55 +0200 Subject: [PATCH] Set the global variant and material to empty for multi-extrusion machines For multi-extrusion machines, we do not want variant or material profiles in the stack, because these are extruder specific and may cause wrong values to be used for extruders that did not specify a value in the extruder. Contributes to CURA-2652 --- cura/Settings/MachineManager.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index d33bf636d3..ab3701c1eb 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -225,11 +225,26 @@ class MachineManager(QObject): self._global_container_stack.nameChanged.connect(self._onMachineNameChanged) self._global_container_stack.containersChanged.connect(self._onInstanceContainersChanged) self._global_container_stack.propertyChanged.connect(self._onPropertyChanged) - material = self._global_container_stack.findContainer({"type": "material"}) - material.nameChanged.connect(self._onMaterialNameChanged) - quality = self._global_container_stack.findContainer({"type": "quality"}) - quality.nameChanged.connect(self._onQualityNameChanged) + if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1: + # For multi-extrusion machines, we do not want variant or material profiles in the stack, + # because these are extruder specific and may cause wrong values to be used for extruders + # that did not specify a value in the extruder. + global_variant = self._global_container_stack.findContainer(type = "variant") + if global_variant != self._empty_variant_container: + self._global_container_stack.replaceContainer(self._global_container_stack.getContainerIndex(global_variant), self._empty_variant_container) + + global_material = self._global_container_stack.findContainer(type = "material") + if global_material != self._empty_material_container: + self._global_container_stack.replaceContainer(self._global_container_stack.getContainerIndex(global_material), self._empty_material_container) + + else: + material = self._global_container_stack.findContainer({"type": "material"}) + material.nameChanged.connect(self._onMaterialNameChanged) + + quality = self._global_container_stack.findContainer({"type": "quality"}) + quality.nameChanged.connect(self._onQualityNameChanged) + def _onActiveExtruderStackChanged(self): self.blurSettings.emit() # Ensure no-one has focus.