diff options
| author | Kaalleen <36401965+kaalleen@users.noreply.github.com> | 2021-04-05 18:54:09 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-05 18:54:09 +0200 |
| commit | d713c8649231aee5ffd61df156fee55f90775b03 (patch) | |
| tree | 4bedb0506cd839cc4917ebbbbbaf8d87b73f780d /lib/extensions/duplicate_params.py | |
| parent | 767ead90813b296de991de497bfe0e2d33c7452e (diff) | |
rename transfer params to duplicate params (#1128)
Diffstat (limited to 'lib/extensions/duplicate_params.py')
| -rw-r--r-- | lib/extensions/duplicate_params.py | 49 |
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} |
