diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 77a7da8b6a..913cea4f26 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -24,6 +24,7 @@ from cura.Settings.ExtruderStack import ExtruderStack from cura.Settings.GlobalStack import GlobalStack from cura.Settings.CuraContainerStack import _ContainerIndexes from cura.QualityManager import QualityManager +from cura.CuraApplication import CuraApplication from configparser import ConfigParser import zipfile @@ -750,8 +751,16 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # If not extruder stacks were saved in the project file (pre 3.1) create one manually # We re-use the container registry's addExtruderStackForSingleExtrusionMachine method for this if not extruder_stacks: - stack = self._container_registry.addExtruderStackForSingleExtrusionMachine(global_stack, "fdmextruder") + if self._resolve_strategies["machine"] == "new": + stack = self._container_registry.addExtruderStackForSingleExtrusionMachine(global_stack, "fdmextruder") + else: + stack = global_stack.extruders.get("0") + if not stack: + # this should not happen + Logger.log("e", "Cannot find any extruder in an existing global stack [%s].", global_stack.getId()) if stack: + if global_stack.quality.getId() in ("empty", "empty_quality"): + stack.quality = empty_quality_container if self._resolve_strategies["machine"] == "override": # in case the extruder is newly created (for a single-extrusion machine), we need to override # the existing extruder stack. @@ -991,6 +1000,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader): for stack in extruder_stacks: stack.setNextStack(global_stack) stack.containersChanged.emit(stack.getTop()) + else: + if quality_has_been_changed: + CuraApplication.getInstance().getMachineManager().activeQualityChanged.emit() # Actually change the active machine. Application.getInstance().setGlobalContainerStack(global_stack) @@ -1040,13 +1052,13 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # find the old material ID old_material_id_in_stack = stack.material.getId() best_matching_old_material_id = None - best_matching_old_meterial_prefix_length = -1 + best_matching_old_material_prefix_length = -1 for old_parent_material_id in old_new_material_dict: - if len(old_parent_material_id) < best_matching_old_meterial_prefix_length: + if len(old_parent_material_id) < best_matching_old_material_prefix_length: continue if len(old_parent_material_id) <= len(old_material_id_in_stack): if old_parent_material_id == old_material_id_in_stack[0:len(old_parent_material_id)]: - best_matching_old_meterial_prefix_length = len(old_parent_material_id) + best_matching_old_material_prefix_length = len(old_parent_material_id) best_matching_old_material_id = old_parent_material_id if best_matching_old_material_id is None: