summaryrefslogtreecommitdiff
path: root/lib/extensions
diff options
context:
space:
mode:
authorKaalleen <reni@allenka.de>2021-06-28 20:05:50 +0200
committerKaalleen <reni@allenka.de>2021-06-28 20:05:50 +0200
commitecacb9829e9c2b7050486707211f9d176aafdf75 (patch)
treef6f30f9707a9c3f603ce896b0b95dbe5c4b13dc1 /lib/extensions
parent2f54ff2a436f2774bfdc730b6e95c43f18ed81ac (diff)
pattern markers
Diffstat (limited to 'lib/extensions')
-rw-r--r--lib/extensions/__init__.py4
-rw-r--r--lib/extensions/apply_pattern.py62
-rw-r--r--lib/extensions/base.py12
-rw-r--r--lib/extensions/group_commands.py41
4 files changed, 69 insertions, 50 deletions
diff --git a/lib/extensions/__init__.py b/lib/extensions/__init__.py
index a6d25d2c..3bd2fef6 100644
--- a/lib/extensions/__init__.py
+++ b/lib/extensions/__init__.py
@@ -5,6 +5,7 @@
from lib.extensions.troubleshoot import Troubleshoot
+from .apply_pattern import ApplyPattern
from .auto_satin import AutoSatin
from .break_apart import BreakApart
from .cleanup import Cleanup
@@ -14,7 +15,6 @@ from .duplicate_params import DuplicateParams
from .embroider_settings import EmbroiderSettings
from .flip import Flip
from .global_commands import GlobalCommands
-from .group_commands import GroupCommands
from .import_threadlist import ImportThreadlist
from .input import Input
from .install import Install
@@ -41,8 +41,8 @@ __all__ = extensions = [StitchPlanPreview,
Output,
Zip,
Flip,
+ ApplyPattern,
ObjectCommands,
- GroupCommands,
LayerCommands,
GlobalCommands,
ConvertToSatin,
diff --git a/lib/extensions/apply_pattern.py b/lib/extensions/apply_pattern.py
new file mode 100644
index 00000000..ad881604
--- /dev/null
+++ b/lib/extensions/apply_pattern.py
@@ -0,0 +1,62 @@
+# 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 lxml import etree
+
+from ..i18n import _
+from ..svg.tags import SVG_DEFS_TAG
+from .base import InkstitchExtension
+
+
+class ApplyPattern(InkstitchExtension):
+ # This extension will mark selected
+
+ def effect(self):
+ if not self.get_elements():
+ return
+
+ if not self.svg.selected:
+ inkex.errormsg(_("Please select at least one object to be marked as a pattern."))
+ return
+
+ for pattern in self.svg.selected.values():
+ self.set_marker(pattern)
+
+ def set_marker(self, node):
+ xpath = ".//marker[@id='inkstitch-pattern-marker']"
+ pattern_marker = self.document.xpath(xpath)
+
+ if not pattern_marker:
+ # get or create def element
+ defs = self.document.find(SVG_DEFS_TAG)
+ if defs is None:
+ defs = etree.SubElement(self.document, SVG_DEFS_TAG)
+
+ # insert marker
+ marker = """<marker
+ refX="10"
+ refY="5"
+ orient="auto"
+ id="inkstitch-pattern-marker">
+ <g
+ id="inkstitch-pattern-group">
+ <path
+ style="fill:#fafafa;stroke:#ff5500;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1;fill-opacity:0.8;"
+ d="M 10.12911,5.2916678 A 4.8374424,4.8374426 0 0 1 5.2916656,10.12911 4.8374424,4.8374426 0 0 1 0.45422399,5.2916678 4.8374424,4.8374426 0 0 1 5.2916656,0.45422399 4.8374424,4.8374426 0 0 1 10.12911,5.2916678 Z"
+ id="inkstitch-pattern-marker-circle" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.4;stroke-linecap:round;stroke-miterlimit:4;"
+ id="inkstitch-pattern-marker-spiral"
+ d="M 4.9673651,5.7245662 C 4.7549848,5.7646159 4.6247356,5.522384 4.6430021,5.3419847 4.6765851,5.0103151 5.036231,4.835347 5.3381858,4.8987426 5.7863901,4.9928495 6.0126802,5.4853625 5.9002872,5.9065088 5.7495249,6.4714237 5.1195537,6.7504036 4.5799191,6.5874894 3.898118,6.3816539 3.5659013,5.6122905 3.7800789,4.9545192 4.0402258,4.1556558 4.9498996,3.7699484 5.7256318,4.035839 6.6416744,4.3498087 7.0810483,5.4003986 6.7631909,6.2939744 6.395633,7.3272552 5.2038143,7.8204128 4.1924535,7.4503931 3.0418762,7.0294421 2.4948761,5.6961604 2.9171752,4.567073 3.3914021,3.2991406 4.8663228,2.6982592 6.1130974,3.1729158 7.4983851,3.7003207 8.1531869,5.3169977 7.6260947,6.6814205 7.0456093,8.1841025 5.2870784,8.8928844 3.8050073,8.3132966 2.1849115,7.6797506 1.4221671,5.7793073 2.0542715,4.1796074 2.7408201,2.4420977 4.7832541,1.6253548 6.5005435,2.310012 8.3554869,3.0495434 9.2262638,5.2339874 8.4890181,7.0688861 8.4256397,7.2266036 8.3515789,7.379984 8.2675333,7.5277183" />
+ </g>
+ </marker>""" # noqa: E501
+ defs.append(etree.fromstring(marker))
+
+ # attach marker to node
+ style = node.get('style', '').split(";")
+ style = [i for i in style if not i.startswith('marker-start')]
+ style.append('marker-start:url(#inkstitch-pattern-marker)')
+ node.set('style', ";".join(style))
diff --git a/lib/extensions/base.py b/lib/extensions/base.py
index 353e433c..1c10cd4a 100644
--- a/lib/extensions/base.py
+++ b/lib/extensions/base.py
@@ -12,14 +12,14 @@ import inkex
from lxml import etree
from stringcase import snakecase
-from ..commands import group_commands, is_command, layer_commands
+from ..commands import is_command, layer_commands
from ..elements import EmbroideryElement, nodes_to_elements
from ..elements.clone import is_clone
+from ..elements.pattern import is_pattern
from ..i18n import _
from ..svg import generate_unique_id
from ..svg.tags import (CONNECTOR_TYPE, EMBROIDERABLE_TAGS, INKSCAPE_GROUPMODE,
- INKSTITCH_ATTRIBS, NOT_EMBROIDERABLE_TAGS,
- SVG_DEFS_TAG, SVG_GROUP_TAG)
+ NOT_EMBROIDERABLE_TAGS, SVG_DEFS_TAG, SVG_GROUP_TAG)
SVG_METADATA_TAG = inkex.addNS("metadata", "svg")
@@ -171,12 +171,10 @@ class InkstitchExtension(inkex.Effect):
if selected:
if node.tag == SVG_GROUP_TAG:
pass
- elif ((node.tag in EMBROIDERABLE_TAGS or is_clone(node)) and not
- (len(list(group_commands(node, 'pattern_group'))) and not node.get(INKSTITCH_ATTRIBS['satin_column']))):
+ elif (node.tag in EMBROIDERABLE_TAGS or is_clone(node)) and not is_pattern(node):
nodes.append(node)
# add images, text and patterns for the troubleshoot extension
- elif (troubleshoot and (node.tag in NOT_EMBROIDERABLE_TAGS or
- (len(list(group_commands(node, 'pattern_group'))) and not node.get(INKSTITCH_ATTRIBS['satin_column'])))):
+ elif troubleshoot and (node.tag in NOT_EMBROIDERABLE_TAGS or is_pattern(node)):
nodes.append(node)
return nodes
diff --git a/lib/extensions/group_commands.py b/lib/extensions/group_commands.py
deleted file mode 100644
index af1f9fb1..00000000
--- a/lib/extensions/group_commands.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# Authors: see git history
-#
-# Copyright (c) 2010 Authors
-# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details.
-
-import inkex
-from lxml import etree
-
-from ..commands import GROUP_COMMANDS, ensure_symbol, get_command_description
-from ..i18n import _
-from ..svg import get_correction_transform
-from ..svg.tags import INKSCAPE_LABEL, SVG_USE_TAG, XLINK_HREF
-from .commands import CommandsExtension
-
-
-class GroupCommands(CommandsExtension):
- COMMANDS = GROUP_COMMANDS
-
- def effect(self):
- commands = [command for command in self.COMMANDS if getattr(self.options, command)]
-
- if not commands:
- inkex.errormsg(_("Please choose one or more commands to add."))
- return
-
- correction_transform = get_correction_transform(self.svg.get_current_layer(), child=True)
-
- for i, command in enumerate(commands):
- ensure_symbol(self.document, command)
-
- etree.SubElement(self.svg.get_current_layer(), SVG_USE_TAG,
- {
- "id": self.uniqueId("use"),
- INKSCAPE_LABEL: _("Ink/Stitch Command") + ": %s" % get_command_description(command),
- XLINK_HREF: "#inkstitch_%s" % command,
- "height": "100%",
- "width": "100%",
- "x": str(i * 20),
- "y": "-10",
- "transform": correction_transform
- })