Skip to content

Commit

Permalink
Merge pull request #22 from EmbroidePy/tatarize-patch-2
Browse files Browse the repository at this point in the history
Convert tests, couple corrections.
  • Loading branch information
tatarize committed Sep 30, 2018
2 parents 61cf537 + f168c0f commit 961825f
Show file tree
Hide file tree
Showing 22 changed files with 1,397 additions and 352 deletions.
2 changes: 1 addition & 1 deletion pyembroidery/CsvReader.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from pyembroidery.EmbConstant import *
from .EmbFunctions import *

READ_FILE_IN_TEXT_MODE = True

Expand Down
2 changes: 1 addition & 1 deletion pyembroidery/CsvWriter.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .EmbConstant import *
from .EmbFunctions import *
from .WriteHelper import write_string_utf8
from .PecGraphics import get_graphic_as_string
import math
Expand Down
2 changes: 1 addition & 1 deletion pyembroidery/DstReader.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ def dst_read_stitches(f, out):
dx = decode_dx(byte[0], byte[1], byte[2])
dy = decode_dy(byte[0], byte[1], byte[2])
if byte[2] & 0b11110011 == 0b11110011:
out.stop(dx, dy)
out.end(dx, dy)
elif byte[2] & 0b11000011 == 0b11000011:
out.color_change(dx, dy)
elif byte[2] & 0b01000011 == 0b01000011:
Expand Down
120 changes: 0 additions & 120 deletions pyembroidery/EmbConstant.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,123 +65,3 @@
CONTINGENCY_SEQUIN_JUMP = 0xF6
CONTINGENCY_SEQUIN_STITCH = 0xF7
CONTINGENCY_SEQUIN_REMOVE = 0xF8


def encode_thread_change(command, thread=None, needle=None, order=None):
if thread is None:
thread = 0
else:
thread += 1
thread &= 0xFF
if needle is None:
needle = 0
else:
needle += 1
needle &= 0xFF
if order is None:
order = 0
else:
order += 1
order &= 0xFF
command &= COMMAND_MASK
return command | (order << 24) | (needle << 16) | (thread << 8)


def decode_thread_change(command):
flag = command & COMMAND_MASK
thread = command & THREAD_MASK
thread >>= 8
thread -= 1
needle = command & NEEDLE_MASK
needle >>= 16
needle -= 1
order = command & ORDER_MASK
order >>= 24
order -= 1
return flag, thread, needle, order


def get_command_dictionary():
return {
"NO_COMMAND": NO_COMMAND,
"STITCH": STITCH,
"JUMP": JUMP,
"TRIM": TRIM,
"STOP": STOP,
"END": END,
"SLOW": SLOW,
"FAST": FAST,
"COLOR_CHANGE": COLOR_CHANGE,
"NEEDLE_SET": NEEDLE_SET,
"SET_CHANGE_SEQUENCE": SET_CHANGE_SEQUENCE,
"SEQUIN_MODE": SEQUIN_MODE,
"SEQUIN_EJECT": SEQUIN_EJECT,
"SEW_TO": SEW_TO,
"NEEDLE_AT": NEEDLE_AT,
"STITCH_BREAK": STITCH_BREAK,
"SEQUENCE_BREAK": SEQUENCE_BREAK,
"COLOR_BREAK": COLOR_BREAK,
"TIE_ON": TIE_ON,
"TIE_OFF": TIE_OFF,
"FRAME_EJECT": FRAME_EJECT,
"MATRIX_TRANSLATE": MATRIX_TRANSLATE,
"MATRIX_SCALE_ORIGIN": MATRIX_SCALE_ORIGIN,
"MATRIX_ROTATE_ORIGIN": MATRIX_ROTATE_ORIGIN,
"MATRIX_SCALE": MATRIX_SCALE,
"MATRIX_ROTATE": MATRIX_ROTATE,
"MATRIX_RESET": MATRIX_RESET,
"CONTINGENCY_TIE_ON_THREE_SMALL": CONTINGENCY_TIE_ON_THREE_SMALL,
"CONTINGENCY_TIE_OFF_THREE_SMALL": CONTINGENCY_TIE_OFF_THREE_SMALL,
"CONTINGENCY_TIE_ON_NONE": CONTINGENCY_TIE_ON_NONE,
"CONTINGENCY_TIE_OFF_NONE": CONTINGENCY_TIE_OFF_NONE,
"OPTION_MAX_STITCH_LENGTH": OPTION_MAX_STITCH_LENGTH,
"OPTION_MAX_JUMP_LENGTH": OPTION_MAX_JUMP_LENGTH,
"OPTION_IMPLICIT_TRIM": OPTION_IMPLICIT_TRIM,
"OPTION_EXPLICIT_TRIM": OPTION_EXPLICIT_TRIM,
"CONTINGENCY_LONG_STITCH_NONE": CONTINGENCY_LONG_STITCH_NONE,
"CONTINGENCY_LONG_STITCH_JUMP_NEEDLE": CONTINGENCY_LONG_STITCH_JUMP_NEEDLE,
"CONTINGENCY_LONG_STITCH_SEW_TO": CONTINGENCY_LONG_STITCH_SEW_TO,
}


def get_common_name_dictionary():
return {
NO_COMMAND: "NO_COMMAND",
STITCH: "STITCH",
JUMP: "JUMP",
TRIM: "TRIM",
STOP: "STOP",
END: "END",
SLOW: "SLOW",
FAST: "FAST",
COLOR_CHANGE: "COLOR_CHANGE",
NEEDLE_SET: "NEEDLE_SET",
SET_CHANGE_SEQUENCE: "SET_CHANGE_SEQUENCE",
SEQUIN_MODE: "SEQUIN_MODE",
SEQUIN_EJECT: "SEQUIN_EJECT",
SEW_TO: "SEW_TO",
NEEDLE_AT: "NEEDLE_AT",
STITCH_BREAK: "STITCH_BREAK",
SEQUENCE_BREAK: "SEQUENCE_BREAK",
COLOR_BREAK: "COLOR_BREAK",
TIE_ON: "TIE_ON",
TIE_OFF: "TIE_OFF",
FRAME_EJECT: "FRAME_EJECT",
MATRIX_TRANSLATE: "MATRIX_TRANSLATE",
MATRIX_SCALE: "MATRIX_SCALE",
MATRIX_ROTATE: "MATRIX_ROTATE",
MATRIX_SCALE_ORIGIN: "MATRIX_SCALE_ORIGIN",
MATRIX_ROTATE_ORIGIN: "MATRIX_ROTATE_ORIGIN",
MATRIX_RESET: "MATRIX_RESET",
CONTINGENCY_TIE_ON_THREE_SMALL: "CONTINGENCY_TIE_ON_THREE_SMALL",
CONTINGENCY_TIE_OFF_THREE_SMALL: "CONTINGENCY_TIE_OFF_THREE_SMALL",
CONTINGENCY_TIE_ON_NONE: "CONTINGENCY_TIE_ON_NONE",
CONTINGENCY_TIE_OFF_NONE: "CONTINGENCY_TIE_OFF_NONE",
OPTION_MAX_STITCH_LENGTH: "OPTION_MAX_STITCH_LENGTH",
OPTION_MAX_JUMP_LENGTH: "OPTION_MAX_JUMP_LENGTH",
OPTION_IMPLICIT_TRIM: "OPTION_IMPLICIT_TRIM",
OPTION_EXPLICIT_TRIM: "OPTION_EXPLICIT_TRIM",
CONTINGENCY_LONG_STITCH_NONE: "CONTINGENCY_LONG_STITCH_NONE",
CONTINGENCY_LONG_STITCH_JUMP_NEEDLE: "CONTINGENCY_LONG_STITCH_JUMP_NEEDLE",
CONTINGENCY_LONG_STITCH_SEW_TO: "CONTINGENCY_LONG_STITCH_SEW_TO"
}
6 changes: 3 additions & 3 deletions pyembroidery/EmbEncoder.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import math

from .EmbConstant import *
from .EmbFunctions import *
from .EmbMatrix import EmbMatrix


Expand All @@ -11,7 +11,7 @@ def __init__(self, settings=None):
self.max_stitch = settings.get("max_stitch", float('inf'))
self.max_jump = settings.get("max_jump", float('inf'))
self.full_jump = settings.get("full_jump", False)
self.needle_count = settings.get("needle_count", 1)
self.needle_count = settings.get("needle_count", 5)
self.thread_change_command = settings.get("thread_change_command", COLOR_CHANGE)
strip_sequins = settings.get("strip_sequins", True)
# deprecated, use sequin_contingency.
Expand Down Expand Up @@ -153,7 +153,7 @@ def transcode_stitches(self):
current[3] = self.source_pattern.get_thread_or_filler(thread)
if needle != -1:
current[2] = needle
# TODO: account for contingency where threadset has repeated
# TODO: account for contingency where threadset repeats
# threads and not explicit values set within the commands.

thread_index = 0
Expand Down
121 changes: 121 additions & 0 deletions pyembroidery/EmbFunctions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
from .EmbConstant import *


def encode_thread_change(command, thread=None, needle=None, order=None):
if thread is None:
thread = 0
else:
thread += 1
thread &= 0xFF
if needle is None:
needle = 0
else:
needle += 1
needle &= 0xFF
if order is None:
order = 0
else:
order += 1
order &= 0xFF
command &= COMMAND_MASK
return command | (order << 24) | (needle << 16) | (thread << 8)


def decode_thread_change(command):
flag = command & COMMAND_MASK
thread = command & THREAD_MASK
thread >>= 8
thread -= 1
needle = command & NEEDLE_MASK
needle >>= 16
needle -= 1
order = command & ORDER_MASK
order >>= 24
order -= 1
return flag, thread, needle, order


def get_command_dictionary():
return {
"NO_COMMAND": NO_COMMAND,
"STITCH": STITCH,
"JUMP": JUMP,
"TRIM": TRIM,
"STOP": STOP,
"END": END,
"SLOW": SLOW,
"FAST": FAST,
"COLOR_CHANGE": COLOR_CHANGE,
"NEEDLE_SET": NEEDLE_SET,
"SET_CHANGE_SEQUENCE": SET_CHANGE_SEQUENCE,
"SEQUIN_MODE": SEQUIN_MODE,
"SEQUIN_EJECT": SEQUIN_EJECT,
"SEW_TO": SEW_TO,
"NEEDLE_AT": NEEDLE_AT,
"STITCH_BREAK": STITCH_BREAK,
"SEQUENCE_BREAK": SEQUENCE_BREAK,
"COLOR_BREAK": COLOR_BREAK,
"TIE_ON": TIE_ON,
"TIE_OFF": TIE_OFF,
"FRAME_EJECT": FRAME_EJECT,
"MATRIX_TRANSLATE": MATRIX_TRANSLATE,
"MATRIX_SCALE_ORIGIN": MATRIX_SCALE_ORIGIN,
"MATRIX_ROTATE_ORIGIN": MATRIX_ROTATE_ORIGIN,
"MATRIX_SCALE": MATRIX_SCALE,
"MATRIX_ROTATE": MATRIX_ROTATE,
"MATRIX_RESET": MATRIX_RESET,
"CONTINGENCY_TIE_ON_THREE_SMALL": CONTINGENCY_TIE_ON_THREE_SMALL,
"CONTINGENCY_TIE_OFF_THREE_SMALL": CONTINGENCY_TIE_OFF_THREE_SMALL,
"CONTINGENCY_TIE_ON_NONE": CONTINGENCY_TIE_ON_NONE,
"CONTINGENCY_TIE_OFF_NONE": CONTINGENCY_TIE_OFF_NONE,
"OPTION_MAX_STITCH_LENGTH": OPTION_MAX_STITCH_LENGTH,
"OPTION_MAX_JUMP_LENGTH": OPTION_MAX_JUMP_LENGTH,
"OPTION_IMPLICIT_TRIM": OPTION_IMPLICIT_TRIM,
"OPTION_EXPLICIT_TRIM": OPTION_EXPLICIT_TRIM,
"CONTINGENCY_LONG_STITCH_NONE": CONTINGENCY_LONG_STITCH_NONE,
"CONTINGENCY_LONG_STITCH_JUMP_NEEDLE": CONTINGENCY_LONG_STITCH_JUMP_NEEDLE,
"CONTINGENCY_LONG_STITCH_SEW_TO": CONTINGENCY_LONG_STITCH_SEW_TO,
}


def get_common_name_dictionary():
return {
NO_COMMAND: "NO_COMMAND",
STITCH: "STITCH",
JUMP: "JUMP",
TRIM: "TRIM",
STOP: "STOP",
END: "END",
SLOW: "SLOW",
FAST: "FAST",
COLOR_CHANGE: "COLOR_CHANGE",
NEEDLE_SET: "NEEDLE_SET",
SET_CHANGE_SEQUENCE: "SET_CHANGE_SEQUENCE",
SEQUIN_MODE: "SEQUIN_MODE",
SEQUIN_EJECT: "SEQUIN_EJECT",
SEW_TO: "SEW_TO",
NEEDLE_AT: "NEEDLE_AT",
STITCH_BREAK: "STITCH_BREAK",
SEQUENCE_BREAK: "SEQUENCE_BREAK",
COLOR_BREAK: "COLOR_BREAK",
TIE_ON: "TIE_ON",
TIE_OFF: "TIE_OFF",
FRAME_EJECT: "FRAME_EJECT",
MATRIX_TRANSLATE: "MATRIX_TRANSLATE",
MATRIX_SCALE: "MATRIX_SCALE",
MATRIX_ROTATE: "MATRIX_ROTATE",
MATRIX_SCALE_ORIGIN: "MATRIX_SCALE_ORIGIN",
MATRIX_ROTATE_ORIGIN: "MATRIX_ROTATE_ORIGIN",
MATRIX_RESET: "MATRIX_RESET",
CONTINGENCY_TIE_ON_THREE_SMALL: "CONTINGENCY_TIE_ON_THREE_SMALL",
CONTINGENCY_TIE_OFF_THREE_SMALL: "CONTINGENCY_TIE_OFF_THREE_SMALL",
CONTINGENCY_TIE_ON_NONE: "CONTINGENCY_TIE_ON_NONE",
CONTINGENCY_TIE_OFF_NONE: "CONTINGENCY_TIE_OFF_NONE",
OPTION_MAX_STITCH_LENGTH: "OPTION_MAX_STITCH_LENGTH",
OPTION_MAX_JUMP_LENGTH: "OPTION_MAX_JUMP_LENGTH",
OPTION_IMPLICIT_TRIM: "OPTION_IMPLICIT_TRIM",
OPTION_EXPLICIT_TRIM: "OPTION_EXPLICIT_TRIM",
CONTINGENCY_LONG_STITCH_NONE: "CONTINGENCY_LONG_STITCH_NONE",
CONTINGENCY_LONG_STITCH_JUMP_NEEDLE: "CONTINGENCY_LONG_STITCH_JUMP_NEEDLE",
CONTINGENCY_LONG_STITCH_SEW_TO: "CONTINGENCY_LONG_STITCH_SEW_TO"
}
2 changes: 1 addition & 1 deletion pyembroidery/EmbPattern.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from .EmbThread import EmbThread
from .EmbEncoder import Transcoder as Normalizer
from .EmbConstant import *
from .EmbFunctions import *


class EmbPattern:
Expand Down
3 changes: 2 additions & 1 deletion pyembroidery/ExpReader.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ def read_exp_stitches(f, out):
continue
elif control == 0x01: # Colorchange
out.color_change()
out.move(x, y)
if x != 0 or y != 0:
out.move(x, y)
continue
break # Uncaught Control
out.end()
Expand Down
5 changes: 3 additions & 2 deletions pyembroidery/U01Writer.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .EmbConstant import *
from .EmbFunctions import *
from .WriteHelper import write_int_16le, write_int_32le

THREAD_CHANGE_COMMAND = NEEDLE_SET
Expand Down Expand Up @@ -80,7 +80,8 @@ def write(pattern, f, settings=None):
elif data == NEEDLE_SET:
decoded = decode_thread_change(stitch[2])
needle = decoded[2]
needle %= 15
if needle >= 15:
needle = (needle % 15) + 1
cmd |= 0x08
cmd += needle
f.write(bytes(bytearray([cmd, delta_y, delta_x])))
Expand Down
1 change: 1 addition & 0 deletions pyembroidery/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
# items available at the top level (e.g. pyembroidery.read)
from .PyEmbroidery import *
from .EmbConstant import *
from .EmbFunctions import *
from .EmbPattern import EmbPattern
from .EmbMatrix import EmbMatrix

Expand Down
Loading

0 comments on commit 961825f

Please sign in to comment.