summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLex Neva <github.com@lexneva.name>2021-08-07 18:38:57 -0400
committerLex Neva <github.com@lexneva.name>2021-08-07 18:38:57 -0400
commitb411305c6742ff07dbddbdec07f1338f5beaf31b (patch)
treeedbb26e393369694294a4984e3e3038cb3b28b1a
parent3b7994c01add202c8f3475956f093a143890160f (diff)
use tags to decide which stitches to keep
-rw-r--r--lib/patterns.py16
-rw-r--r--lib/stitches/fill.py9
2 files changed, 10 insertions, 15 deletions
diff --git a/lib/patterns.py b/lib/patterns.py
index 5ae763fc..bb19f2b4 100644
--- a/lib/patterns.py
+++ b/lib/patterns.py
@@ -3,10 +3,12 @@
# Copyright (c) 2010 Authors
# Licensed under the GNU GPL version 3.0 or later. See the file LICENSE for details.
+import math
+
import inkex
from shapely import geometry as shgeo
-import math
+from .stitch_plan import Stitch
from .svg.tags import EMBROIDERABLE_TAGS
from .utils import Point
@@ -34,7 +36,7 @@ def _apply_stroke_patterns(patterns, patches):
continue
intersection_points = _get_pattern_points(stitch, patch.stitches[i+1], pattern)
for point in intersection_points:
- patch_points.append(point)
+ patch_points.append(Stitch(point, tags=('pattern_point',)))
patch.stitches = patch_points
@@ -43,16 +45,14 @@ def _apply_fill_patterns(patterns, patches):
for patch in patches:
patch_points = []
for i, stitch in enumerate(patch.stitches):
- # keep points outside the fill patter
if not shgeo.Point(stitch).within(pattern):
+ # keep points outside the fill patter
patch_points.append(stitch)
- # keep start and end points
elif i - 1 < 0 or i >= len(patch.stitches) - 1:
+ # keep start and end points
patch_points.append(stitch)
- # keep points if they have an angle
- # the necessary angle can be variable with certain stitch types (later on)
- # but they don't need to use filled patterns for those
- elif not 179 < get_angle(patch.stitches[i-1], stitch, patch.stitches[i+1]) < 181:
+ elif stitch.has_tag('fill_row_start') or stitch.has_tag('fill_row_end'):
+ # keep points if they are the start or end of a fill stitch row
patch_points.append(stitch)
patch.stitches = patch_points
diff --git a/lib/stitches/fill.py b/lib/stitches/fill.py
index 0ac15657..d134be32 100644
--- a/lib/stitches/fill.py
+++ b/lib/stitches/fill.py
@@ -67,15 +67,12 @@ def stitch_row(stitches, beg, end, angle, row_spacing, max_stitch_length, stagge
# abutting fill regions from pull_runs().
beg = Stitch(*beg, tags=('fill_row_start',))
- end = Stitch(*end, tags=('fill_row_end'))
+ end = Stitch(*end, tags=('fill_row_end',))
row_direction = (end - beg).unit()
segment_length = (end - beg).length()
- # only stitch the first point if it's a reasonable distance away from the
- # last stitch
- if not stitches or (beg - stitches[-1]).length() > 0.5 * PIXELS_PER_MM:
- stitches.append(beg)
+ stitches.append(beg)
first_stitch = adjust_stagger(beg, angle, row_spacing, max_stitch_length, staggers)
@@ -91,8 +88,6 @@ def stitch_row(stitches, beg, end, angle, row_spacing, max_stitch_length, stagge
if (end - stitches[-1]).length() > 0.1 * PIXELS_PER_MM and not skip_last:
stitches.append(end)
- else:
- stitches[-1].add_tag('fill_row_end')
def intersect_region_with_grating(shape, angle, row_spacing, end_row_spacing=None, flip=False):