Fix duplicating SettingOverrideDecorator settings

A deepcopy of a SettingOverrideDecorator also creates a deepcopy of a SettingContainer. This SettingContainer has the same id as the original, which makes CuraContainerStack.replaceContainer reject the new SettingContainer.
This commit is contained in:
fieldOfView 2018-03-23 16:10:02 +01:00
parent 3078ac2d2d
commit 977eb8c94d
2 changed files with 4 additions and 3 deletions

View File

@ -228,7 +228,7 @@ class CuraContainerStack(ContainerStack):
#
# \throws Exception.InvalidContainerError Raised when trying to replace a container with a container that has an incorrect type.
@override(ContainerStack)
def replaceContainer(self, index: int, container: ContainerInterface, postpone_emit: bool = False) -> None:
def replaceContainer(self, index: int, container: ContainerInterface, postpone_emit: bool = False, force_replace: bool = False) -> None:
expected_type = _ContainerIndexes.IndexTypeMap[index]
if expected_type == "definition":
if not isinstance(container, DefinitionContainer):
@ -237,7 +237,7 @@ class CuraContainerStack(ContainerStack):
raise Exceptions.InvalidContainerError("Cannot replace container at index {index} with a container that is not of {type} type, but {actual_type} type.".format(index = index, type = expected_type, actual_type = container.getMetaDataEntry("type")))
current_container = self._containers[index]
if current_container.getId() == container.getId():
if current_container.getId() == container.getId() and not force_replace:
return
super().replaceContainer(index, container, postpone_emit)

View File

@ -56,7 +56,8 @@ class SettingOverrideDecorator(SceneNodeDecorator):
instance_container = copy.deepcopy(self._stack.getContainer(0), memo)
## Set the copied instance as the first (and only) instance container of the stack.
deep_copy._stack.replaceContainer(0, instance_container)
# Force replacing the container even though the id of the created deepcopy is the same
deep_copy._stack.replaceContainer(0, instance_container, force_replace = True)
# Properly set the right extruder on the copy
deep_copy.setActiveExtruder(self._extruder_stack)