summaryrefslogtreecommitdiff
path: root/lib/marker.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/marker.py')
-rw-r--r--lib/marker.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/marker.py b/lib/marker.py
new file mode 100644
index 00000000..4f262abe
--- /dev/null
+++ b/lib/marker.py
@@ -0,0 +1,37 @@
+# Authors: see git history
+#
+# Copyright (c) 2022 Authors
+# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details.
+
+from copy import deepcopy
+from os import path
+
+import inkex
+
+from .utils import cache, get_bundled_dir
+
+MARKER = ['pattern']
+
+
+def ensure_marker(svg, marker):
+ marker_path = ".//*[@id='inkstitch-%s-marker']" % marker
+ if svg.defs.find(marker_path) is None:
+ svg.defs.append(deepcopy(_marker_svg().defs.find(marker_path)))
+
+
+@cache
+def _marker_svg():
+ marker_path = path.join(get_bundled_dir("symbols"), "marker.svg")
+ with open(marker_path) as marker_file:
+ return inkex.load_svg(marker_file).getroot()
+
+
+def set_marker(node, position, marker):
+ ensure_marker(node.getroottree().getroot(), marker)
+
+ # attach marker to node
+ style = node.get('style') or ''
+ style = style.split(";")
+ style = [i for i in style if not i.startswith('marker-%s' % position)]
+ style.append('marker-%s:url(#inkstitch-pattern-marker)' % position)
+ node.set('style', ";".join(style))