kopia lustrzana https://github.com/EmbroidePy/pyembroidery
64 wiersze
2.1 KiB
Python
64 wiersze
2.1 KiB
Python
from .ReadHelper import read_int_8, read_int_16be, read_int_24be, signed24
|
|
|
|
PC_SIZE_CONVERSION_RATIO = 5.0 / 3.0
|
|
|
|
|
|
def read_pc_file(f, out, settings=None):
|
|
pcm_threads = [
|
|
{"color": 0x000000, "description": "PCM Color 1"},
|
|
{"color": 0x000080, "description": "PCM Color 2"},
|
|
{"color": 0x0000FF, "description": "PCM Color 3"},
|
|
{"color": 0x008080, "description": "PCM Color 4"},
|
|
{"color": 0x00FFFF, "description": "PCM Color 5"},
|
|
{"color": 0x800080, "description": "PCM Color 6"},
|
|
{"color": 0xFF00FF, "description": "PCM Color 7"},
|
|
{"color": 0x800000, "description": "PCM Color 8"},
|
|
{"color": 0xFF0000, "description": "PCM Color 9"},
|
|
{"color": 0x008000, "description": "PCM Color 10"},
|
|
{"color": 0x00FF00, "description": "PCM Color 11"},
|
|
{"color": 0x808000, "description": "PCM Color 12"},
|
|
{"color": 0xFFFF00, "description": "PCM Color 13"},
|
|
{"color": 0x808080, "description": "PCM Color 14"},
|
|
{"color": 0xC0C0C0, "description": "PCM Color 15"},
|
|
{"color": 0xFFFFFF, "description": "PCM Color 16"},
|
|
]
|
|
|
|
f.seek(2, 0)
|
|
|
|
colors = read_int_16be(f)
|
|
if colors is None:
|
|
return # File is blank.
|
|
for i in range(0, colors):
|
|
color_index = read_int_16be(f)
|
|
thread = pcm_threads[color_index]
|
|
out.add_thread(thread)
|
|
|
|
stitch_count = read_int_16be(f)
|
|
while True:
|
|
x = read_int_24be(f)
|
|
c0 = read_int_8(f)
|
|
y = read_int_24be(f)
|
|
c1 = read_int_8(f)
|
|
ctrl = read_int_8(f)
|
|
if ctrl is None:
|
|
break
|
|
x = signed24(x)
|
|
y = -signed24(y)
|
|
x *= PC_SIZE_CONVERSION_RATIO
|
|
y *= PC_SIZE_CONVERSION_RATIO
|
|
if ctrl == 0x00:
|
|
out.stitch_abs(x, y)
|
|
continue
|
|
if ctrl & 0x01:
|
|
out.color_change()
|
|
continue
|
|
if ctrl & 0x04:
|
|
out.move_abs(x, y)
|
|
continue
|
|
break # Uncaught Control
|
|
out.end()
|
|
|
|
|
|
def read(f, out, settings=None):
|
|
read_pc_file(f, out)
|