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: diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 9713211ad3..85699ea0f5 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -426,6 +426,13 @@ class CuraEngineBackend(QObject, Backend): if not isinstance(source, SceneNode): return + # This case checks if the source node is a node that contains a GCode. In this case the + # cached layer data is removed so the previous data is not rendered - CURA-4821 + if source.callDecoration("isBlockSlicing") and source.callDecoration("getLayerData"): + if self._stored_optimized_layer_data: + print(self._stored_optimized_layer_data) + del self._stored_optimized_layer_data[source.callDecoration("getBuildPlateNumber")] + build_plate_changed = set() source_build_plate_number = source.callDecoration("getBuildPlateNumber") if source == self._scene.getRoot(): diff --git a/resources/qml/ObjectsList.qml b/resources/qml/ObjectsList.qml index 489e38e8d7..9fd2ab1ca7 100644 --- a/resources/qml/ObjectsList.qml +++ b/resources/qml/ObjectsList.qml @@ -31,7 +31,7 @@ Rectangle border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("lining") - property bool collapsed: false; + property bool collapsed: true; SystemPalette { id: palette }