summaryrefslogtreecommitdiff
path: root/lib/extensions/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/extensions/base.py')
-rw-r--r--lib/extensions/base.py48
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: