kopia lustrzana https://github.com/inkstitch/inkstitch
use faster algorithm for ties
rodzic
bdf98a7e91
commit
9b619de228
|
@ -2,7 +2,7 @@ from ..utils.geometry import Point
|
|||
|
||||
|
||||
class Stitch(Point):
|
||||
def __init__(self, x, y, color=None, jump=False, stop=False, trim=False, color_change=False, fake_color_change=False, no_ties=False):
|
||||
def __init__(self, x, y=None, color=None, jump=False, stop=False, trim=False, color_change=False, fake_color_change=False, no_ties=False):
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.color = color
|
||||
|
@ -13,6 +13,12 @@ class Stitch(Point):
|
|||
self.fake_color_change = fake_color_change
|
||||
self.no_ties = no_ties
|
||||
|
||||
# Allow creating a Stitch from a Point
|
||||
if isinstance(x, Point):
|
||||
point = x
|
||||
self.x = point.x
|
||||
self.y = point.y
|
||||
|
||||
def __repr__(self):
|
||||
return "Stitch(%s, %s, %s, %s, %s, %s, %s, %s%s)" % (self.x,
|
||||
self.y,
|
||||
|
|
|
@ -1,26 +1,37 @@
|
|||
from copy import deepcopy
|
||||
|
||||
from .stitch import Stitch
|
||||
from ..utils import cut_path
|
||||
from ..stitches import running_stitch
|
||||
from ..svg import PIXELS_PER_MM
|
||||
|
||||
|
||||
def add_tie(stitches, tie_path):
|
||||
if stitches[-1].no_ties:
|
||||
if len(tie_path) < 2 or stitches[0].no_ties:
|
||||
# It's from a manual stitch block, so don't add tie stitches. The user
|
||||
# will add them if they want them.
|
||||
return
|
||||
|
||||
tie_path = cut_path(tie_path, 0.6)
|
||||
tie_stitches = running_stitch(tie_path, 0.3)
|
||||
tie_stitches = [Stitch(stitch.x, stitch.y) for stitch in tie_stitches]
|
||||
to_previous = tie_path[1] - tie_path[0]
|
||||
length = to_previous.length()
|
||||
if length > 0.5 * PIXELS_PER_MM:
|
||||
# Travel back one stitch, stopping halfway there.
|
||||
# Then go forward one stitch, stopping halfway between
|
||||
# again.
|
||||
|
||||
stitches.extend(deepcopy(tie_stitches[1:]))
|
||||
stitches.extend(deepcopy(list(reversed(tie_stitches))[1:]))
|
||||
# but travel at most 1.5mm
|
||||
length = min(length, 1.5 * PIXELS_PER_MM)
|
||||
|
||||
direction = to_previous.unit()
|
||||
for delta in (0.5, 1.0, 0.5, 0):
|
||||
stitches.append(Stitch(tie_path[0] + delta * length * direction))
|
||||
else:
|
||||
# Too short to travel part of the way to the previous stitch; ust go
|
||||
# back and forth to it a couple times.
|
||||
for i in (1, 0, 1, 0):
|
||||
stitches.append(deepcopy(tie_path[i]))
|
||||
|
||||
|
||||
def add_tie_off(stitches):
|
||||
add_tie(stitches, list(reversed(stitches)))
|
||||
add_tie(stitches, stitches[-1:-3:-1])
|
||||
|
||||
|
||||
def add_tie_in(stitches, upcoming_stitches):
|
||||
|
|
Ładowanie…
Reference in New Issue