diff options
| -rw-r--r-- | lib/extensions/__init__.py | 6 | ||||
| -rw-r--r-- | lib/extensions/remove_embroidery_settings.py | 79 | ||||
| -rw-r--r-- | templates/remove_embroidery_settings.inx | 24 |
3 files changed, 107 insertions, 2 deletions
diff --git a/lib/extensions/__init__.py b/lib/extensions/__init__.py index d6d0e279..38276a64 100644 --- a/lib/extensions/__init__.py +++ b/lib/extensions/__init__.py @@ -2,17 +2,18 @@ from auto_satin import AutoSatin from convert_to_satin import ConvertToSatin from cut_satin import CutSatin from embroider import Embroider -from lib.extensions.troubleshoot import Troubleshoot from flip import Flip from global_commands import GlobalCommands from input import Input from install import Install from layer_commands import LayerCommands from lettering import Lettering +from lib.extensions.troubleshoot import Troubleshoot from object_commands import ObjectCommands from output import Output from params import Params from print_pdf import Print +from remove_embroidery_settings import RemoveEmbroiderySettings from simulate import Simulate from zip import Zip @@ -33,4 +34,5 @@ __all__ = extensions = [Embroider, CutSatin, AutoSatin, Lettering, - Troubleshoot] + Troubleshoot, + RemoveEmbroiderySettings] diff --git a/lib/extensions/remove_embroidery_settings.py b/lib/extensions/remove_embroidery_settings.py new file mode 100644 index 00000000..c467e797 --- /dev/null +++ b/lib/extensions/remove_embroidery_settings.py @@ -0,0 +1,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] diff --git a/templates/remove_embroidery_settings.inx b/templates/remove_embroidery_settings.inx new file mode 100644 index 00000000..d070f34f --- /dev/null +++ b/templates/remove_embroidery_settings.inx @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension"> + <name>{% trans %}Remove embroidery settings{% endtrans %}</name> + <id>org.inkstitch.remove_embroidery_settings.{{ locale }}</id> + <dependency type="executable" location="extensions">inkstitch.py</dependency> + <dependency type="executable" location="extensions">inkex.py</dependency> + <param name="description" type="description">{% trans %}Use this extension to remove the information Ink/Stitch has stored in your document. This can be especially useful if you copy and paste objects from an embroidery design into another document.{% endtrans %}</param> + <param name="del_params" type="boolean" _gui-text="{% trans %}Remove Params{% endtrans %}" + _gui-description="{% trans %}Removes params from selected objects or all objects if nothing is selected.{% endtrans %}">true</param> + <param name="del_commands" type="boolean" _gui-text="{% trans %}Remove Commands{% endtrans %}" + _gui-description="{% trans %}Removes visual commands from selected objects or all objects if nothing is selected.{% endtrans %}">false</param> + <param name="del_print" type="boolean" _gui-text="{% trans %}Remove Print Settings from SVG metadata{% endtrans %}">false</param> + <param name="extension" type="string" gui-hidden="true">remove_embroidery_settings</param> + <effect> + <object-type>all</object-type> + <effects-menu> + <submenu name="Ink/Stitch"> + </submenu> + </effects-menu> + </effect> + <script> + <command reldir="extensions" interpreter="python">inkstitch.py</command> + </script> +</inkscape-extension> |
