pull/117/head
Tatarize 2021-03-02 17:10:11 -08:00
rodzic e8bec2e035
commit 816afa9ed8
3 zmienionych plików z 1 dodań i 174 usunięć

Wyświetl plik

@ -3,4 +3,4 @@ python:
- "2.7"
- "3.6"
script:
- python -m unittest discover test
- python -m unittest discover test

Wyświetl plik

@ -1,172 +0,0 @@
import pyembroidery.EmbPattern as EmbPattern
import math
def distance_squared(x0, y0, x1, y1):
dx = x1 - x0
dy = y1 - y0
dx *= dx
dy *= dy
return dx + dy
def distance(x0, y0, x1, y1):
return math.sqrt(distance_squared(x0, y0, x1, y1))
def towards(a, b, amount):
return (amount * (b - a)) + a
def angleR(x0, y0, x1, y1):
return math.atan2(y1 - y0, x1 - x0)
def oriented(x0, y0, x1, y1, r):
radians = angleR(x0, y0, x1, y1)
return (x0 + (r * math.cos(radians)), y0 + (r * math.sin(radians)))
class WriteEncoder():
def __init__(self):
self.max_jump = float('inf') # type: float
self.max_stitch = float('inf') # type: float
self.tie_on = False # type: bool
self.tie_off = False # type: bool
self.needle_x = 0 # type: float
self.needle_y = 0 # type: float
self.translate_x = 0 # type: float
self.translate_y = 0 # type: float
def set_translation(self, x, y):
self.translate_x = x
self.translate_y = y
def jumpTo(self, transcode, x, y):
self.step_to(transcode, x, y, self.max_jump, EmbPattern.JUMP)
transcode.append([x, y, EmbPattern.JUMP])
def stitchTo(self, transcode, x, y):
self.step_to(transcode, x, y, self.max_stitch, EmbPattern.STITCH)
transcode.append([x, y, EmbPattern.STITCH])
def step_to(self, transcode, x, y, length, data):
distance_x = x - self.needle_x
distance_y = y - self.needle_y
if abs(distance_x) > length or abs(distance_y) > length:
stepsX = math.ceil(abs(distance_x / length))
stepsY = math.ceil(abs(distance_y / length))
if (stepsX > stepsY):
steps = stepsX
else:
steps = stepsY
stepSizeX = distance_x / steps
stepSizeY = distance_y / steps
q = 0
qe = steps
qx = self.needle_x
qy = self.needle_y
while q < qe:
transcode.append([round(qx), round(qy), data])
q += 1
qx += stepSizeX
qy += stepSizeY
def lock_stitch(self, transcode, lock_x, lock_y, anchor_x, anchor_y):
dist = distance(lock_x, lock_y, anchor_x, anchor_y)
if dist > self.max_stitch:
p = oriented(lock_x, lock_y, anchor_x, anchor_y, self.max_stitch)
anchor_x = p[0]
anchor_y = p[1]
f = (towards(lock_x, anchor_x, .33), towards(lock_y, anchor_y, .33))
s = (towards(lock_x, anchor_x, .66), towards(lock_y, anchor_y, .66))
self.stitchTo(transcode, lock_x, lock_y)
self.stitchTo(transcode, f[0], f[1])
self.stitchTo(transcode, s[0], s[1])
self.stitchTo(transcode, f[0], f[1])
def process(self, p):
self.needle_x = 0
self.needle_y = 0
copy = EmbPattern.EmbPattern()
EmbPattern.set(p, copy)
layer = copy.stitches
for stitch in layer:
stitch[0] = round(stitch[0] - self.translate_x)
stitch[1] = round(stitch[1] - self.translate_y)
p.stitches = []
p.threadlist = []
self.write_code(copy, p)
self.write_thread(copy, p)
return p
def write_thread(self, pattern_from, pattern_to):
threads_to = pattern_to.threadlist
threads_to.extend(pattern_from.threadlist)
def write_code(self, pattern_source, pattern_dest):
source = pattern_source.stitches
dest = pattern_dest.stitches
flags = EmbPattern.NO_COMMAND
trimmed = True
for i, stitch in enumerate(source):
x = stitch[0]
y = stitch[1]
flags = stitch[2]
if flags == EmbPattern.STITCH:
if trimmed:
self.jumpTo(dest, x, y)
self.needle_x = x
self.needle_y = y
if self.tie_on:
b = source[i + 1]
bx = b[0]
by = b[1]
self.lock_stitch(dest, x, y, bx, by)
dest.append([x, y, EmbPattern.STITCH])
trimmed = False;
else:
self.stitchTo(dest, x, y)
elif flags == EmbPattern.FRAME_EJECT:
if not trimmed:
dest.append([self.needle_x, self.needle_y, EmbPattern.TRIM])
trimmed = True
self.jumpTo(dest, x, y)
dest.append([x, y, EmbPattern.STOP])
elif flags == EmbPattern.BREAK:
if not trimmed:
dest.append([self.needle_x, self.needle_y, EmbPattern.TRIM])
trimmed = True
continue # do not update the needle.
elif flags == EmbPattern.BREAK_COLOR:
if not trimmed:
dest.append([self.needle_x, self.needle_y, EmbPattern.TRIM])
trimmed = True
dest.append([x, y, EmbPattern.COLOR_CHANGE])
continue # do not update the needle.
elif flags == EmbPattern.STITCH_FINAL:
if self.tie_off:
b = source[i - 1]
bx = b[0]
by = b[1]
self.lock_stitch(dest, x, y, bx, by)
self.stitchTo(dest, x, y)
dest.append([x, y, EmbPattern.TRIM])
trimmed = True
elif flags == EmbPattern.STITCH_FINAL_COLOR:
if self.tie_off:
b = source[i - 1]
bx = b[0]
by = b[1]
self.lock_stitch(dest, x, y, bx, by)
self.stitchTo(dest, x, y)
dest.append([x, y, EmbPattern.TRIM])
dest.append([x, y, EmbPattern.COLOR_CHANGE])
trimmed = True
else:
dest.append(stitch)
self.needle_x = x
self.needle_y = y
if flags != EmbPattern.END:
dest.append([self.needle_x, self.needle_y, EmbPattern.END])

Wyświetl plik

@ -1 +0,0 @@