Browse Source

Merge branch '3.0' of github.com:Ultimaker/Cura into 3.0

Jaime van Kessel 7 years ago
parent
commit
11484bf6ad

+ 3 - 2
cura/Settings/ExtruderManager.py

@@ -506,7 +506,7 @@ class ExtruderManager(QObject):
         result.extend(self.getActiveExtruderStacks())
         return result
 
-    ##  Returns the list of active extruder stacks.
+    ##  Returns the list of active extruder stacks, taking into account the machine extruder count.
     #
     #   \return \type{List[ContainerStack]} a list of
     def getActiveExtruderStacks(self) -> List["ExtruderStack"]:
@@ -516,7 +516,8 @@ class ExtruderManager(QObject):
         if global_stack and global_stack.getId() in self._extruder_trains:
             for extruder in sorted(self._extruder_trains[global_stack.getId()]):
                 result.append(self._extruder_trains[global_stack.getId()][extruder])
-        return result
+
+        return result[:global_stack.getProperty("machine_extruder_count", "value")]
 
     def __globalContainerStackChanged(self) -> None:
         global_container_stack = Application.getInstance().getGlobalContainerStack()

+ 12 - 3
cura/Settings/ProfilesModel.py

@@ -92,13 +92,22 @@ class ProfilesModel(InstanceContainersModel):
         if global_container_stack is None:
             return
 
+        # Detecting if the machine has multiple extrusion
+        multiple_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1
         # Get the list of extruders and place the selected extruder at the front of the list.
         extruder_manager = ExtruderManager.getInstance()
         active_extruder = extruder_manager.getActiveExtruderStack()
         extruder_stacks = extruder_manager.getActiveExtruderStacks()
-        if active_extruder in extruder_stacks:
-            extruder_stacks.remove(active_extruder)
-            extruder_stacks = [active_extruder] + extruder_stacks
+        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 = []
 
         # Get a list of usable/available qualities for this machine and material
         qualities = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack,

+ 13 - 7
cura/Settings/QualityAndUserProfilesModel.py

@@ -26,15 +26,21 @@ class QualityAndUserProfilesModel(ProfilesModel):
         quality_changes_list = quality_manager.findAllQualityChangesForMachine(machine_definition)
 
         # Detecting if the machine has multiple extrusion
-        multiple_extrusion = False
-        # Get the  list of extruders and place the selected extruder at the front of the list.
+        multiple_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1
+        # Get the  list of extruders
         extruder_manager = ExtruderManager.getInstance()
         active_extruder = extruder_manager.getActiveExtruderStack()
         extruder_stacks = extruder_manager.getActiveExtruderStacks()
-        if active_extruder in extruder_stacks:
-            multiple_extrusion = True
-            extruder_stacks.remove(active_extruder)
-            extruder_stacks = [active_extruder] + extruder_stacks
+        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 = []
 
         # Fetch the list of useable qualities across all extruders.
         # The actual list of quality profiles come from the first extruder in the extruder list.
@@ -49,6 +55,6 @@ class QualityAndUserProfilesModel(ProfilesModel):
             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.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]
+            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 quality_list + filtered_quality_changes

+ 12 - 6
cura/Settings/UserProfilesModel.py

@@ -26,15 +26,21 @@ class UserProfilesModel(ProfilesModel):
         quality_changes_list = quality_manager.findAllQualityChangesForMachine(machine_definition)
 
         # Detecting if the machine has multiple extrusion
-        multiple_extrusion = False
+        multiple_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1
         # Get the  list of extruders and place the selected extruder at the front of the list.
         extruder_manager = ExtruderManager.getInstance()
         active_extruder = extruder_manager.getActiveExtruderStack()
         extruder_stacks = extruder_manager.getActiveExtruderStacks()
-        if active_extruder in extruder_stacks:
-            multiple_extrusion = True
-            extruder_stacks.remove(active_extruder)
-            extruder_stacks = [active_extruder] + extruder_stacks
+        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 = []
 
         # Fetch the list of useable qualities across all extruders.
         # The actual list of quality profiles come from the first extruder in the extruder list.
@@ -49,6 +55,6 @@ class UserProfilesModel(ProfilesModel):
             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.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]
+            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