summaryrefslogtreecommitdiff
path: root/lib/extensions/remove_embroidery_settings.py
blob: c467e797d5887b29fc7896cba6f94bf95ac513b3 (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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import inkex

from ..commands import find_commands
from .base import InkstitchExtension


class RemoveEmbroiderySettings(InkstitchExtension):
    def __init__(self, *args, **kwargs):
        InkstitchExtension.__init__(self, *args, **kwargs)
        self.OptionParser.add_option("-p", "--del_params", dest="del_params", type="inkbool", default=True)
        self.OptionParser.add_option("-c", "--del_commands", dest="del_commands", type="inkbool", default=False)
        self.OptionParser.add_option("-d", "--del_print", dest="del_print", type="inkbool", default=False)

    def effect(self):
        if self.options.del_params:
            self.remove_params()
        if self.options.del_commands:
            self.remove_commands()
        if self.options.del_print:
            self.remove_print_settings()

    def remove_print_settings(self):
        print_settings = "svg:metadata//*"
        print_settings = self.find_elements(print_settings)
        for print_setting in print_settings:
            if print_setting.prefix == "inkstitch":
                self.remove_element(print_setting)

    def remove_params(self):
        if not self.selected:
            xpath = ".//svg:path"
            elements = self.find_elements(xpath)
            self.remove_embroider_attributes(elements)
        else:
            for node in self.selected:
                elements = self.get_selected_elements(node)
                self.remove_embroider_attributes(elements)

    def remove_commands(self):
        if not self.selected:
            commands = ".//*[starts-with(@inkscape:label, 'Ink/Stitch Command:')]"
            self.remove_elements(commands)

            symbols = ".//*[starts-with(@id, 'inkstitch_')]"
            self.remove_elements(symbols)
        else:
            for node in self.selected:
                elements = self.get_selected_elements(node)
                for element in elements:
                    for command in find_commands(element):
                        group = command.connector.getparent()
                        group.getparent().remove(group)

    def get_selected_elements(self, element_id):
        xpath = ".//svg:path[@id='%s']" % element_id
        elements = self.find_elements(xpath)
        if not elements:
            xpath = ".//svg:g[@id='%s']//svg:path" % element_id
            elements = self.find_elements(xpath)
        return elements

    def find_elements(self, xpath):
        svg = self.document.getroot()
        elements = svg.xpath(xpath, namespaces=inkex.NSS)
        return elements

    def remove_elements(self, xpath):
        elements = self.find_elements(xpath)
        for element in elements:
            self.remove_element(element)

    def remove_element(self, element):
        element.getparent().remove(element)

    def remove_embroider_attributes(self, elements):
        for element in elements:
            for attrib in element.attrib:
                if attrib.startswith('embroider_'):
                    del element.attrib[attrib]