summaryrefslogtreecommitdiff
path: root/lib/extensions
diff options
context:
space:
mode:
authorKaalleen <reni@allenka.de>2021-06-22 20:04:39 +0200
committerKaalleen <reni@allenka.de>2021-06-22 20:04:39 +0200
commit1adfa87a68be6bcc92d9521b97ab59dc022ab3be (patch)
tree9ed178a53243047e048ac9f20fcb052fe93f0d92 /lib/extensions
parentbf064b71697930da40c0f8d1ae4d7064303bdf8c (diff)
satin pattern and split stitch
Diffstat (limited to 'lib/extensions')
-rw-r--r--lib/extensions/__init__.py2
-rw-r--r--lib/extensions/apply_satin_pattern.py39
-rw-r--r--lib/extensions/base.py7
3 files changed, 45 insertions, 3 deletions
diff --git a/lib/extensions/__init__.py b/lib/extensions/__init__.py
index 25f835c3..70df7c37 100644
--- a/lib/extensions/__init__.py
+++ b/lib/extensions/__init__.py
@@ -5,6 +5,7 @@
from lib.extensions.troubleshoot import Troubleshoot
+from .apply_satin_pattern import ApplySatinPattern
from .auto_satin import AutoSatin
from .break_apart import BreakApart
from .cleanup import Cleanup
@@ -45,6 +46,7 @@ __all__ = extensions = [StitchPlanPreview,
GlobalCommands,
ConvertToSatin,
CutSatin,
+ ApplySatinPattern,
AutoSatin,
Lettering,
LetteringGenerateJson,
diff --git a/lib/extensions/apply_satin_pattern.py b/lib/extensions/apply_satin_pattern.py
new file mode 100644
index 00000000..9da81075
--- /dev/null
+++ b/lib/extensions/apply_satin_pattern.py
@@ -0,0 +1,39 @@
+# 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 ..i18n import _
+from ..svg.tags import INKSTITCH_ATTRIBS
+from .base import InkstitchExtension
+from ..elements import SatinColumn
+
+
+class ApplySatinPattern(InkstitchExtension):
+ # Add inkstitch:pattern attribute to selected patterns. The patterns will be projected on a satin column, which must be in the selection too
+
+ def effect(self):
+ if not self.get_elements():
+ return
+
+ if not self.svg.selected or not any(isinstance(item, SatinColumn) for item in self.elements) or len(self.svg.selected) < 2:
+ inkex.errormsg(_("Please select at least one satin column and a pattern."))
+ return
+
+ if sum(isinstance(item, SatinColumn) for item in self.elements) > 1:
+ inkex.errormsg(_("Please select only one satin column."))
+ return
+
+ satin_id = self.get_satin_column().node.get('id', None)
+ patterns = self.get_patterns()
+
+ for pattern in patterns:
+ pattern.node.set(INKSTITCH_ATTRIBS['pattern'], satin_id)
+
+ def get_satin_column(self):
+ return list(filter(lambda satin: isinstance(satin, SatinColumn), self.elements))[0]
+
+ def get_patterns(self):
+ return list(filter(lambda satin: not isinstance(satin, SatinColumn), self.elements))
diff --git a/lib/extensions/base.py b/lib/extensions/base.py
index 70ca4701..f23ec5e2 100644
--- a/lib/extensions/base.py
+++ b/lib/extensions/base.py
@@ -18,7 +18,8 @@ from ..elements.clone import is_clone
from ..i18n import _
from ..svg import generate_unique_id
from ..svg.tags import (CONNECTOR_TYPE, EMBROIDERABLE_TAGS, INKSCAPE_GROUPMODE,
- NOT_EMBROIDERABLE_TAGS, SVG_DEFS_TAG, SVG_GROUP_TAG)
+ INKSTITCH_ATTRIBS, NOT_EMBROIDERABLE_TAGS,
+ SVG_DEFS_TAG, SVG_GROUP_TAG)
SVG_METADATA_TAG = inkex.addNS("metadata", "svg")
@@ -170,9 +171,9 @@ class InkstitchExtension(inkex.Effect):
if selected:
if node.tag == SVG_GROUP_TAG:
pass
- elif getattr(node, "get_path", None):
+ elif (node.tag in EMBROIDERABLE_TAGS or is_clone(node)) and not node.get(INKSTITCH_ATTRIBS['pattern']):
nodes.append(node)
- elif troubleshoot and (node.tag in NOT_EMBROIDERABLE_TAGS or node.tag in EMBROIDERABLE_TAGS or is_clone(node)):
+ elif troubleshoot and node.tag in NOT_EMBROIDERABLE_TAGS:
nodes.append(node)
return nodes