Browse Source

Update the active extruder index when the global container changes. This
fixes a problem when Cura starts with a single extruder printer but the
user then choose a multiextruder printer - CURA-4386
Also added a quality definition in UM3E extruder with the ids of the UM3
extruders, so that the profiles for UM3 are also valid for UM3E and viceversa - CURA-4389
All are related issues with profiles and multiextruder printers

Diego Prado Gesto 7 years ago
parent
commit
afb83fac88

+ 10 - 0
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()

+ 4 - 10
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,

+ 5 - 10
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:

+ 10 - 12
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

+ 2 - 1
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": {

+ 2 - 1
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": {

+ 2 - 1
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": {

+ 2 - 1
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": {