diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 7a6537e7d2..12277f9641 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -530,6 +530,16 @@ class ExtruderManager(QObject): if global_container_stack and global_container_stack.getBottom() and global_container_stack.getBottom().getId() != self._global_container_stack_definition_id: self._global_container_stack_definition_id = global_container_stack.getBottom().getId() self.globalContainerStackDefinitionChanged.emit() + + # If the global container changed, the number of extruders could be changed and so the active_extruder_index is updated + extruder_count = global_container_stack.getProperty("machine_extruder_count", "value") + if extruder_count > 1: + if self._active_extruder_index == -1: + self.setActiveExtruderIndex(0) + else: + if self._active_extruder_index > -1: + self.setActiveExtruderIndex(-1) + self.activeExtruderChanged.emit() self.resetSelectedObjectExtruders() diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py index 71426d40f4..c56a1c9f7a 100644 --- a/cura/Settings/ProfilesModel.py +++ b/cura/Settings/ProfilesModel.py @@ -98,16 +98,10 @@ class ProfilesModel(InstanceContainersModel): extruder_manager = ExtruderManager.getInstance() active_extruder = extruder_manager.getActiveExtruderStack() extruder_stacks = extruder_manager.getActiveExtruderStacks() - if extruder_stacks: - if multiple_extrusion: - # Place the active extruder at the front of the list. - if active_extruder in extruder_stacks: - extruder_stacks.remove(active_extruder) - extruder_stacks = [active_extruder] + extruder_stacks - else: - # The active extruder is the first in the list and only the active extruder is use to compute the usable qualities - active_extruder = None - extruder_stacks = [] + if multiple_extrusion: + # Place the active extruder at the front of the list. + extruder_stacks.remove(active_extruder) + extruder_stacks = [active_extruder] + extruder_stacks # Get a list of usable/available qualities for this machine and material qualities = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack, diff --git a/cura/Settings/QualityAndUserProfilesModel.py b/cura/Settings/QualityAndUserProfilesModel.py index 6289bf15f1..1871cd4698 100644 --- a/cura/Settings/QualityAndUserProfilesModel.py +++ b/cura/Settings/QualityAndUserProfilesModel.py @@ -31,16 +31,10 @@ class QualityAndUserProfilesModel(ProfilesModel): extruder_manager = ExtruderManager.getInstance() active_extruder = extruder_manager.getActiveExtruderStack() extruder_stacks = extruder_manager.getActiveExtruderStacks() - if extruder_stacks: - if multiple_extrusion: - # Place the active extruder at the front of the list. - if active_extruder in extruder_stacks: - extruder_stacks.remove(active_extruder) - extruder_stacks = [active_extruder] + extruder_stacks - else: - # The active extruder is the first in the list and only the active extruder is use to compute the usable qualities - active_extruder = None - extruder_stacks = [] + if multiple_extrusion: + # Place the active extruder at the front of the list. + extruder_stacks.remove(active_extruder) + extruder_stacks = [active_extruder] + extruder_stacks # Fetch the list of useable qualities across all extruders. # The actual list of quality profiles come from the first extruder in the extruder list. @@ -53,6 +47,7 @@ class QualityAndUserProfilesModel(ProfilesModel): if multiple_extrusion: # If the printer has multiple extruders then quality changes related to the current extruder are kept filtered_quality_changes = [qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and + qc.getMetaDataEntry("extruder") is not None and qc.getMetaDataEntry("extruder") == active_extruder.definition.getMetaDataEntry("quality_definition") or qc.getMetaDataEntry("extruder") == active_extruder.definition.getId()] else: diff --git a/cura/Settings/UserProfilesModel.py b/cura/Settings/UserProfilesModel.py index 6df100fb09..3344c9e076 100644 --- a/cura/Settings/UserProfilesModel.py +++ b/cura/Settings/UserProfilesModel.py @@ -31,16 +31,10 @@ class UserProfilesModel(ProfilesModel): extruder_manager = ExtruderManager.getInstance() active_extruder = extruder_manager.getActiveExtruderStack() extruder_stacks = extruder_manager.getActiveExtruderStacks() - if extruder_stacks: - if multiple_extrusion: - # Place the active extruder at the front of the list. - if active_extruder in extruder_stacks: - extruder_stacks.remove(active_extruder) - extruder_stacks = [active_extruder] + extruder_stacks - else: - # The active extruder is the first in the list and only the active extruder is use to compute the usable qualities - active_extruder = None - extruder_stacks = [] + if multiple_extrusion: + # Place the active extruder at the front of the list. + extruder_stacks.remove(active_extruder) + extruder_stacks = [active_extruder] + extruder_stacks # Fetch the list of useable qualities across all extruders. # The actual list of quality profiles come from the first extruder in the extruder list. @@ -52,9 +46,13 @@ class UserProfilesModel(ProfilesModel): if multiple_extrusion: # If the printer has multiple extruders then quality changes related to the current extruder are kept - filtered_quality_changes = [qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and qc.getMetaDataEntry("extruder") == active_extruder.definition.getMetaDataEntry("quality_definition")] + filtered_quality_changes = [qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and + qc.getMetaDataEntry("extruder") is not None and + qc.getMetaDataEntry("extruder") == active_extruder.definition.getMetaDataEntry("quality_definition") or + qc.getMetaDataEntry("extruder") == active_extruder.definition.getId()] else: # If not, the quality changes of the global stack are selected - filtered_quality_changes = [qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and qc.getMetaDataEntry("extruder") is None] + filtered_quality_changes = [qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and + qc.getMetaDataEntry("extruder") is None] return filtered_quality_changes diff --git a/resources/extruders/ultimaker3_extended_extruder_left.def.json b/resources/extruders/ultimaker3_extended_extruder_left.def.json index 2fcf1d015a..2d81424bc6 100644 --- a/resources/extruders/ultimaker3_extended_extruder_left.def.json +++ b/resources/extruders/ultimaker3_extended_extruder_left.def.json @@ -5,7 +5,8 @@ "inherits": "fdmextruder", "metadata": { "machine": "ultimaker3_extended", - "position": "0" + "position": "0", + "quality_definition": "ultimaker3_extruder_left" }, "overrides": { diff --git a/resources/extruders/ultimaker3_extended_extruder_right.def.json b/resources/extruders/ultimaker3_extended_extruder_right.def.json index b60cc82dd7..7cdd5876c1 100644 --- a/resources/extruders/ultimaker3_extended_extruder_right.def.json +++ b/resources/extruders/ultimaker3_extended_extruder_right.def.json @@ -5,7 +5,8 @@ "inherits": "fdmextruder", "metadata": { "machine": "ultimaker3_extended", - "position": "1" + "position": "1", + "quality_definition": "ultimaker3_extruder_right" }, "overrides": { diff --git a/resources/extruders/ultimaker3_extruder_left.def.json b/resources/extruders/ultimaker3_extruder_left.def.json index 6f07718b63..9f5ed34692 100644 --- a/resources/extruders/ultimaker3_extruder_left.def.json +++ b/resources/extruders/ultimaker3_extruder_left.def.json @@ -5,7 +5,8 @@ "inherits": "fdmextruder", "metadata": { "machine": "ultimaker3", - "position": "0" + "position": "0", + "quality_definition": "ultimaker3_extruder_left" }, "overrides": { diff --git a/resources/extruders/ultimaker3_extruder_right.def.json b/resources/extruders/ultimaker3_extruder_right.def.json index bc51b0da4b..7298a552b7 100644 --- a/resources/extruders/ultimaker3_extruder_right.def.json +++ b/resources/extruders/ultimaker3_extruder_right.def.json @@ -5,7 +5,8 @@ "inherits": "fdmextruder", "metadata": { "machine": "ultimaker3", - "position": "1" + "position": "1", + "quality_definition": "ultimaker3_extruder_right" }, "overrides": {