Add convenience function to get quality groups for current printer

This is used very often all over the code.

Contributes to issue CURA-6600.
This commit is contained in:
Ghostkeeper 2019-08-15 16:53:38 +02:00
parent 3f944462ed
commit d4cd5a7ea5
No known key found for this signature in database
GPG key ID: 86BEF881AE2CF276
3 changed files with 21 additions and 11 deletions

View file

@ -5,10 +5,15 @@ from UM.Logger import Logger
from UM.Settings.ContainerRegistry import ContainerRegistry # To listen to containers being added. from UM.Settings.ContainerRegistry import ContainerRegistry # To listen to containers being added.
from UM.Settings.DefinitionContainer import DefinitionContainer from UM.Settings.DefinitionContainer import DefinitionContainer
from UM.Settings.Interfaces import ContainerInterface from UM.Settings.Interfaces import ContainerInterface
import cura.CuraApplication # Imported like this to prevent circular dependencies.
from cura.Machines.MachineNode import MachineNode from cura.Machines.MachineNode import MachineNode
from typing import Dict from typing import Dict, List, TYPE_CHECKING
import time import time
if TYPE_CHECKING:
from cura.Machines.QualityGroup import QualityGroup
## This class contains a look-up tree for which containers are available at ## This class contains a look-up tree for which containers are available at
# which stages of configuration. # which stages of configuration.
# #
@ -29,6 +34,19 @@ class ContainerTree:
container_registry.containerAdded.connect(self._machineAdded) container_registry.containerAdded.connect(self._machineAdded)
self._loadAll() 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. ## Builds the initial container tree.
def _loadAll(self): def _loadAll(self):
Logger.log("i", "Building container tree.") Logger.log("i", "Building container tree.")

View file

@ -52,11 +52,7 @@ class IntentModel(ListModel):
if not global_stack: if not global_stack:
self.setItems(new_items) self.setItems(new_items)
return return
definition_id = global_stack.definition.getId() quality_groups = ContainerTree.getInstance().getCurrentQualityGroups()
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)
for intent_category, quality_type in IntentManager.getInstance().getCurrentAvailableIntents(): for intent_category, quality_type in IntentManager.getInstance().getCurrentAvailableIntents():
if intent_category == self._intent_category: if intent_category == self._intent_category:

View file

@ -43,11 +43,7 @@ class QualityManagementModel(ListModel):
self.setItems([]) self.setItems([])
return return
variant_names = [extruder.variant.getName() for extruder in global_stack.extruders] quality_group_dict = ContainerTree.getInstance().getCurrentQualityGroups()
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_changes_group_dict = self._quality_manager.getQualityChangesGroups(global_stack) 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() available_quality_types = set(quality_type for quality_type, quality_group in quality_group_dict.items()