Find quality nodes as subnodes of material nodes

Similar to the materials and variants.

Contributes to issue CURA-6600.
This commit is contained in:
Ghostkeeper 2019-08-06 16:19:30 +02:00
parent 24346fc8e3
commit d3dc36c187
No known key found for this signature in database
GPG Key ID: 86BEF881AE2CF276
2 changed files with 37 additions and 2 deletions

View File

@ -21,7 +21,9 @@ class MachineNode(ContainerNode):
self.variants = {} # type: Dict[str, VariantNode] # mapping variant names to their nodes. self.variants = {} # type: Dict[str, VariantNode] # mapping variant names to their nodes.
container_registry = ContainerRegistry.getInstance() container_registry = ContainerRegistry.getInstance()
my_metadata = container_registry.findContainersMetadata(id = container_id)[0] my_metadata = container_registry.findContainersMetadata(id = container_id)[0]
self.has_machine_materials = parseBool(my_metadata.get("has_machine_materials", "true")) self.has_machine_materials = parseBool(my_metadata.get("has_machine_materials", "false"))
self.has_machine_quality = parseBool(my_metadata.get("has_machine_quality", "false"))
self.quality_definition = my_metadata.get("quality_definition", container_id)
self.exclude_materials = my_metadata.get("exclude_materials", []) self.exclude_materials = my_metadata.get("exclude_materials", [])
container_registry.containerAdded.connect(self._variantAdded) container_registry.containerAdded.connect(self._variantAdded)
self._loadAll() self._loadAll()

View File

@ -3,6 +3,8 @@
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from UM.Settings.ContainerRegistry import ContainerRegistry
from UM.Settings.Interfaces import ContainerInterface
from cura.Machines.ContainerNode import ContainerNode from cura.Machines.ContainerNode import ContainerNode
from cura.Machines.QualityNode import QualityNode from cura.Machines.QualityNode import QualityNode
from cura.Machines.VariantNode import VariantNode from cura.Machines.VariantNode import VariantNode
@ -17,3 +19,34 @@ class MaterialNode(ContainerNode):
def __init__(self, container_id, parent: VariantNode) -> None: def __init__(self, container_id, parent: VariantNode) -> None:
super().__init__(container_id, parent) super().__init__(container_id, parent)
self.qualities = {} # type: Dict[str, QualityNode] # Mapping container IDs to quality profiles. self.qualities = {} # type: Dict[str, QualityNode] # Mapping container IDs to quality profiles.
container_registry = ContainerRegistry.getInstance()
my_metadata = container_registry.findContainersMetadata(id = container_id)[0]
self.base_file = my_metadata["base_file"]
container_registry.containerAdded.connect(self._qualityAdded)
self._loadAll()
def _loadAll(self) -> None:
container_registry = ContainerRegistry.getInstance()
# Find all quality profiles that fit on this material.
if not self.parent.parent.has_machine_quality: # Need to find the global qualities.
qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = "fdmprinter")
else:
qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.parent.parent.quality_definition, variant = self.parent.variant_name, material = self.base_file)
for quality in qualities:
quality_id = quality["id"]
if quality_id not in self.qualities:
self.qualities[quality_id] = QualityNode(quality_id, parent = self)
def _qualityAdded(self, container: ContainerInterface) -> None:
if container.getMetaDataEntry("type") != "quality":
return # Not interested.
if not self.parent.parent.has_machine_quality:
if container.getMetaDataEntry("definition") != "fdmprinter":
return # Only want global qualities.
else:
if container.getMetaDataEntry("definition") != self.parent.parent.quality_definition or container.getMetaDataEntry("variant") != self.parent.variant_name or container.getMetaDataEntry("material") != self.base_file:
return # Doesn't match our configuration.
quality_id = container.getId()
self.qualities[quality_id] = QualityNode(quality_id, parent = self)