Skip to content

Commit

Permalink
Insert "generic color same brand" logic for qualities
Browse files Browse the repository at this point in the history
So instead of always falling back to generic brand and generic color,
we first try to fall back to generic color with the same brand for qualities

CURA-10953
  • Loading branch information
nallath committed Sep 6, 2023
1 parent 8eb7866 commit 331ff75
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions cura/Machines/MaterialNode.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ def __init__(self, container_id: str, variant: "VariantNode") -> None:
my_metadata = container_registry.findContainersMetadata(id = container_id)[0]
self.base_file = my_metadata["base_file"]
self.material_type = my_metadata["material"]
self.brand = my_metadata["brand"]
self.guid = my_metadata["GUID"]
self._loadAll()
container_registry.containerRemoved.connect(self._onRemoved)
Expand Down Expand Up @@ -80,6 +81,7 @@ def _loadAll(self) -> None:
# such as "generic_pla_ultimaker_s5_AA_0.4". So we search with the "base_file" which is the material_root_id.
else:
qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, material = self.base_file)

if not qualities:
my_material_type = self.material_type
if self.variant.machine.has_variants:
Expand All @@ -89,9 +91,22 @@ def _loadAll(self) -> None:
else:
qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition)

all_material_base_files = {material_metadata["base_file"] for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", material = my_material_type)}
# First we attempt to find materials that have the same brand but not the right color
all_material_base_files_right_brand = {material_metadata["base_file"] for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", material = my_material_type, brand = self.brand)}

right_brand_no_color_qualities = [quality for quality in qualities_any_material if quality.get("material") in all_material_base_files_right_brand]

qualities.extend((quality for quality in qualities_any_material if quality.get("material") in all_material_base_files))
if right_brand_no_color_qualities:
# We found qualties for materials with the right brand but not with the right color. Use those.
qualities.extend(right_brand_no_color_qualities)
else:
# Fall back to generic
all_material_base_files = {material_metadata["base_file"] for material_metadata in
container_registry.findInstanceContainersMetadata(type="material",
material=my_material_type)}
no_brand_no_color_qualities = (quality for quality in qualities_any_material if
quality.get("material") in all_material_base_files)
qualities.extend(no_brand_no_color_qualities)

if not qualities: # No quality profiles found. Go by GUID then.
my_guid = self.guid
Expand Down

0 comments on commit 331ff75

Please sign in to comment.