diff --git a/cura/Settings/SettingOverrideDecorator.py b/cura/Settings/SettingOverrideDecorator.py index e853a3a979..69d98314b6 100644 --- a/cura/Settings/SettingOverrideDecorator.py +++ b/cura/Settings/SettingOverrideDecorator.py @@ -2,6 +2,7 @@ # Cura is released under the terms of the LGPLv3 or higher. import copy +import uuid from UM.Scene.SceneNodeDecorator import SceneNodeDecorator from UM.Signal import Signal, signalemitter @@ -34,7 +35,7 @@ class SettingOverrideDecorator(SceneNodeDecorator): super().__init__() self._stack = PerObjectContainerStack(container_id = "per_object_stack_" + str(id(self))) self._stack.setDirty(False) # This stack does not need to be saved. - user_container = InstanceContainer(container_id = "SettingOverrideInstanceContainer") + user_container = InstanceContainer(container_id = self._generateUniqueName()) user_container.addMetaDataEntry("type", "user") self._stack.userChanges = user_container self._extruder_stack = ExtruderManager.getInstance().getExtruderStack(0).getId() @@ -49,12 +50,19 @@ class SettingOverrideDecorator(SceneNodeDecorator): self.activeExtruderChanged.connect(self._updateNextStack) self._updateNextStack() + def _generateUniqueName(self): + return "SettingOverrideInstanceContainer-%s" % uuid.uuid1() + def __deepcopy__(self, memo): ## Create a fresh decorator object deep_copy = SettingOverrideDecorator() + ## Copy the instance instance_container = copy.deepcopy(self._stack.getContainer(0), memo) + # A unique name must be added, or replaceContainer will not replace it + instance_container.setMetaDataEntry("id", self._generateUniqueName) + ## Set the copied instance as the first (and only) instance container of the stack. deep_copy._stack.replaceContainer(0, instance_container)