summaryrefslogtreecommitdiff
path: root/lib/svg
diff options
context:
space:
mode:
Diffstat (limited to 'lib/svg')
-rw-r--r--lib/svg/__init__.py10
-rw-r--r--lib/svg/path.py13
-rw-r--r--lib/svg/styles.py31
3 files changed, 50 insertions, 4 deletions
diff --git a/lib/svg/__init__.py b/lib/svg/__init__.py
index b17a37f0..6694d534 100644
--- a/lib/svg/__init__.py
+++ b/lib/svg/__init__.py
@@ -4,8 +4,10 @@
# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details.
from .guides import get_guides
-from .path import apply_transforms, get_node_transform, get_correction_transform, line_strings_to_csp, point_lists_to_csp, line_strings_to_path
-from .path import apply_transforms, get_node_transform, get_correction_transform, line_strings_to_csp, point_lists_to_csp
+from .path import (apply_transforms, get_correction_transform,
+ get_node_transform, line_strings_to_coordinate_lists,
+ line_strings_to_csp, line_strings_to_path,
+ point_lists_to_csp)
from .rendering import color_block_to_point_lists, render_stitch_plan
-from .svg import get_document, generate_unique_id
-from .units import * \ No newline at end of file
+from .svg import generate_unique_id, get_document
+from .units import *
diff --git a/lib/svg/path.py b/lib/svg/path.py
index 5e6e7007..a7c7b1ca 100644
--- a/lib/svg/path.py
+++ b/lib/svg/path.py
@@ -85,6 +85,19 @@ def get_correction_transform(node: inkex.BaseElement, child=False) -> str:
return str(transform)
+def line_strings_to_coordinate_lists(line_strings):
+ try:
+ # This lets us accept a MultiLineString or a list.
+ line_strings = line_strings.geoms
+ except AttributeError:
+ pass
+
+ if line_strings is None:
+ return None
+
+ return [list(ls.coords) for ls in line_strings]
+
+
def line_strings_to_csp(line_strings):
try:
# This lets us accept a MultiLineString or a list.
diff --git a/lib/svg/styles.py b/lib/svg/styles.py
new file mode 100644
index 00000000..c3daaf19
--- /dev/null
+++ b/lib/svg/styles.py
@@ -0,0 +1,31 @@
+# Authors: see git history
+#
+# Copyright (c) 2025 Authors
+# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details.
+
+from shapely.geometry import JOIN_STYLE
+
+
+def get_join_style_args(element):
+ """Convert svg line join style to shapely offset_curve arguments."""
+
+ args = {
+ # mitre is the default per SVG spec
+ 'join_style': JOIN_STYLE.mitre
+ }
+
+ element_join_style = element.get_style('stroke-linejoin')
+
+ if element_join_style is not None:
+ if element_join_style == "miter":
+ args['join_style'] = JOIN_STYLE.mitre
+
+ # 4 is the default per SVG spec
+ miter_limit = float(element.get_style('stroke-miterlimit', 4))
+ args['mitre_limit'] = miter_limit
+ elif element_join_style == "bevel":
+ args['join_style'] = JOIN_STYLE.bevel
+ elif element_join_style == "round":
+ args['join_style'] = JOIN_STYLE.round
+
+ return args