# 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}