blob: 9fcdbf1c0b4d72e5d07c761de9a259d8abf74bfb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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}
|