From 06b6f976a9975c9860fcc0a29e6e9c3ea174ba9d Mon Sep 17 00:00:00 2001 From: Kaalleen <36401965+kaalleen@users.noreply.github.com> Date: Fri, 31 Mar 2023 17:10:40 +0200 Subject: Command options (#2160) * letters to font: add visual command import option * add visual command option to stitch plan preview --- lib/extensions/letters_to_font.py | 6 +++--- lib/extensions/stitch_plan_preview.py | 3 ++- lib/stitch_plan/generate_stitch_plan.py | 8 +++++--- lib/svg/rendering.py | 13 ++++++++++--- 4 files changed, 20 insertions(+), 10 deletions(-) (limited to 'lib') diff --git a/lib/extensions/letters_to_font.py b/lib/extensions/letters_to_font.py index 158d0d9f..56a33ad8 100644 --- a/lib/extensions/letters_to_font.py +++ b/lib/extensions/letters_to_font.py @@ -25,7 +25,7 @@ class LettersToFont(InkstitchExtension): InkstitchExtension.__init__(self, *args, **kwargs) self.arg_parser.add_argument("-d", "--font-dir", type=str, default="", dest="font_dir") self.arg_parser.add_argument("-f", "--file-format", type=str, default="", dest="file_format") - self.arg_parser.add_argument("-c", "--import-commands", type=inkex.Boolean, default=False, dest="import_commands") + self.arg_parser.add_argument("-c", "--import-commands", type=str, default="params", dest="import_commands") def effect(self): font_dir = self.options.font_dir @@ -50,7 +50,7 @@ class LettersToFont(InkstitchExtension): # remove color block groups if we import without commands # there will only be one object per color block anyway - if not self.options.import_commands: + if self.options.import_commands == "none": for element in letter.iter(SVG_PATH_TAG): group.insert(0, element) else: @@ -78,4 +78,4 @@ class LettersToFont(InkstitchExtension): return stitch_plan def insert_baseline(self, document): - document.namedview.new_guide(position=0.0, name="baseline") + document.namedview.add_guide(position=0.0, name="baseline") diff --git a/lib/extensions/stitch_plan_preview.py b/lib/extensions/stitch_plan_preview.py index e5d22fa7..fbfe3628 100644 --- a/lib/extensions/stitch_plan_preview.py +++ b/lib/extensions/stitch_plan_preview.py @@ -22,6 +22,7 @@ class StitchPlanPreview(InkstitchExtension): self.arg_parser.add_argument("-v", "--layer-visibility", type=int, default=0, dest="layer_visibility") self.arg_parser.add_argument("-n", "--needle-points", type=Boolean, default=False, dest="needle_points") self.arg_parser.add_argument("-i", "--insensitive", type=Boolean, default=False, dest="insensitive") + self.arg_parser.add_argument("-c", "--visual-commands", type=Boolean, default="symbols", dest="visual_commands") def effect(self): # delete old stitch plan @@ -33,7 +34,7 @@ class StitchPlanPreview(InkstitchExtension): return realistic = False - visual_commands = True + visual_commands = self.options.visual_commands self.metadata = self.get_inkstitch_metadata() collapse_len = self.metadata['collapse_len_mm'] min_stitch_len = self.metadata['min_stitch_len_mm'] diff --git a/lib/stitch_plan/generate_stitch_plan.py b/lib/stitch_plan/generate_stitch_plan.py index 2d8ceeff..53458815 100644 --- a/lib/stitch_plan/generate_stitch_plan.py +++ b/lib/stitch_plan/generate_stitch_plan.py @@ -17,7 +17,7 @@ from .stitch import Stitch from .stitch_plan import StitchPlan -def generate_stitch_plan(embroidery_file, import_commands=True): # noqa: C901 +def generate_stitch_plan(embroidery_file, import_commands="symbols"): # noqa: C901 validate_file_path(embroidery_file) pattern = pyembroidery.read(embroidery_file) stitch_plan = StitchPlan() @@ -29,7 +29,7 @@ def generate_stitch_plan(embroidery_file, import_commands=True): # noqa: C901 if command == pyembroidery.STITCH: color_block.add_stitch(Stitch(x * PIXELS_PER_MM / 10.0, y * PIXELS_PER_MM / 10.0)) if len(color_block) > 0: - if not import_commands and command in [pyembroidery.TRIM, pyembroidery.STOP]: + if import_commands == "none" and command in [pyembroidery.TRIM, pyembroidery.STOP]: # Importing commands is not wanted: # start a new color block without inserting the command color_block = stitch_plan.new_color_block(thread) @@ -53,7 +53,9 @@ def generate_stitch_plan(embroidery_file, import_commands=True): # noqa: C901 "height": str(extents[1] * 2), "viewBox": "0 0 %s %s" % (extents[0] * 2, extents[1] * 2), }) - render_stitch_plan(svg, stitch_plan) + + visual_commands = True if import_commands == "symbols" else False + render_stitch_plan(svg, stitch_plan, visual_commands=visual_commands) # rename the Stitch Plan layer so that it doesn't get overwritten by Embroider layer = svg.find(".//*[@id='__inkstitch_stitch_plan__']") diff --git a/lib/svg/rendering.py b/lib/svg/rendering.py index 5ee6d328..1f74e2df 100644 --- a/lib/svg/rendering.py +++ b/lib/svg/rendering.py @@ -195,6 +195,8 @@ def color_block_to_paths(color_block, svg, destination, visual_commands): first = False elif visual_commands: add_commands(Stroke(destination[-1]), ["trim"]) + else: + path.set(INKSTITCH_ATTRIBS['trim_after'], 'true') color = color_block.color.visible_on_white.to_hex_str() path = inkex.PathElement(attrib={ @@ -206,12 +208,17 @@ def color_block_to_paths(color_block, svg, destination, visual_commands): }) destination.append(path) - if path is not None and visual_commands: - if color_block.trim_after: + if path is not None and color_block.trim_after: + if visual_commands: add_commands(Stroke(path), ["trim"]) + else: + path.set(INKSTITCH_ATTRIBS['trim_after'], 'true') - if color_block.stop_after: + if path is not None and color_block.stop_after: + if visual_commands: add_commands(Stroke(path), ["stop"]) + else: + path.set(INKSTITCH_ATTRIBS['stop_after'], 'true') def render_stitch_plan(svg, stitch_plan, realistic=False, visual_commands=True): -- cgit v1.2.3