mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-12-05 16:51:12 -07:00
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:
parent
3078ac2d2d
commit
977eb8c94d
2 changed files with 4 additions and 3 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue