diff options
| author | Kaalleen <36401965+kaalleen@users.noreply.github.com> | 2025-03-25 06:14:23 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-25 07:14:23 +0100 |
| commit | 23dcbd58bc8f26a71b0483ed907c0052ca348899 (patch) | |
| tree | b64dd0db745d8ded761bcd483faf134c8d7793b1 /lib/extensions/satin_to_stroke.py | |
| parent | 333717c2e378aeb862609a7d4143083ca7824925 (diff) | |
rename convert to extensions (#3605)
Diffstat (limited to 'lib/extensions/satin_to_stroke.py')
| -rw-r--r-- | lib/extensions/satin_to_stroke.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/extensions/satin_to_stroke.py b/lib/extensions/satin_to_stroke.py new file mode 100644 index 00000000..e35b7c85 --- /dev/null +++ b/lib/extensions/satin_to_stroke.py @@ -0,0 +1,56 @@ +# 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 ..elements import SatinColumn +from ..i18n import _ +from ..svg import get_correction_transform +from .base import InkstitchExtension + + +class SatinToStroke(InkstitchExtension): + """Convert a satin column into a running stitch.""" + + def __init__(self, *args, **kwargs): + InkstitchExtension.__init__(self, *args, **kwargs) + self.arg_parser.add_argument("--notebook") + self.arg_parser.add_argument("-k", "--keep_satin", type=inkex.Boolean, default=False, dest="keep_satin") + + def effect(self): + if not self.svg.selection or not self.get_elements(): + inkex.errormsg(_("Please select at least one satin column to convert to a running stitch.")) + return + + if not any(isinstance(item, SatinColumn) for item in self.elements): + # L10N: Convert To Satin extension, user selected one or more objects that were not lines. + inkex.errormsg(_("Please select at least one satin column to convert to a running stitch.")) + return + + for element in self.elements: + if not isinstance(element, SatinColumn): + continue + + parent = element.node.getparent() + center_line = element.center_line.simplify(0.05) + + d = "M" + for x, y in center_line.coords: + d += "%s,%s " % (x, y) + d += " " + + stroke_element = inkex.PathElement( + id=self.uniqueId("path"), + style=self.path_style(element), + transform=get_correction_transform(element.node), + d=d + ) + parent.insert(parent.index(element.node), stroke_element) + if not self.options.keep_satin: + element.node.delete() + + def path_style(self, element): + color = element.get_style('stroke', '#000000') + return "stroke:%s;stroke-width:1px;stroke-dasharray:3, 1;fill:none" % (color) |
