# 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 lxml import etree from ..i18n import _ from ..svg.tags import SVG_PATH_TAG, SVG_POLYLINE_TAG, SVG_DEFS_TAG from .base import InkstitchExtension class SelectionToGuideLine(InkstitchExtension): def effect(self): if not self.get_elements(): return if not self.svg.selected: inkex.errormsg( _("Please select one object to be marked as a guide line.")) return if len(self.get_nodes()) != 1: inkex.errormsg( _("Please select only one object to be marked as a guide line.")) return for guide_line in self.get_nodes(): if guide_line.tag in (SVG_PATH_TAG, SVG_POLYLINE_TAG): self.set_marker(guide_line) def set_marker(self, node): xpath = ".//marker[@id='inkstitch-guide-line-marker']" guide_line_marker = self.document.xpath(xpath) if not guide_line_marker: # get or create def element defs = self.document.find(SVG_DEFS_TAG) if defs is None: defs = etree.SubElement(self.document, SVG_DEFS_TAG) # insert marker marker = """ """ # noqa: E501 defs.append(etree.fromstring(marker)) # attach marker to node style = node.get('style') or '' style = style.split(";") style = [i for i in style if not i.startswith('marker-start')] style.append('marker-start:url(#inkstitch-guide-line-marker)') node.set('style', ";".join(style))