summaryrefslogtreecommitdiff
path: root/lib/extensions/unlink_clone.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/extensions/unlink_clone.py')
-rw-r--r--lib/extensions/unlink_clone.py15
1 files changed, 11 insertions, 4 deletions
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)