summaryrefslogtreecommitdiff
path: root/lib/extensions/duplicate_params.py
diff options
context:
space:
mode:
authorKaalleen <36401965+kaalleen@users.noreply.github.com>2021-04-05 18:54:09 +0200
committerGitHub <noreply@github.com>2021-04-05 18:54:09 +0200
commitd713c8649231aee5ffd61df156fee55f90775b03 (patch)
tree4bedb0506cd839cc4917ebbbbbaf8d87b73f780d /lib/extensions/duplicate_params.py
parent767ead90813b296de991de497bfe0e2d33c7452e (diff)
rename transfer params to duplicate params (#1128)
Diffstat (limited to 'lib/extensions/duplicate_params.py')
-rw-r--r--lib/extensions/duplicate_params.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/extensions/duplicate_params.py b/lib/extensions/duplicate_params.py
new file mode 100644
index 00000000..9fcdbf1c
--- /dev/null
+++ b/lib/extensions/duplicate_params.py
@@ -0,0 +1,49 @@
+# Authors: see git history
+#
+# Copyright (c) 2021 Authors
+# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details.
+
+import inkex
+
+from ..i18n import _
+from ..svg.tags import EMBROIDERABLE_TAGS, SVG_GROUP_TAG
+from .base import InkstitchExtension
+
+
+class DuplicateParams(InkstitchExtension):
+ # Transfer inkstitch namespaced attributes from the first selected element to the rest of selection
+
+ def effect(self):
+ objects = self.get_selected_in_order()
+ if len(objects) < 2:
+ inkex.errormsg(_("This function copies Ink/Stitch parameters from the first selected element to the rest of the selection. "
+ "Please select at least two elements."))
+ return
+
+ copy_from = objects[0]
+ copy_from_attribs = self.get_inkstitch_attributes(copy_from)
+
+ copy_to_selection = objects[1:]
+ self.copy_to = []
+
+ # extract copy_to group elements
+ for element in copy_to_selection:
+ if element.tag == SVG_GROUP_TAG:
+ for descendant in element.iterdescendants(EMBROIDERABLE_TAGS):
+ self.copy_to.append(descendant)
+ elif element.tag in EMBROIDERABLE_TAGS:
+ self.copy_to.append(element)
+
+ # remove inkstitch params from copy_to elements
+ for element in self.copy_to:
+ copy_to_attribs = self.get_inkstitch_attributes(element)
+ for attrib in copy_to_attribs:
+ element.pop(attrib)
+
+ # paste inkstitch params from copy_from element to copy_to elements
+ for attrib in copy_from_attribs:
+ for element in self.copy_to:
+ element.attrib[attrib] = copy_from_attribs[attrib]
+
+ def get_inkstitch_attributes(self, node):
+ return {k: v for k, v in node.attrib.iteritems() if inkex.NSS['inkstitch'] in k}