diff --git a/cura/Machines/ContainerTree.py b/cura/Machines/ContainerTree.py index 2f641973ac..e43affa714 100644 --- a/cura/Machines/ContainerTree.py +++ b/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.") diff --git a/cura/Machines/Models/IntentModel.py b/cura/Machines/Models/IntentModel.py index c5d63183dd..5a44883b76 100644 --- a/cura/Machines/Models/IntentModel.py +++ b/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: diff --git a/cura/Machines/Models/QualityManagementModel.py b/cura/Machines/Models/QualityManagementModel.py index 850e001473..2a661ec49e 100644 --- a/cura/Machines/Models/QualityManagementModel.py +++ b/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()