diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 4c66773d05..e8aec896c1 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -122,6 +122,40 @@ class MachineSettingsAction(MachineAction): return len(self._global_container_stack.getMetaDataEntry("machine_extruder_trains")) + @pyqtSlot(int) + def setMachineExtruderCount(self, extruder_count): + machine_manager = Application.getInstance().getMachineManager() + extruder_manager = ExtruderManager.getInstance() + + definition_changes_container = self._global_container_stack.findContainer({"type": "definition_changes"}) + if not self._global_container_stack or not definition_changes_container: + return + + if extruder_count == self._global_container_stack.getProperty("machine_extruder_count", "value"): + return + + extruder_material = None + if extruder_count == 1 and machine_manager.hasMaterials: + extruder_material = machine_manager.allActiveMaterialIds[machine_manager.activeStackId] + + definition_changes_container.setProperty("machine_extruder_count", "value", extruder_count) + self.forceUpdate() + + if extruder_count > 1: + # multiextrusion; make sure one of these extruder stacks is active + if extruder_manager.activeExtruderIndex == -1: + extruder_manager.setActiveExtruderIndex(0) + else: + # single extrusion; make sure the machine stack is active + if extruder_manager.activeExtruderIndex > -1: + extruder_manager.setActiveExtruderIndex(-1); + + if extruder_material: + # restore material on global stack + # MachineManager._onGlobalContainerChanged removes the global material of multiextruder machines + machine_manager.setActiveMaterial(extruder_material); + + @pyqtSlot() def forceUpdate(self): # Force rebuilding the build volume by reloading the global container stack. diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.qml b/plugins/MachineSettingsAction/MachineSettingsAction.qml index c02971d8dd..abe05d5654 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.qml +++ b/plugins/MachineSettingsAction/MachineSettingsAction.qml @@ -377,48 +377,11 @@ Cura.MachineAction currentIndex: machineExtruderCountProvider.properties.value - 1 onActivated: { - if(machineExtruderCountProvider.properties.value == index + 1) - { - return; - } - - var extruder_material; - if(index == 0 && Cura.MachineManager.hasMaterials) - { - // setting back to single extrusion - extruder_material = Cura.MachineManager.allActiveMaterialIds[Cura.MachineManager.activeStackId]; - } - - machineExtruderCountProvider.setPropertyValue("value", index + 1); - manager.forceUpdate(); + manager.setMachineExtruderCount(index + 1); base.extruderTabsCount = (index > 0) ? index + 1 : 0; - - if(index > 0) - { - // multiextrusion; make sure one of these extruder stacks is active - if(ExtruderManager.activeExtruderIndex == -1) - { - ExtruderManager.setActiveExtruderIndex(0); - } - } - else - { - // single extrusion; make sure the machine stack is active - if(ExtruderManager.activeExtruderIndex != -1) - { - ExtruderManager.setActiveExtruderIndex(-1); - } - if(extruder_material) - { - // restore material on global stack - // MachineManager._onGlobalContainerChanged removes the global material of multiextruder machines - Cura.MachineManager.setActiveMaterial(extruder_material); - } - } } } - Label { text: catalog.i18nc("@label", "Nozzle size")