Browse Source

Add convenience function to get quality groups for current printer

This is used very often all over the code.

Contributes to issue CURA-6600.
Ghostkeeper 5 years ago
parent
commit
d4cd5a7ea5

+ 19 - 1
cura/Machines/ContainerTree.py

@@ -5,10 +5,15 @@ from UM.Logger import Logger
 from UM.Settings.ContainerRegistry import ContainerRegistry  # To listen to containers being added.
 from UM.Settings.DefinitionContainer import DefinitionContainer
 from UM.Settings.Interfaces import ContainerInterface
+import cura.CuraApplication  # Imported like this to prevent circular dependencies.
 from cura.Machines.MachineNode import MachineNode
 
-from typing import Dict
+from typing import Dict, List, TYPE_CHECKING
 import time
+
+if TYPE_CHECKING:
+    from cura.Machines.QualityGroup import QualityGroup
+
 ##  This class contains a look-up tree for which containers are available at
 #   which stages of configuration.
 #
@@ -29,6 +34,19 @@ class ContainerTree:
         container_registry.containerAdded.connect(self._machineAdded)
         self._loadAll()
 
+    ##  Get the quality groups available for the currently activated printer.
+    #
+    #   This contains all quality groups, enabled or disabled. To check whether
+    #   the quality group can be activated, test for the
+    #   ``QualityGroup.is_available`` property.
+    #   \return For every quality type, one quality group.
+    def getCurrentQualityGroups(self) -> Dict[str, "QualityGroup"]:
+        global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack()
+        variant_names = [extruder.variant.getName() for extruder in global_stack.extruders.values()]
+        material_bases = [extruder.material.getMetaDataEntry("base_file") for extruder in global_stack.extruders.values()]
+        extruder_enabled = [extruder.isEnabled for extruder in global_stack.extruders.values()]
+        return self.machines[global_stack.definition.getId()].getQualityGroups(variant_names, material_bases, extruder_enabled)
+
     ##  Builds the initial container tree.
     def _loadAll(self):
         Logger.log("i", "Building container tree.")

+ 1 - 5
cura/Machines/Models/IntentModel.py

@@ -52,11 +52,7 @@ class IntentModel(ListModel):
         if not global_stack:
             self.setItems(new_items)
             return
-        definition_id = global_stack.definition.getId()
-        variant_names = [extruder.variant.getName() for extruder in global_stack.extruders.values()]
-        material_bases = [extruder.material.getMetaDataEntry("base_file") for extruder in global_stack.extruders.values()]
-        extruder_enabled = [extruder.isEnabled for extruder in global_stack.extruders.values()]
-        quality_groups = ContainerTree.getInstance().machines[definition_id].getQualityGroups(variant_names, material_bases, extruder_enabled)
+        quality_groups = ContainerTree.getInstance().getCurrentQualityGroups()
 
         for intent_category, quality_type in IntentManager.getInstance().getCurrentAvailableIntents():
             if intent_category == self._intent_category:

+ 1 - 5
cura/Machines/Models/QualityManagementModel.py

@@ -43,11 +43,7 @@ class QualityManagementModel(ListModel):
             self.setItems([])
             return
 
-        variant_names = [extruder.variant.getName() for extruder in global_stack.extruders]
-        material_bases = [extruder.material.getMetaDataEntry("base_file") for extruder in global_stack.extruders]
-        extruder_enabled = [extruder.isEnabled for extruder in global_stack.extruders]
-        definition_id = global_stack.definition.getId()
-        quality_group_dict = ContainerTree.getInstance().machines[definition_id].getQualityGroups(variant_names, material_bases, extruder_enabled)
+        quality_group_dict = ContainerTree.getInstance().getCurrentQualityGroups()
         quality_changes_group_dict = self._quality_manager.getQualityChangesGroups(global_stack)
 
         available_quality_types = set(quality_type for quality_type, quality_group in quality_group_dict.items()