Insert "generic color same brand" logic for qualities

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
This commit is contained in:
Jaime van Kessel 2023-08-15 13:11:00 +02:00
parent 8eb7866694
commit 331ff75315
No known key found for this signature in database
GPG Key ID: C85F7A3AF1BAA7C4

View File

@ -31,6 +31,7 @@ class MaterialNode(ContainerNode):
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)
@ -80,6 +81,7 @@ class MaterialNode(ContainerNode):
# 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:
@ -89,9 +91,22 @@ class MaterialNode(ContainerNode):
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)}
qualities.extend((quality for quality in qualities_any_material if quality.get("material") in all_material_base_files))
right_brand_no_color_qualities = [quality for quality in qualities_any_material if quality.get("material") in all_material_base_files_right_brand]
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