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