kopia lustrzana https://github.com/inkstitch/inkstitch
91 wiersze
3.5 KiB
Python
91 wiersze
3.5 KiB
Python
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:
|
|
# we are not able to grab commands by a specific id
|
|
# so let's move through every object instead and see if it has a command
|
|
xpath = ".//svg:path|.//svg:circle|.//svg:rect|.//svg:ellipse"
|
|
elements = self.find_elements(xpath)
|
|
else:
|
|
elements = []
|
|
for node in self.selected:
|
|
elements.extend(self.get_selected_elements(node))
|
|
|
|
if elements:
|
|
for element in elements:
|
|
for command in find_commands(element):
|
|
group = command.connector.getparent()
|
|
group.getparent().remove(group)
|
|
|
|
if not self.selected:
|
|
# remove standalone commands
|
|
standalone_commands = ".//svg:use[starts-with(@xlink:href, '#inkstitch_')]"
|
|
self.remove_elements(standalone_commands)
|
|
|
|
# let's remove the symbols (defs), we won't need them in the document
|
|
symbols = ".//*[starts-with(@id, 'inkstitch_')]"
|
|
self.remove_elements(symbols)
|
|
|
|
def get_selected_elements(self, element_id):
|
|
xpath = ".//svg:g[@id='%(id)s']//svg:path|.//svg:g[@id='%(id)s']//svg:use" % dict(id=element_id)
|
|
elements = self.find_elements(xpath)
|
|
if not elements:
|
|
xpath = ".//*[@id='%s']" % 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]
|