From bc5532dab302a16819903049c5e7e22bd1939e06 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 26 Mar 2024 14:01:35 +0100 Subject: [PATCH 1/2] Prevent crash if the variants only have an 'empty' entry. Just get the one you'd get if no variant was asked (like in the other branch of the if) then. CURA-11772 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 164952f9f1..88c79f2b84 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -1225,7 +1225,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): node = machine_node.variants.get(machine_node.preferred_variant_name, next(iter(machine_node.variants.values()))) else: variant_name = extruder_info.variant_info.parser["general"]["name"] - node = ContainerTree.getInstance().machines[global_stack.definition.getId()].variants[variant_name] + node = ContainerTree.getInstance().machines[global_stack.definition.getId()].variants.get(variant_name, next(iter(machine_node.variants.values()))) extruder_stack.variant = node.container def _applyMaterials(self, global_stack, extruder_stack_dict): From 93861073d3a64a8fd1d244727a618d88f7016f88 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Thu, 28 Mar 2024 17:00:57 +0100 Subject: [PATCH 2/2] Fix another open-file resulting in a crash. If the materials doesn't have the right key in it, just continue. It should be somewhere after all. part of CURA-11772 --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 88c79f2b84..0905b6fba9 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -1240,7 +1240,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader): root_material_id = extruder_info.root_material_id root_material_id = self._old_new_materials.get(root_material_id, root_material_id) - material_node = machine_node.variants[extruder_stack.variant.getName()].materials[root_material_id] + available_materials = machine_node.variants[extruder_stack.variant.getName()].materials + if root_material_id not in available_materials: + continue + material_node = available_materials[root_material_id] extruder_stack.material = material_node.container def _clearMachineSettings(self, global_stack, extruder_stack_dict):