mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-14 06:45:57 +08: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
@ -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…
x
Reference in New Issue
Block a user