use tags to decide which stitches to keep

pull/1254/head
Lex Neva 2021-08-07 18:38:57 -04:00
rodzic 3b7994c01a
commit b411305c67
2 zmienionych plików z 11 dodań i 16 usunięć

Wyświetl plik

@ -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 inkex
from shapely import geometry as shgeo
import math
import inkex
from shapely import geometry as shgeo
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

Wyświetl plik

@ -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):