implement stop position

pull/293/head
Lex Neva 2018-08-22 22:48:40 -04:00
rodzic f8a9400fae
commit a8ac170e87
3 zmienionych plików z 111 dodań i 22 usunięć

Wyświetl plik

@ -1,3 +1,4 @@
import sys
import inkex
import cubicsuperpath
import simpletransform
@ -9,25 +10,28 @@ from .i18n import _, N_
COMMANDS = {
# L10N command attached to an object
"fill_start": N_("Fill stitch starting position"),
N_("fill_start"): N_("Fill stitch starting position"),
# L10N command attached to an object
"fill_end": N_("Fill stitch ending position"),
N_("fill_end"): N_("Fill stitch ending position"),
# L10N command attached to an object
"stop": N_("Stop (pause machine) after sewing this object"),
N_("stop"): N_("Stop (pause machine) after sewing this object"),
# L10N command attached to an object
"trim": N_("Trim thread after sewing this object"),
N_("trim"): N_("Trim thread after sewing this object"),
# L10N command attached to an object
"ignore_object": N_("Ignore this object (do not stitch)"),
N_("ignore_object"): N_("Ignore this object (do not stitch)"),
# L10N command that affects a layer
"ignore_layer": N_("Ignore layer (do not stitch any objects in this layer)"),
N_("ignore_layer"): N_("Ignore layer (do not stitch any objects in this layer)"),
# L10N command that affects entire document
"origin": N_("Origin for exported embroidery files"),
N_("origin"): N_("Origin for exported embroidery files"),
# L10N command that affects entire document
N_("stop_point"): N_("Jump destination for Stop commands (a.k.a. \"Frame Out position\")."),
}
OBJECT_COMMANDS = ["fill_start", "fill_end", "stop", "trim", "ignore_object"]
@ -132,7 +136,7 @@ class StandaloneCommand(BaseCommand):
def get_command_description(command):
return _(COMMANDS[command])
return COMMANDS[command]
def find_commands(node):
@ -169,6 +173,31 @@ def global_commands(svg, command):
if standalone_command.command == command:
yield standalone_command
@cache
def global_command(svg, command):
"""Find a single command of the specified type.
If more than one is found, print an error and exit.
"""
commands = list(global_commands(svg, command))
if len(commands) == 1:
return commands[0]
elif len(commands) > 1:
print >> sys.stderr, _("Error: there is more than one %(command)s command in the document, but there can only be one. "
"Please remove all but one.") % dict(command=command)
# L10N This is a continuation of the previous error message, letting the user know
# what command we're talking about since we don't normally expose the actual
# command name to them. Contents of %(description)s are in a separate translation
# string.
print >> sys.stderr, _("%(command)s: %(description)s") % dict(command=command, description=_(get_command_description(command)))
sys.exit(1)
else:
return None
def _standalone_commands(svg):
"""Find all unconnected command symbols in the SVG."""

Wyświetl plik

@ -5,7 +5,7 @@ import shapely.geometry as shgeo
from .utils import Point
from .svg import PIXELS_PER_MM, get_doc_size, get_viewbox_transform
from .commands import global_commands
from .commands import global_command
def get_command(stitch):
@ -27,12 +27,10 @@ def _string_to_floats(string):
def get_origin(svg):
origin_commands = list(global_commands(svg, "origin"))
origin_command = global_command(svg, "origin")
if origin_commands:
origin = origin_commands[0].point
return origin
if origin_command:
return origin_command.point
else:
# default: center of the canvas
@ -49,6 +47,12 @@ def get_origin(svg):
return default
def jump_to_stop_point(pattern, svg):
stop_position = global_command(svg, "stop_position")
if stop_position:
pattern.add_stitch_absolute(pyembroidery.JUMP, stop_position.point.x, stop_position.point.y)
def write_embroidery_file(file_path, stitch_plan, svg):
origin = get_origin(svg)
@ -58,6 +62,8 @@ def write_embroidery_file(file_path, stitch_plan, svg):
pattern.add_thread(color_block.color.pyembroidery_thread)
for stitch in color_block:
if stitch.stop:
jump_to_stop_point(pattern, svg)
command = get_command(stitch)
pattern.add_stitch_absolute(command, stitch.x, stitch.y)

Wyświetl plik

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2018-08-24 20:54-0400\n"
"POT-Creation-Date: 2018-08-24 20:56-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -18,40 +18,94 @@ msgstr ""
"Generated-By: Babel 2.5.3\n"
#. command attached to an object
#: lib/commands.py:12
#: lib/commands.py:13
msgid "fill_start"
msgstr ""
#: lib/commands.py:13
msgid "Fill stitch starting position"
msgstr ""
#. command attached to an object
#: lib/commands.py:15
#: lib/commands.py:16
msgid "fill_end"
msgstr ""
#: lib/commands.py:16
msgid "Fill stitch ending position"
msgstr ""
#. command attached to an object
#: lib/commands.py:18
#: lib/commands.py:19
msgid "stop"
msgstr ""
#: lib/commands.py:19
msgid "Stop (pause machine) after sewing this object"
msgstr ""
#. command attached to an object
#: lib/commands.py:21
#: lib/commands.py:22
msgid "trim"
msgstr ""
#: lib/commands.py:22
msgid "Trim thread after sewing this object"
msgstr ""
#. command attached to an object
#: lib/commands.py:24
#: lib/commands.py:25
msgid "ignore_object"
msgstr ""
#: lib/commands.py:25
msgid "Ignore this object (do not stitch)"
msgstr ""
#. command that affects a layer
#: lib/commands.py:27
#: lib/commands.py:28
msgid "ignore_layer"
msgstr ""
#: lib/commands.py:28
msgid "Ignore layer (do not stitch any objects in this layer)"
msgstr ""
#. command that affects entire document
#: lib/commands.py:30
#: lib/commands.py:31
msgid "origin"
msgstr ""
#: lib/commands.py:31
msgid "Origin for exported embroidery files"
msgstr ""
#. command that affects entire document
#: lib/commands.py:34
msgid "stop_point"
msgstr ""
#: lib/commands.py:34
msgid "Jump destination for Stop commands (a.k.a. \"Frame Out position\")."
msgstr ""
#: lib/commands.py:188
#, python-format
msgid ""
"Error: there is more than one %(command)s command in the document, but "
"there can only be one. Please remove all but one."
msgstr ""
#. This is a continuation of the previous error message, letting the user know
#. what command we're talking about since we don't normally expose the actual
#. command name to them. Contents of %(description)s are in a separate
#. translation
#. string.
#: lib/commands.py:195
#, python-format
msgid "%(command)s: %(description)s"
msgstr ""
#: lib/elements/auto_fill.py:11
msgid "Auto-Fill"
msgstr ""