diff options
Diffstat (limited to 'lib/extensions/base.py')
| -rw-r--r-- | lib/extensions/base.py | 48 |
1 files changed, 14 insertions, 34 deletions
diff --git a/lib/extensions/base.py b/lib/extensions/base.py index b9bba617..279ca396 100644 --- a/lib/extensions/base.py +++ b/lib/extensions/base.py @@ -6,10 +6,10 @@ import re import inkex from stringcase import snakecase -from ..commands import is_command, layer_commands -from ..elements import AutoFill, Fill, Stroke, SatinColumn, Polyline, EmbroideryElement +from ..commands import layer_commands +from ..elements import EmbroideryElement, nodes_to_elements from ..i18n import _ -from ..svg.tags import SVG_GROUP_TAG, INKSCAPE_GROUPMODE, SVG_DEFS_TAG, EMBROIDERABLE_TAGS, SVG_POLYLINE_TAG +from ..svg.tags import SVG_GROUP_TAG, INKSCAPE_GROUPMODE, SVG_DEFS_TAG, EMBROIDERABLE_TAGS SVG_METADATA_TAG = inkex.addNS("metadata", "svg") @@ -109,6 +109,16 @@ class InkstitchExtension(inkex.Effect): if g.get(INKSCAPE_GROUPMODE) == "layer": g.set("style", "display:none") + def ensure_current_layer(self): + # if no layer is selected, inkex defaults to the root, which isn't + # particularly useful + if self.current_layer is self.document.getroot(): + try: + self.current_layer = self.document.xpath(".//svg:g[@inkscape:groupmode='layer']", namespaces=inkex.NSS)[0] + except IndexError: + # No layers at all?? Fine, we'll stick with the default. + pass + def no_elements_error(self): if self.selected: inkex.errormsg(_("No embroiderable paths selected.")) @@ -151,38 +161,8 @@ class InkstitchExtension(inkex.Effect): def get_nodes(self): return self.descendants(self.document.getroot()) - def detect_classes(self, node): - if node.tag == SVG_POLYLINE_TAG: - return [Polyline] - else: - element = EmbroideryElement(node) - - if element.get_boolean_param("satin_column"): - return [SatinColumn] - else: - classes = [] - - if element.get_style("fill", "black"): - if element.get_boolean_param("auto_fill", True): - classes.append(AutoFill) - else: - classes.append(Fill) - - if element.get_style("stroke"): - if not is_command(element.node): - classes.append(Stroke) - - if element.get_boolean_param("stroke_first", False): - classes.reverse() - - return classes - def get_elements(self): - self.elements = [] - for node in self.get_nodes(): - classes = self.detect_classes(node) - self.elements.extend(cls(node) for cls in classes) - + self.elements = nodes_to_elements(self.get_nodes()) if self.elements: return True else: |
