From 7dcf08399184c049ee9a8f4d9aa1a10e080d2253 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 19 Sep 2019 15:56:06 +0200 Subject: [PATCH 1/2] Fix container tree for printers that have no variants but do have qualities & materials CURA-6775 --- cura/Machines/MaterialNode.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index 08015ac72e..7aed6a0171 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -63,11 +63,18 @@ class MaterialNode(ContainerNode): elif not self.variant.machine.has_materials: qualities = container_registry.findInstanceContainersMetadata(type="quality", definition=self.variant.machine.quality_definition) else: - # 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. + 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. + else: + 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 - qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name) + 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) + else: + 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["material"] == material_metadata["id"])) if not qualities: # No quality profiles found. Go by GUID then. From fc67090a2fa39c15c80d026c250d8474673aad81 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 19 Sep 2019 16:15:00 +0200 Subject: [PATCH 2/2] Fix crash when adding UMO --- 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 7aed6a0171..53596f8db3 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -73,8 +73,8 @@ class MaterialNode(ContainerNode): 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) 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) + qualities_any_material = [metadata for metadata in qualities_any_material if metadata.get("global_quality", "False") != "True"] for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", material = my_material_type): qualities.extend((quality for quality in qualities_any_material if quality["material"] == material_metadata["id"])) if not qualities: # No quality profiles found. Go by GUID then.