diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index fe20af2cd5..4418467ba8 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -60,28 +60,41 @@ class MaterialNode(ContainerNode): container_registry = ContainerRegistry.getInstance() # Find all quality profiles that fit on this material. if not self.variant.machine.has_machine_quality: # Need to find the global qualities. - qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = "fdmprinter") + qualities = container_registry.findInstanceContainersMetadata(type = "quality", + definition = "fdmprinter") elif not self.variant.machine.has_materials: - qualities = container_registry.findInstanceContainersMetadata(type="quality", definition=self.variant.machine.quality_definition) + qualities = container_registry.findInstanceContainersMetadata(type = "quality", + definition = self.variant.machine.quality_definition) else: if self.variant.machine.has_variants: # Need to find the qualities that specify a material profile with the same material type. - qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name, material = self.container_id) # First try by exact material ID. + qualities = container_registry.findInstanceContainersMetadata(type = "quality", + definition = self.variant.machine.quality_definition, + variant = self.variant.variant_name, + material = self.base_file) # First try by exact material ID. + # CURA-7070 + # The quality profiles only reference a material with the material_root_id. They will never state something + # 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.container_id) + 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: - qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name) + qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", + definition = self.variant.machine.quality_definition, + variant = self.variant.variant_name) else: - qualities_any_material = container_registry.findInstanceContainersMetadata(type="quality", definition = self.variant.machine.quality_definition) + qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", + definition = self.variant.machine.quality_definition) for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", material = my_material_type): - qualities.extend((quality for quality in qualities_any_material if quality.get("material") == material_metadata["id"])) + qualities.extend((quality for quality in qualities_any_material if quality.get("material") == material_metadata["base_file"])) if not qualities: # No quality profiles found. Go by GUID then. my_guid = self.guid for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", guid = my_guid): - qualities.extend((quality for quality in qualities_any_material if quality["material"] == material_metadata["id"])) + qualities.extend((quality for quality in qualities_any_material if quality["material"] == material_metadata["base_file"])) if not qualities: # There are still some machines that should use global profiles in the extruder, so do that now.