From 4b313c2dac0627af42d327929279dbd23a43df3a Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 18 Dec 2019 15:38:21 +0100 Subject: [PATCH 1/3] Fix formatting CURA-7070 --- cura/Machines/MaterialNode.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index fe20af2cd5..9f472eb7b5 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -60,21 +60,31 @@ 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.container_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.container_id) 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"])) From 6c9b8f992f2d752e692b1c30cc34e3babdd02508 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 18 Dec 2019 15:39:09 +0100 Subject: [PATCH 2/3] Fix quality search with material base_file CURA-7070 --- cura/Machines/MaterialNode.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index 9f472eb7b5..d68fd94e80 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -71,11 +71,14 @@ class MaterialNode(ContainerNode): qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name, - material = self.container_id) + 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) + material = self.base_file) if not qualities: my_material_type = self.material_type if self.variant.machine.has_variants: From cf6540f91d2fd2b755de4f84b76f0f3f609b713b Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Wed, 18 Dec 2019 16:42:44 +0100 Subject: [PATCH 3/3] Fix qualities lookup for custom materials Search the qualities of the custom material based on the base_file and not based on the id. CURA-7070 --- cura/Machines/MaterialNode.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index d68fd94e80..4418467ba8 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -89,12 +89,12 @@ class MaterialNode(ContainerNode): 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.