inkstitch/lib/extensions/duplicate_params.py

42 wiersze
1.5 KiB
Python

# Authors: see git history
#
# Copyright (c) 2021 Authors
# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details.
from inkex import NSS, ShapeElement, errormsg
from ..i18n import _
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.svg.selection.get(ShapeElement)
if len(objects) < 2:
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.first()
copy_from_attribs = self.get_inkstitch_attributes(copy_from)
copy_to = objects
# remove inkstitch params from copy_to elements
for element in copy_to:
if element == copy_to.first():
continue
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 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 NSS['inkstitch'] in k}