kopia lustrzana https://github.com/inkstitch/inkstitch
don't do ties around the fake color change of a "STOP after"
rodzic
49b8c9f00b
commit
f0c8c6a27b
|
@ -44,7 +44,7 @@ class Input(object):
|
|||
if not stitch.flags & END:
|
||||
color_block.add_stitch(stitch.xx * PIXELS_PER_MM, stitch.yy * PIXELS_PER_MM,
|
||||
jump=stitch.flags & JUMP,
|
||||
stop=stitch.flags & STOP,
|
||||
color_change=stitch.flags & STOP,
|
||||
trim=stitch.flags & TRIM)
|
||||
|
||||
extents = stitch_plan.extents
|
||||
|
|
|
@ -32,7 +32,7 @@ def get_flags(stitch):
|
|||
if stitch.trim:
|
||||
flags |= libembroidery.TRIM
|
||||
|
||||
if stitch.stop:
|
||||
if stitch.color_change:
|
||||
flags |= libembroidery.STOP
|
||||
|
||||
return flags
|
||||
|
@ -108,13 +108,10 @@ def write_embroidery_file(file_path, stitch_plan, svg):
|
|||
add_thread(pattern, make_thread(color_block.color))
|
||||
|
||||
for stitch in color_block:
|
||||
if stitch.stop and stitch is not color_block.last_stitch:
|
||||
# A STOP stitch that is not at the end of a color block
|
||||
# occurs when the user specified "STOP after". "STOP" is the
|
||||
# same thing as a color change, and the user will assign a
|
||||
# special color at the machine that tells it to pause after.
|
||||
# We need to add another copy of the same color here so that
|
||||
# the stitches after the STOP are still the same color.
|
||||
if stitch.stop:
|
||||
# This is the start of the extra color block added by the
|
||||
# "STOP after" handler (see stitch_plan/stop.py). Assign it
|
||||
# the same color.
|
||||
add_thread(pattern, make_thread(color_block.color))
|
||||
|
||||
flags = get_flags(stitch)
|
||||
|
|
|
@ -2,17 +2,18 @@ from ..utils.geometry import Point
|
|||
|
||||
|
||||
class Stitch(Point):
|
||||
def __init__(self, x, y, color=None, jump=False, stop=False, trim=False, no_ties=False):
|
||||
def __init__(self, x, y, color=None, jump=False, stop=False, trim=False, color_change=False, no_ties=False):
|
||||
self.x = x
|
||||
self.y = y
|
||||
self.color = color
|
||||
self.jump = jump
|
||||
self.trim = trim
|
||||
self.stop = stop
|
||||
self.color_change = color_change
|
||||
self.no_ties = no_ties
|
||||
|
||||
def __repr__(self):
|
||||
return "Stitch(%s, %s, %s, %s, %s, %s, %s)" % (self.x, self.y, self.color, "JUMP" if self.jump else " ", "TRIM" if self.trim else " ", "STOP" if self.stop else " ", "NO TIES" if self.no_ties else " ")
|
||||
|
||||
def copy(self):
|
||||
return Stitch(self.x, self.y, self.color, self.jump, self.stop, self.trim, self.no_ties)
|
||||
return Stitch(self.x, self.y, self.color, self.jump, self.stop, self.trim, self.color_change, self.no_ties)
|
||||
|
|
|
@ -39,10 +39,10 @@ def patches_to_stitch_plan(patches, collapse_len=3.0 * PIXELS_PER_MM):
|
|||
color_block.add_stitch(patch.stitches[0].x, patch.stitches[0].y, jump=True)
|
||||
|
||||
else:
|
||||
# add a color change (only if the last stitch wasn't a "STOP after")
|
||||
if not color_block.last_stitch.stop:
|
||||
# add a color change (only if we didn't just do a "STOP after")
|
||||
if not color_block.last_stitch.color_change:
|
||||
stitch = color_block.last_stitch.copy()
|
||||
stitch.stop = True
|
||||
stitch.color_change = True
|
||||
color_block.add_stitch(stitch)
|
||||
|
||||
color_block = stitch_plan.new_color_block()
|
||||
|
|
|
@ -5,20 +5,29 @@ def process_stop(color_block):
|
|||
be useful for applique and similar on multi-needle machines that
|
||||
normally would not stop between colors.
|
||||
|
||||
On such machines, the user assigns needles to the colors in the
|
||||
design before starting stitching. C01, C02, etc are normal
|
||||
In machine embroidery files, there's no such thing as an actual
|
||||
"STOP" instruction. All that exists is a "color change" command
|
||||
(which libembroidery calls STOP just to be confusing).
|
||||
|
||||
On multi-needle machines, the user assigns needles to the colors in
|
||||
the design before starting stitching. C01, C02, etc are normal
|
||||
needles, but C00 is special. For a block of stitches assigned
|
||||
to C00, the machine will continue sewing with the last color it
|
||||
had and pause after it completes the C00 block.
|
||||
|
||||
That means we need to introduce an artificial color change
|
||||
shortly before the current stitch so that the user can set that
|
||||
to C00. We'll go back 3 stitches and do that:
|
||||
That means we need to add an artificial color change instruction
|
||||
shortly before the current stitch so that the user can set that color
|
||||
block to C00. We'll go back 3 stitches and mark the start of the C00
|
||||
block:
|
||||
"""
|
||||
|
||||
if len(color_block.stitches) >= 3:
|
||||
# make a copy of the stitch and turn it into a STOP code
|
||||
# make a copy of the stitch and set it as a color change
|
||||
stitch = color_block.stitches[-3].copy()
|
||||
stitch.color_change = True
|
||||
|
||||
# mark this stitch as a "stop" so that we can avoid
|
||||
# adding tie stitches in ties.py
|
||||
stitch.stop = True
|
||||
|
||||
# insert it after the stitch
|
||||
|
@ -28,7 +37,7 @@ def process_stop(color_block):
|
|||
# block:
|
||||
|
||||
stitch = color_block.stitches[-1].copy()
|
||||
stitch.stop = True
|
||||
stitch.color_change = True
|
||||
color_block.add_stitch(stitch)
|
||||
|
||||
# reference for the above: https://github.com/lexelby/inkstitch/pull/29#issuecomment-359175447
|
||||
|
|
|
@ -34,7 +34,9 @@ def add_ties(stitch_plan):
|
|||
need_tie_in = True
|
||||
new_stitches = []
|
||||
for i, stitch in enumerate(color_block.stitches):
|
||||
is_special = stitch.trim or stitch.jump or stitch.stop
|
||||
# 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)
|
||||
|
||||
if is_special and not need_tie_in:
|
||||
add_tie_off(new_stitches)
|
||||
|
|
|
@ -15,7 +15,7 @@ def color_block_to_point_lists(color_block):
|
|||
point_lists.append([])
|
||||
continue
|
||||
|
||||
if not stitch.jump and not stitch.stop:
|
||||
if not stitch.jump and not stitch.color_change:
|
||||
point_lists[-1].append(stitch.as_tuple())
|
||||
|
||||
return point_lists
|
||||
|
|
Ładowanie…
Reference in New Issue