mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-16 11:17:49 -06:00
Implement complete code for currentAvailableIntents
Slightly more complex than the original pseudocode was indicating: It needs to filter on the available quality types first in order to only show the quality types that can be printed with all extruders, but still show the union of all intents for those quality types. Contributes to issue CURA-6091.
This commit is contained in:
parent
c83b9d158b
commit
28e2569c86
2 changed files with 16 additions and 8 deletions
|
@ -194,9 +194,9 @@ class QualityManager(QObject):
|
||||||
return quality_changes_group_dict
|
return quality_changes_group_dict
|
||||||
|
|
||||||
#
|
#
|
||||||
# Gets all quality groups for the given machine. Both available and none available ones will be included.
|
# Gets all quality groups for the given machine. Both available and unavailable ones will be included.
|
||||||
# It returns a dictionary with "quality_type"s as keys and "QualityGroup"s as values.
|
# It returns a dictionary with "quality_type"s as keys and "QualityGroup"s as values.
|
||||||
# Whether a QualityGroup is available can be unknown via the field QualityGroup.is_available.
|
# Whether a QualityGroup is available can be known via the field QualityGroup.is_available.
|
||||||
# For more details, see QualityGroup.
|
# For more details, see QualityGroup.
|
||||||
#
|
#
|
||||||
def getQualityGroups(self, machine: "GlobalStack") -> Dict[str, QualityGroup]:
|
def getQualityGroups(self, machine: "GlobalStack") -> Dict[str, QualityGroup]:
|
||||||
|
|
|
@ -5,6 +5,7 @@ from PyQt5.QtCore import pyqtProperty, pyqtSignal
|
||||||
from typing import Any, Dict, List, Tuple, TYPE_CHECKING
|
from typing import Any, Dict, List, Tuple, TYPE_CHECKING
|
||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
from cura.Machines.QualityManager import QualityManager
|
from cura.Machines.QualityManager import QualityManager
|
||||||
|
from cura.Settings.ExtruderManager import ExtruderManager
|
||||||
from cura.Settings.MachineManager import MachineManager
|
from cura.Settings.MachineManager import MachineManager
|
||||||
from UM.Settings.ContainerRegistry import ContainerRegistry
|
from UM.Settings.ContainerRegistry import ContainerRegistry
|
||||||
|
|
||||||
|
@ -59,15 +60,22 @@ class IntentManager:
|
||||||
# \return A list of tuples of intent_category and quality_type. The actual
|
# \return A list of tuples of intent_category and quality_type. The actual
|
||||||
# instance may vary per extruder.
|
# instance may vary per extruder.
|
||||||
def currentAvailableIntents(self) -> List[Tuple[str, str]]:
|
def currentAvailableIntents(self) -> List[Tuple[str, str]]:
|
||||||
final_intent_ids = {metadata["id"] for metadata in ContainerRegistry.getInstance().findContainersMetadata(type = "intent", definition = current_definition_id)} #All intents that match the global stack.
|
application = CuraApplication.getInstance()
|
||||||
for extruder in all_extruders:
|
quality_groups = application.getQualityManager().getQualityGroups(application.getGlobalContainerStack())
|
||||||
extruder_intent_ids = {metadata["id"] for metadata in self.intentMetadatas(current_definition_id, extruder_nozzle_id, extruder_material_id)}
|
available_quality_types = {quality_group.quality_type for quality_group in quality_groups if quality_group.node_for_global is not None}
|
||||||
final_intent_ids = final_intent_ids.intersection(extruder_intent_ids)
|
|
||||||
|
final_intent_ids = set()
|
||||||
|
global_stack = application.getGlobalContainerStack()
|
||||||
|
current_definition_id = global_stack.definition.getMetaDataEntry("id")
|
||||||
|
for extruder_stack in ExtruderManager.getInstance().getUsedExtruderStacks():
|
||||||
|
nozzle_name = extruder_stack.variant.getMetaDataEntry("name")
|
||||||
|
material_id = extruder_stack.material.getMetaDataEntry("base_file")
|
||||||
|
final_intent_ids |= {metadata["id"] for metadata in self.intentMetadatas(current_definition_id, nozzle_name, material_id) if metadata["quality_type"] in available_quality_types}
|
||||||
|
|
||||||
result = set()
|
result = set()
|
||||||
for intent_id in final_intent_ids:
|
for intent_id in final_intent_ids:
|
||||||
intent = ContainerRegistry.getInstance().findContainers(id = intent_id)[0]
|
intent_metadata = ContainerRegistry.getInstance().findContainersMetadata(id = intent_id)[0]
|
||||||
result.add((intent.getMetaDataEntry("intent_category"), intent.getMetaDataEntry("quality_type")))
|
result.add((intent_metadata["intent_category"], intent_metadata["quality_type"]))
|
||||||
return list(result)
|
return list(result)
|
||||||
|
|
||||||
## List of intent categories to be displayed in the interface.
|
## List of intent categories to be displayed in the interface.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue