2018-05-02 01:21:07 +00:00
|
|
|
from copy import deepcopy
|
|
|
|
|
|
|
|
from .stitch import Stitch
|
2018-03-31 00:37:11 +00:00
|
|
|
from ..utils import cut_path
|
|
|
|
from ..stitches import running_stitch
|
2018-05-02 01:21:07 +00:00
|
|
|
|
2018-03-31 00:37:11 +00:00
|
|
|
|
|
|
|
def add_tie(stitches, tie_path):
|
2018-04-07 02:09:26 +00:00
|
|
|
if stitches[-1].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
|
|
|
|
|
2018-03-31 00:37:11 +00:00
|
|
|
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]
|
|
|
|
|
|
|
|
stitches.extend(deepcopy(tie_stitches[1:]))
|
|
|
|
stitches.extend(deepcopy(list(reversed(tie_stitches))[1:]))
|
|
|
|
|
|
|
|
|
|
|
|
def add_tie_off(stitches):
|
|
|
|
add_tie(stitches, list(reversed(stitches)))
|
|
|
|
|
|
|
|
|
|
|
|
def add_tie_in(stitches, upcoming_stitches):
|
|
|
|
add_tie(stitches, upcoming_stitches)
|
|
|
|
|
|
|
|
|
|
|
|
def add_ties(stitch_plan):
|
|
|
|
"""Add tie-off before and after trims, jumps, and color changes."""
|
|
|
|
|
|
|
|
for color_block in stitch_plan:
|
|
|
|
need_tie_in = True
|
|
|
|
new_stitches = []
|
|
|
|
for i, stitch in enumerate(color_block.stitches):
|
2018-05-29 02:15:07 +00:00
|
|
|
# Tie before and after TRIMs, JUMPs, and color changes, but ignore
|
|
|
|
# the fake color change introduced by a "STOP after" (see stop.py).
|
|
|
|
is_special = stitch.trim or stitch.jump or (stitch.color_change and not stitch.stop)
|
2018-03-31 00:37:11 +00:00
|
|
|
|
|
|
|
if is_special and not need_tie_in:
|
|
|
|
add_tie_off(new_stitches)
|
|
|
|
new_stitches.append(stitch)
|
|
|
|
need_tie_in = True
|
|
|
|
elif need_tie_in and not is_special:
|
|
|
|
new_stitches.append(stitch)
|
|
|
|
add_tie_in(new_stitches, upcoming_stitches=color_block.stitches[i:])
|
|
|
|
need_tie_in = False
|
|
|
|
else:
|
|
|
|
new_stitches.append(stitch)
|
|
|
|
|
|
|
|
if not need_tie_in:
|
|
|
|
add_tie_off(new_stitches)
|
|
|
|
|
|
|
|
color_block.replace_stitches(new_stitches)
|