summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitmodules3
-rw-r--r--lib/elements/auto_fill.py49
-rw-r--r--lib/elements/fill.py40
-rw-r--r--lib/elements/satin_column.py38
-rw-r--r--lib/elements/stroke.py30
-rw-r--r--lib/extensions/convert_to_satin.py1
-rw-r--r--messages.po201
m---------pyembroidery0
-rw-r--r--requirements.txt2
9 files changed, 281 insertions, 83 deletions
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..5edeeae7
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "pyembroidery"]
+ path = pyembroidery
+ url = https://github.com/inkstitch/pyembroidery
diff --git a/lib/elements/auto_fill.py b/lib/elements/auto_fill.py
index 59816878..79220a86 100644
--- a/lib/elements/auto_fill.py
+++ b/lib/elements/auto_fill.py
@@ -30,7 +30,12 @@ class AutoFill(Fill):
return False
@property
- @param('running_stitch_length_mm', _('Running stitch length (traversal between sections)'), unit='mm', type='float', default=1.5)
+ @param('running_stitch_length_mm',
+ _('Running stitch length (traversal between sections)'),
+ tooltip=_('Length of stitches around the outline of the fill region used when moving from section to section.'),
+ unit='mm',
+ type='float',
+ default=1.5)
def running_stitch_length(self):
return max(self.get_float_param("running_stitch_length_mm", 1.5), 0.01)
@@ -40,7 +45,12 @@ class AutoFill(Fill):
return self.get_boolean_param("fill_underlay", default=False)
@property
- @param('fill_underlay_angle', _('Fill angle (default: fill angle + 90 deg)'), unit='deg', group=_('AutoFill Underlay'), type='float')
+ @param('fill_underlay_angle',
+ _('Fill angle'),
+ tooltip=_('default: fill angle + 90 deg'),
+ unit='deg',
+ group=_('AutoFill Underlay'),
+ type='float')
@cache
def fill_underlay_angle(self):
underlay_angle = self.get_float_param("fill_underlay_angle")
@@ -51,35 +61,44 @@ class AutoFill(Fill):
return self.angle + math.pi / 2.0
@property
- @param('fill_underlay_row_spacing_mm', _('Row spacing (default: 3x fill row spacing)'), unit='mm', group=_('AutoFill Underlay'), type='float')
+ @param('fill_underlay_row_spacing_mm',
+ _('Row spacing'),
+ tooltip=_('default: 3x fill row spacing'),
+ unit='mm',
+ group=_('AutoFill Underlay'),
+ type='float')
@cache
def fill_underlay_row_spacing(self):
return self.get_float_param("fill_underlay_row_spacing_mm") or self.row_spacing * 3
@property
- @param('fill_underlay_max_stitch_length_mm', _('Max stitch length'), unit='mm', group=_('AutoFill Underlay'), type='float')
+ @param('fill_underlay_max_stitch_length_mm',
+ _('Max stitch length'),
+ tooltip=_('default: equal to fill max stitch length'),
+ unit='mm',
+ group=_('AutoFill Underlay'), type='float')
@cache
def fill_underlay_max_stitch_length(self):
return self.get_float_param("fill_underlay_max_stitch_length_mm") or self.max_stitch_length
@property
@param('fill_underlay_inset_mm',
- _('Inset'),
- tooltip='Shrink the shape before doing underlay, to prevent underlay from showing around the outside of the fill.',
- unit='mm',
- group=_('AutoFill Underlay'),
- type='float',
- default=0)
+ _('Inset'),
+ tooltip=_('Shrink the shape before doing underlay, to prevent underlay from showing around the outside of the fill.'),
+ unit='mm',
+ group=_('AutoFill Underlay'),
+ type='float',
+ default=0)
def fill_underlay_inset(self):
return self.get_float_param('fill_underlay_inset_mm', 0)
@property
@param('expand_mm',
- _('Expand'),
- tooltip='Expand the shape before fill stitching, to compensate for gaps between shapes.',
- unit='mm',
- type='float',
- default=0)
+ _('Expand'),
+ tooltip=_('Expand the shape before fill stitching, to compensate for gaps between shapes.'),
+ unit='mm',
+ type='float',
+ default=0)
def expand(self):
return self.get_float_param('expand_mm', 0)
diff --git a/lib/elements/fill.py b/lib/elements/fill.py
index 8d1d35f2..8018b2b4 100644
--- a/lib/elements/fill.py
+++ b/lib/elements/fill.py
@@ -15,12 +15,22 @@ class Fill(EmbroideryElement):
super(Fill, self).__init__(*args, **kwargs)
@property
- @param('auto_fill', _('Manually routed fill stitching'), type='toggle', inverse=True, default=True)
+ @param('auto_fill',
+ _('Manually routed fill stitching'),
+ tooltip=_('AutoFill is the default method for generating fill stitching.'),
+ type='toggle',
+ inverse=True,
+ default=True)
def auto_fill(self):
return self.get_boolean_param('auto_fill', True)
@property
- @param('angle', _('Angle of lines of stitches'), unit='deg', type='float', default=0)
+ @param('angle',
+ _('Angle of lines of stitches'),
+ tooltip=_('The angle increases in a counter-clockwise direction. 0 is horizontal. Negative angles are allowed.'),
+ unit='deg',
+ type='float',
+ default=0)
@cache
def angle(self):
return math.radians(self.get_float_param('angle', 0))
@@ -31,12 +41,21 @@ class Fill(EmbroideryElement):
return self.get_style("fill", "#000000")
@property
- @param('flip', _('Flip fill (start right-to-left)'), type='boolean', default=False)
+ @param('flip',
+ _('Flip fill (start right-to-left)'),
+ tooltip=_('The flip option can help you with routing your stitch path. When you enable flip, stitching goes from right-to-left instead of left-to-right.'),
+ type='boolean',
+ default=False)
def flip(self):
return self.get_boolean_param("flip", False)
@property
- @param('row_spacing_mm', _('Spacing between rows'), unit='mm', type='float', default=0.25)
+ @param('row_spacing_mm',
+ _('Spacing between rows'),
+ tooltip=_('Distance between rows of stitches.'),
+ unit='mm',
+ type='float',
+ default=0.25)
def row_spacing(self):
return max(self.get_float_param("row_spacing_mm", 0.25), 0.1 * PIXELS_PER_MM)
@@ -45,12 +64,21 @@ class Fill(EmbroideryElement):
return self.get_float_param("end_row_spacing_mm")
@property
- @param('max_stitch_length_mm', _('Maximum fill stitch length'), unit='mm', type='float', default=3.0)
+ @param('max_stitch_length_mm',
+ _('Maximum fill stitch length'),
+ tooltip=_('The length of each stitch in a row. Shorter stitch may be used at the start or end of a row.'),
+ unit='mm',
+ type='float',
+ default=3.0)
def max_stitch_length(self):
return max(self.get_float_param("max_stitch_length_mm", 3.0), 0.1 * PIXELS_PER_MM)
@property
- @param('staggers', _('Stagger rows this many times before repeating'), type='int', default=4)
+ @param('staggers',
+ _('Stagger rows this many times before repeating'),
+ tooltip=_('Setting this dictates how many rows apart the stitches will be before they fall in the same column position.'),
+ type='int',
+ default=4)
def staggers(self):
return self.get_int_param("staggers", 4)
diff --git a/lib/elements/satin_column.py b/lib/elements/satin_column.py
index 78275745..834509fd 100644
--- a/lib/elements/satin_column.py
+++ b/lib/elements/satin_column.py
@@ -28,13 +28,23 @@ class SatinColumn(EmbroideryElement):
return self.get_style("stroke")
@property
- @param('zigzag_spacing_mm', _('Zig-zag spacing (peak-to-peak)'), unit='mm', type='float', default=0.4)
+ @param('zigzag_spacing_mm',
+ _('Zig-zag spacing (peak-to-peak)'),
+ tooltip=_('Peak-to-peak distance between zig-zags.'),
+ unit='mm',
+ type='float',
+ default=0.4)
def zigzag_spacing(self):
# peak-to-peak distance between zigzags
return max(self.get_float_param("zigzag_spacing_mm", 0.4), 0.01)
@property
- @param('pull_compensation_mm', _('Pull compensation'), unit='mm', type='float', default=0)
+ @param('pull_compensation_mm',
+ _('Pull compensation'),
+ tooltip=_('Satin stitches pull the fabric together, resulting in a column narrower than you draw in Inkscape. This setting expands each pair of needle penetrations outward from the center of the satin column.'),
+ unit='mm',
+ type='float',
+ default=0)
def pull_compensation(self):
# In satin stitch, the stitches have a tendency to pull together and
# narrow the entire column. We can compensate for this by stitching
@@ -54,7 +64,13 @@ class SatinColumn(EmbroideryElement):
return max(self.get_float_param("contour_underlay_stitch_length_mm", 1.5), 0.01)
@property
- @param('contour_underlay_inset_mm', _('Contour underlay inset amount'), unit='mm', group=_('Contour Underlay'), type='float', default=0.4)
+ @param('contour_underlay_inset_mm',
+ _('Contour underlay inset amount'),
+ tooltip=_('Shrink the outline, to prevent the underlay from showing around the outside of the satin column.'),
+ unit='mm',
+ group=_('Contour Underlay'),
+ type='float',
+ default=0.4)
def contour_underlay_inset(self):
# how far inside the edge of the column to stitch the underlay
return self.get_float_param("contour_underlay_inset_mm", 0.4)
@@ -77,12 +93,24 @@ class SatinColumn(EmbroideryElement):
return self.get_boolean_param("zigzag_underlay")
@property
- @param('zigzag_underlay_spacing_mm', _('Zig-Zag spacing (peak-to-peak)'), unit='mm', group=_('Zig-zag Underlay'), type='float', default=3)
+ @param('zigzag_underlay_spacing_mm',
+ _('Zig-Zag spacing (peak-to-peak)'),
+ tooltip=_('Distance between peaks of the zig-zags.'),
+ unit='mm',
+ group=_('Zig-zag Underlay'),
+ type='float',
+ default=3)
def zigzag_underlay_spacing(self):
return max(self.get_float_param("zigzag_underlay_spacing_mm", 3), 0.01)
@property
- @param('zigzag_underlay_inset_mm', _('Inset amount (default: half of contour underlay inset)'), unit='mm', group=_('Zig-zag Underlay'), type='float', default="")
+ @param('zigzag_underlay_inset_mm',
+ _('Inset amount'),
+ tooltip=_('default: half of contour underlay inset'),
+ unit='mm',
+ group=_('Zig-zag Underlay'),
+ type='float',
+ default="")
def zigzag_underlay_inset(self):
# how far in from the edge of the satin the points in the zigzags
# should be
diff --git a/lib/elements/stroke.py b/lib/elements/stroke.py
index bc2ee54c..e84d5e79 100644
--- a/lib/elements/stroke.py
+++ b/lib/elements/stroke.py
@@ -27,7 +27,13 @@ class Stroke(EmbroideryElement):
return self.get_style("stroke-dasharray") is not None
@property
- @param('running_stitch_length_mm', _('Running stitch length'), unit='mm', type='float', default=1.5, sort_index=3)
+ @param('running_stitch_length_mm',
+ _('Running stitch length'),
+ tooltip=_('Length of stitches in running stitch mode.'),
+ unit='mm',
+ type='float',
+ default=1.5,
+ sort_index=3)
def running_stitch_length(self):
return max(self.get_float_param("running_stitch_length_mm", 1.5), 0.01)
@@ -42,13 +48,24 @@ class Stroke(EmbroideryElement):
return self.get_int_param("bean_stitch_repeats", 0)
@property
- @param('zigzag_spacing_mm', _('Zig-zag spacing (peak-to-peak)'), unit='mm', type='float', default=0.4, sort_index=3)
+ @param('zigzag_spacing_mm',
+ _('Zig-zag spacing (peak-to-peak)'),
+ tooltip=_('Length of stitches in zig-zag mode.'),
+ unit='mm',
+ type='float',
+ default=0.4,
+ sort_index=3)
@cache
def zigzag_spacing(self):
return max(self.get_float_param("zigzag_spacing_mm", 0.4), 0.01)
@property
- @param('repeats', _('Repeats'), type='int', default="1", sort_index=1)
+ @param('repeats',
+ _('Repeats'),
+ tooltip=_('Defines how many times to run down and back along the path.'),
+ type='int',
+ default="1",
+ sort_index=1)
def repeats(self):
return self.get_int_param("repeats", 1)
@@ -68,7 +85,12 @@ class Stroke(EmbroideryElement):
return shapely.geometry.MultiLineString(line_strings)
@property
- @param('manual_stitch', _('Manual stitch placement'), tooltip=_("Stitch every node in the path. Stitch length and zig-zag spacing are ignored."), type='boolean', default=False, sort_index=0)
+ @param('manual_stitch',
+ _('Manual stitch placement'),
+ tooltip=_("Stitch every node in the path. Stitch length and zig-zag spacing are ignored."),
+ type='boolean',
+ default=False,
+ sort_index=0)
def manual_stitch_mode(self):
return self.get_boolean_param('manual_stitch')
diff --git a/lib/extensions/convert_to_satin.py b/lib/extensions/convert_to_satin.py
index 1eae69b1..dd5a9bc2 100644
--- a/lib/extensions/convert_to_satin.py
+++ b/lib/extensions/convert_to_satin.py
@@ -3,7 +3,6 @@ from shapely import geometry as shgeo
from itertools import chain, groupby
import numpy
from numpy import diff, sign, setdiff1d
-from scipy.signal import argrelmin
import math
from copy import deepcopy
diff --git a/messages.po b/messages.po
index 70900191..de74f1a0 100644
--- a/messages.po
+++ b/messages.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2018-08-05 20:33-0400\n"
+"POT-Creation-Date: 2018-08-11 22:57-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -25,40 +25,70 @@ msgstr ""
msgid "Automatically routed fill stitching"
msgstr ""
-#: lib/elements/auto_fill.py:33
+#: lib/elements/auto_fill.py:34
msgid "Running stitch length (traversal between sections)"
msgstr ""
-#: lib/elements/auto_fill.py:38
+#: lib/elements/auto_fill.py:35
+msgid ""
+"Length of stitches around the outline of the fill region used when moving"
+" from section to section."
+msgstr ""
+
+#: lib/elements/auto_fill.py:43
msgid "Underlay"
msgstr ""
-#: lib/elements/auto_fill.py:38 lib/elements/auto_fill.py:43
-#: lib/elements/auto_fill.py:54 lib/elements/auto_fill.py:60
-#: lib/elements/auto_fill.py:70
+#: lib/elements/auto_fill.py:43 lib/elements/auto_fill.py:52
+#: lib/elements/auto_fill.py:68 lib/elements/auto_fill.py:79
+#: lib/elements/auto_fill.py:89
msgid "AutoFill Underlay"
msgstr ""
-#: lib/elements/auto_fill.py:43
-msgid "Fill angle (default: fill angle + 90 deg)"
+#: lib/elements/auto_fill.py:49
+msgid "Fill angle"
+msgstr ""
+
+#: lib/elements/auto_fill.py:50
+msgid "default: fill angle + 90 deg"
msgstr ""
-#: lib/elements/auto_fill.py:54
-msgid "Row spacing (default: 3x fill row spacing)"
+#: lib/elements/auto_fill.py:65
+msgid "Row spacing"
msgstr ""
-#: lib/elements/auto_fill.py:60
+#: lib/elements/auto_fill.py:66
+msgid "default: 3x fill row spacing"
+msgstr ""
+
+#: lib/elements/auto_fill.py:76
msgid "Max stitch length"
msgstr ""
-#: lib/elements/auto_fill.py:67
+#: lib/elements/auto_fill.py:77
+msgid "default: equal to fill max stitch length"
+msgstr ""
+
+#: lib/elements/auto_fill.py:86
msgid "Inset"
msgstr ""
-#: lib/elements/auto_fill.py:78
+#: lib/elements/auto_fill.py:87
+msgid ""
+"Shrink the shape before doing underlay, to prevent underlay from showing "
+"around the outside of the fill."
+msgstr ""
+
+#: lib/elements/auto_fill.py:97
msgid "Expand"
msgstr ""
+#: lib/elements/auto_fill.py:98
+msgid ""
+"Expand the shape before fill stitching, to compensate for gaps between "
+"shapes."
+msgstr ""
+
#: lib/elements/element.py:232
#, python-format
msgid "%(id)s has more than one command of type '%(command)s' linked to it"
@@ -68,30 +98,62 @@ msgstr ""
msgid "Fill"
msgstr ""
-#: lib/elements/fill.py:18
+#: lib/elements/fill.py:19
msgid "Manually routed fill stitching"
msgstr ""
-#: lib/elements/fill.py:23
+#: lib/elements/fill.py:20
+msgid "AutoFill is the default method for generating fill stitching."
+msgstr ""
+
+#: lib/elements/fill.py:29
msgid "Angle of lines of stitches"
msgstr ""
-#: lib/elements/fill.py:34
+#: lib/elements/fill.py:30
+msgid ""
+"The angle increases in a counter-clockwise direction. 0 is horizontal. "
+"Negative angles are allowed."
+msgstr ""
+
+#: lib/elements/fill.py:45
msgid "Flip fill (start right-to-left)"
msgstr ""
-#: lib/elements/fill.py:39
+#: lib/elements/fill.py:46
+msgid ""
+"The flip option can help you with routing your stitch path. When you "
+"enable flip, stitching goes from right-to-left instead of left-to-right."
+msgstr ""
+
+#: lib/elements/fill.py:54
msgid "Spacing between rows"
msgstr ""
-#: lib/elements/fill.py:48
+#: lib/elements/fill.py:55
+msgid "Distance between rows of stitches."
+msgstr ""
+
+#: lib/elements/fill.py:68
msgid "Maximum fill stitch length"
msgstr ""
-#: lib/elements/fill.py:53
+#: lib/elements/fill.py:69
+msgid ""
+"The length of each stitch in a row. Shorter stitch may be used at the "
+"start or end of a row."
+msgstr ""
+
+#: lib/elements/fill.py:78
msgid "Stagger rows this many times before repeating"
msgstr ""
+#: lib/elements/fill.py:79
+msgid ""
+"Setting this dictates how many rows apart the stitches will be before "
+"they fall in the same column position."
+msgstr ""
+
#: lib/elements/satin_column.py:10
msgid "Satin Column"
msgstr ""
@@ -104,87 +166,112 @@ msgstr ""
msgid "\"E\" stitch"
msgstr ""
-#: lib/elements/satin_column.py:31 lib/elements/stroke.py:45
+#: lib/elements/satin_column.py:32 lib/elements/stroke.py:52
msgid "Zig-zag spacing (peak-to-peak)"
msgstr ""
-#: lib/elements/satin_column.py:37
+#: lib/elements/satin_column.py:33
+msgid "Peak-to-peak distance between zig-zags."
+msgstr ""
+
+#: lib/elements/satin_column.py:43
msgid "Pull compensation"
msgstr ""
-#: lib/elements/satin_column.py:45
+#: lib/elements/satin_column.py:44
+msgid ""
+"Satin stitches pull the fabric together, resulting in a column narrower "
+"than you draw in Inkscape. This setting expands each pair of needle "
+"penetrations outward from the center of the satin column."
+msgstr ""
+
+#: lib/elements/satin_column.py:55
msgid "Contour underlay"
msgstr ""
-#: lib/elements/satin_column.py:45 lib/elements/satin_column.py:52
-#: lib/elements/satin_column.py:57
+#: lib/elements/satin_column.py:55 lib/elements/satin_column.py:62
+#: lib/elements/satin_column.py:71
msgid "Contour Underlay"
msgstr ""
-#: lib/elements/satin_column.py:52 lib/elements/satin_column.py:70
+#: lib/elements/satin_column.py:62 lib/elements/satin_column.py:86
msgid "Stitch length"
msgstr ""
-#: lib/elements/satin_column.py:57
+#: lib/elements/satin_column.py:68
msgid "Contour underlay inset amount"
msgstr ""
-#: lib/elements/satin_column.py:63
+#: lib/elements/satin_column.py:69
+msgid ""
+"Shrink the outline, to prevent the underlay from showing around the "
+"outside of the satin column."
+msgstr ""
+
+#: lib/elements/satin_column.py:79
msgid "Center-walk underlay"
msgstr ""
-#: lib/elements/satin_column.py:63 lib/elements/satin_column.py:70
+#: lib/elements/satin_column.py:79 lib/elements/satin_column.py:86
msgid "Center-Walk Underlay"
msgstr ""
-#: lib/elements/satin_column.py:75
+#: lib/elements/satin_column.py:91
msgid "Zig-zag underlay"
msgstr ""
-#: lib/elements/satin_column.py:75 lib/elements/satin_column.py:80
-#: lib/elements/satin_column.py:85
+#: lib/elements/satin_column.py:91 lib/elements/satin_column.py:100
+#: lib/elements/satin_column.py:111
msgid "Zig-zag Underlay"
msgstr ""
-#: lib/elements/satin_column.py:80
+#: lib/elements/satin_column.py:97
msgid "Zig-Zag spacing (peak-to-peak)"
msgstr ""
-#: lib/elements/satin_column.py:85
-msgid "Inset amount (default: half of contour underlay inset)"
+#: lib/elements/satin_column.py:98
+msgid "Distance between peaks of the zig-zags."
+msgstr ""
+
+#: lib/elements/satin_column.py:108
+msgid "Inset amount"
+msgstr ""
+
+#: lib/elements/satin_column.py:109
+msgid "default: half of contour underlay inset"
msgstr ""
-#: lib/elements/satin_column.py:118
+#: lib/elements/satin_column.py:146
#, python-format
msgid "satin column: %(id)s: at least two subpaths required (%(num)d found)"
msgstr ""
-#: lib/elements/satin_column.py:144
+#: lib/elements/satin_column.py:172
msgid ""
"One or more rails crosses itself, and this is not allowed. Please split "
"into multiple satin columns."
msgstr ""
-#: lib/elements/satin_column.py:151
+#: lib/elements/satin_column.py:179
msgid "satin column: One or more of the rungs doesn't intersect both rails."
msgstr ""
-#: lib/elements/satin_column.py:151 lib/elements/satin_column.py:153
+#: lib/elements/satin_column.py:179 lib/elements/satin_column.py:181
msgid "Each rail should intersect both rungs once."
msgstr ""
-#: lib/elements/satin_column.py:153
+#: lib/elements/satin_column.py:181
msgid ""
"satin column: One or more of the rungs intersects the rails more than "
"once."
msgstr ""
-#: lib/elements/satin_column.py:194
+#: lib/elements/satin_column.py:222
#, python-format
msgid "satin column: object %s has a fill (but should not)"
msgstr ""
-#: lib/elements/satin_column.py:198
+#: lib/elements/satin_column.py:226
#, python-format
msgid ""
"satin column: object %(id)s has two paths with an unequal number of "
@@ -195,36 +282,48 @@ msgstr ""
msgid "Satin stitch along paths"
msgstr ""
-#: lib/elements/stroke.py:30
+#: lib/elements/stroke.py:31
msgid "Running stitch length"
msgstr ""
-#: lib/elements/stroke.py:36
+#: lib/elements/stroke.py:32
+msgid "Length of stitches in running stitch mode."
+msgstr ""
+
+#: lib/elements/stroke.py:42
msgid "Bean stitch number of repeats"
msgstr ""
-#: lib/elements/stroke.py:37
+#: lib/elements/stroke.py:43
msgid ""
"Backtrack each stitch this many times. A value of 1 would triple each "
"stitch (forward, back, forward). A value of 2 would quintuple each "
"stitch, etc. Only applies to running stitch."
msgstr ""
-#: lib/elements/stroke.py:51
+#: lib/elements/stroke.py:53
+msgid "Length of stitches in zig-zag mode."
+msgstr ""
+
+#: lib/elements/stroke.py:64
msgid "Repeats"
msgstr ""
-#: lib/elements/stroke.py:71
+#: lib/elements/stroke.py:65
+msgid "Defines how many times to run down and back along the path."
+msgstr ""
+
+#: lib/elements/stroke.py:89
msgid "Manual stitch placement"
msgstr ""
-#: lib/elements/stroke.py:71
+#: lib/elements/stroke.py:90
msgid ""
"Stitch every node in the path. Stitch length and zig-zag spacing are "
"ignored."
msgstr ""
-#: lib/elements/stroke.py:102
+#: lib/elements/stroke.py:124
msgid ""
"Legacy running stitch setting detected!\n"
"\n"
@@ -253,17 +352,17 @@ msgstr ""
msgid "Please choose one or more commands to attach."
msgstr ""
-#: lib/extensions/convert_to_satin.py:29
+#: lib/extensions/convert_to_satin.py:28
msgid "Please select at least one line to convert to a satin column."
msgstr ""
#. : Convert To Satin extension, user selected one or more objects that were
#. not lines.
-#: lib/extensions/convert_to_satin.py:34
+#: lib/extensions/convert_to_satin.py:33
msgid "Only simple lines may be converted to satin columns."
msgstr ""
-#: lib/extensions/convert_to_satin.py:55
+#: lib/extensions/convert_to_satin.py:54
#, python-format
msgid ""
"Cannot convert %s to a satin column because it intersects itself. Try "
diff --git a/pyembroidery b/pyembroidery
new file mode 160000
+Subproject fe7609dc59efb15f6a27d0ff7d82ac2ce7f6be5
diff --git a/requirements.txt b/requirements.txt
index 8d487a2c..8fbea7cd 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,4 @@
-pyembroidery >=1.2.12, <1.3.0
+./pyembroidery
backports.functools_lru_cache
wxPython
networkx