pyembroidery/pyembroidery/MitReader.py

35 wiersze
990 B
Python

def read(f, out, settings=None):
count = 0
previous_ctrl = -1
while True:
count += 1
byte = bytearray(f.read(2))
if len(byte) != 2:
break
x = byte[0] & 0x1F
y = - (byte[1] & 0x1F)
if byte[0] & 0b10000000:
x = -x
if byte[1] & 0b10000000:
y = -y
ctrl = ((byte[0] & 0x60) >> 3) | ((byte[1] & 0x60) >> 5)
if ctrl == 0b0111:
out.stitch(x, y)
previous_ctrl = ctrl
continue
elif ctrl == 0b1100:
out.move(x, y)
elif ctrl == 0b0100:
out.stitch(x, y)
elif ctrl == 0b0101:
out.stitch(x, y)
elif ctrl == 0b1000:
if previous_ctrl == 0b111:
out.color_change()
elif ctrl == 0b0000:
out.end() # 0 appears at end.
else:
out.stitch(x, y)
previous_ctrl = ctrl
out.end()