From f3a3cde71e9312d1f07c156033de5b7fb4b99f2d Mon Sep 17 00:00:00 2001 From: capellancitizen Date: Wed, 14 Aug 2024 19:40:42 -0400 Subject: Clones now also clone commands attached to element and its children. (#3032, #3121) (#3086) --- lib/extensions/unlink_clone.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'lib/extensions') diff --git a/lib/extensions/unlink_clone.py b/lib/extensions/unlink_clone.py index 0c187808..e94bf0ea 100644 --- a/lib/extensions/unlink_clone.py +++ b/lib/extensions/unlink_clone.py @@ -5,9 +5,10 @@ from inkex import Boolean, errormsg, BaseElement -from ..elements import Clone +from ..elements import Clone, EmbroideryElement from ..i18n import _ from .base import InkstitchExtension +from ..svg.tags import CONNECTION_END, CONNECTION_START from typing import List, Tuple @@ -34,8 +35,14 @@ class UnlinkClone(InkstitchExtension): for element in self.elements: if isinstance(element, Clone): resolved = element.resolve_clone(recursive=recursive) - clones_resolved.append((element.node, resolved)) + clones_resolved.append((element.node, resolved[0])) for (clone, resolved) in clones_resolved: - clone.getparent().remove(clone) - resolved.set_id(clone.get_id()) + clone.delete() + orig_id = resolved.get_id() + new_id = clone.get_id() + # Fix up command backlinks - note this has to happen before we rename so they can actually be found. + for command in EmbroideryElement(resolved).commands: + backlink_attrib = CONNECTION_START if command.connector.get(CONNECTION_START) == ("#"+orig_id) else CONNECTION_END + command.connector.set(backlink_attrib, "#"+new_id) + resolved.set_id(new_id) -- cgit v1.2.3