diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 17e4362f2c..7f5dabe8d1 100644 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -10,6 +10,7 @@ from UM.Application import Application from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.DefinitionContainer import DefinitionContainer +from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Logger import Logger from cura.Settings.CuraContainerRegistry import CuraContainerRegistry @@ -143,6 +144,21 @@ class MachineSettingsAction(MachineAction): if machine_manager.hasVariants: extruder_variant_id = machine_manager.activeVariantIds[0] + # Check to see if any features are set to print with an extruder that will no longer exist + for setting_name in ["adhesion_extruder_nr", "support_extruder_nr", "support_extruder_nr_layer_0", "support_infill_extruder_nr", "support_interface_extruder_nr"]: + if int(self._global_container_stack.getProperty(setting_name, "value")) > extruder_count -1: + Logger.log("i", "Lowering %s setting to match number of extruders", setting_name) + self._global_container_stack.getTop().setProperty(setting_name, "value", extruder_count -1) + + # Check to see if any objects are set to print with an extruder that will no longer exist + root_node = Application.getInstance().getController().getScene().getRoot() + for node in DepthFirstIterator(root_node): + if node.getMeshData(): + extruder_nr = node.callDecoration("getActiveExtruderPosition") + + if extruder_nr is not None and extruder_nr > extruder_count - 1: + node.callDecoration("setActiveExtruder", extruder_manager.getExtruderStack(extruder_count -1).getId()) + definition_changes_container.setProperty("machine_extruder_count", "value", extruder_count) self.forceUpdate()