From da8b55cf62ab91caf24f3969b0c8ef6874d1dffe Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 15 Aug 2017 14:38:48 +0200 Subject: [PATCH] Make sure stacks will have non-empty definitionChanges in project loading CURA-4107 In old Cura, there is no definitionChanges container, so loading a project file from an old version will result in stacks with empty defnitionChanges. This will cause an unnecessary auto-slice problem when we switch between the extruder tabs for the first time. This action will trigger a piece code in MachineAction which creates a definitionChanges container for the active stack if it is empty. This eventually triggers a propertyChanged signal and results in an unncessary auto-slicing. --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 0377ce7655..8fdb120189 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -17,6 +17,7 @@ from .WorkspaceDialog import WorkspaceDialog import xml.etree.ElementTree as ET +from cura.Settings.CuraStackBuilder import CuraStackBuilder from cura.Settings.ExtruderManager import ExtruderManager from cura.Settings.ExtruderStack import ExtruderStack from cura.Settings.GlobalStack import GlobalStack @@ -665,6 +666,9 @@ class ThreeMFWorkspaceReader(WorkspaceReader): Logger.log("e", "Resolve strategy of %s for machine is not supported", self._resolve_strategies["machine"]) + # Create a new definition_changes container if it was empty + if stack.definitionChanges == self._container_registry.getEmptyInstanceContainer(): + stack.setDefinitionChanges(CuraStackBuilder.createDefinitionChangesContainer(stack, stack._id + "_settings")) global_stack = stack Job.yieldThread() except: @@ -722,6 +726,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader): else: Logger.log("w", "Unknown resolve strategy: %s", self._resolve_strategies["machine"]) + # Create a new definition_changes container if it was empty + if stack.definitionChanges == self._container_registry.getEmptyInstanceContainer(): + stack.setDefinitionChanges(CuraStackBuilder.createDefinitionChangesContainer(stack, stack._id + "_settings")) + extruder_stacks.append(stack) except: Logger.logException("w", "We failed to serialize the stack. Trying to clean up.")