From 331ff753159a59f8145cdb5e8522128eb7b5b931 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 15 Aug 2023 13:11:00 +0200 Subject: [PATCH] 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 --- cura/Machines/MaterialNode.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index 18db7d982d..179451ff67 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -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