summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--README.md306
-rwxr-xr-xbin/build-dist43
-rwxr-xr-xbin/gen-input-inx6
-rwxr-xr-xbin/gen-output-inx45
-rwxr-xr-xbin/gen-zip-inx44
-rw-r--r--embroider_input.py61
-rw-r--r--images/examples/Bfly FSL.svg837
-rw-r--r--images/examples/InkStitch Multi Color.svg699
-rw-r--r--images/examples/Logo Hat Embroidery.svg437
-rw-r--r--images/examples/Monogram Frame Example.svg586
-rw-r--r--images/examples/inkstitch_logo_screenshot.pngbin0 -> 109486 bytes
-rw-r--r--images/patches/Monogram Example.jpgbin0 -> 453051 bytes
-rw-r--r--inkstitch.py32
-rw-r--r--inkstitch/__init__.py298
-rw-r--r--inkstitch/stitch_plan/stop.py27
-rw-r--r--inkstitch/utils/io.py17
-rw-r--r--inx/embroider_input_T01.inx16
-rw-r--r--inx/inkstitch_embroider.inx (renamed from inx/embroider.inx)5
-rw-r--r--inx/inkstitch_input_100.inx (renamed from inx/embroider_input_100.inx)5
-rw-r--r--inx/inkstitch_input_10O.inx (renamed from inx/embroider_input_10O.inx)5
-rw-r--r--inx/inkstitch_input_BRO.inx (renamed from inx/embroider_input_BRO.inx)5
-rw-r--r--inx/inkstitch_input_COL.inx (renamed from inx/embroider_input_COL.inx)5
-rw-r--r--inx/inkstitch_input_CSD.inx (renamed from inx/embroider_input_CSD.inx)5
-rw-r--r--inx/inkstitch_input_CSV.inx (renamed from inx/embroider_input_CSV.inx)5
-rw-r--r--inx/inkstitch_input_DAT.inx (renamed from inx/embroider_input_DAT.inx)5
-rw-r--r--inx/inkstitch_input_DSB.inx (renamed from inx/embroider_input_DSB.inx)5
-rw-r--r--inx/inkstitch_input_DST.inx (renamed from inx/embroider_input_DST.inx)5
-rw-r--r--inx/inkstitch_input_DSZ.inx (renamed from inx/embroider_input_DSZ.inx)5
-rw-r--r--inx/inkstitch_input_EDR.inx (renamed from inx/embroider_input_EDR.inx)5
-rw-r--r--inx/inkstitch_input_EMD.inx (renamed from inx/embroider_input_EMD.inx)5
-rw-r--r--inx/inkstitch_input_EXP.inx (renamed from inx/embroider_input_EXP.inx)5
-rw-r--r--inx/inkstitch_input_EXY.inx (renamed from inx/embroider_input_EXY.inx)5
-rw-r--r--inx/inkstitch_input_FXY.inx (renamed from inx/embroider_input_FXY.inx)5
-rw-r--r--inx/inkstitch_input_GT.inx (renamed from inx/embroider_input_GT.inx)5
-rw-r--r--inx/inkstitch_input_HUS.inx (renamed from inx/embroider_input_HUS.inx)5
-rw-r--r--inx/inkstitch_input_INB.inx (renamed from inx/embroider_input_INB.inx)5
-rw-r--r--inx/inkstitch_input_INF.inx (renamed from inx/embroider_input_INF.inx)5
-rw-r--r--inx/inkstitch_input_JEF.inx (renamed from inx/embroider_input_JEF.inx)5
-rw-r--r--inx/inkstitch_input_KSM.inx (renamed from inx/embroider_input_KSM.inx)5
-rw-r--r--inx/inkstitch_input_MAX.inx (renamed from inx/embroider_input_MAX.inx)5
-rw-r--r--inx/inkstitch_input_MIT.inx (renamed from inx/embroider_input_MIT.inx)5
-rw-r--r--inx/inkstitch_input_NEW.inx (renamed from inx/embroider_input_NEW.inx)5
-rw-r--r--inx/inkstitch_input_OFM.inx (renamed from inx/embroider_input_OFM.inx)5
-rw-r--r--inx/inkstitch_input_PCD.inx (renamed from inx/embroider_input_PCD.inx)5
-rw-r--r--inx/inkstitch_input_PCM.inx (renamed from inx/embroider_input_PCM.inx)5
-rw-r--r--inx/inkstitch_input_PCQ.inx (renamed from inx/embroider_input_PCQ.inx)5
-rw-r--r--inx/inkstitch_input_PCS.inx (renamed from inx/embroider_input_PCS.inx)5
-rw-r--r--inx/inkstitch_input_PEC.inx (renamed from inx/embroider_input_PEC.inx)5
-rw-r--r--inx/inkstitch_input_PES.inx (renamed from inx/embroider_input_PES.inx)5
-rw-r--r--inx/inkstitch_input_PHB.inx (renamed from inx/embroider_input_PHB.inx)5
-rw-r--r--inx/inkstitch_input_PHC.inx (renamed from inx/embroider_input_PHC.inx)5
-rw-r--r--inx/inkstitch_input_PLT.inx (renamed from inx/embroider_input_PLT.inx)5
-rw-r--r--inx/inkstitch_input_RGB.inx (renamed from inx/embroider_input_RGB.inx)5
-rw-r--r--inx/inkstitch_input_SEW.inx (renamed from inx/embroider_input_SEW.inx)5
-rw-r--r--inx/inkstitch_input_SHV.inx (renamed from inx/embroider_input_SHV.inx)5
-rw-r--r--inx/inkstitch_input_SST.inx (renamed from inx/embroider_input_SST.inx)5
-rw-r--r--inx/inkstitch_input_STX.inx (renamed from inx/embroider_input_STX.inx)5
-rw-r--r--inx/inkstitch_input_T09.inx (renamed from inx/embroider_input_T09.inx)5
-rw-r--r--inx/inkstitch_input_TAP.inx (renamed from inx/embroider_input_TAP.inx)5
-rw-r--r--inx/inkstitch_input_THR.inx (renamed from inx/embroider_input_THR.inx)5
-rw-r--r--inx/inkstitch_input_U00.inx (renamed from inx/embroider_input_U00.inx)5
-rw-r--r--inx/inkstitch_input_VIP.inx (renamed from inx/embroider_input_VIP.inx)5
-rw-r--r--inx/inkstitch_input_VP3.inx (renamed from inx/embroider_input_VP3.inx)5
-rw-r--r--inx/inkstitch_input_XXX.inx (renamed from inx/embroider_input_XXX.inx)5
-rw-r--r--inx/inkstitch_input_ZSK.inx (renamed from inx/embroider_input_ZSK.inx)5
-rw-r--r--inx/inkstitch_output_COL.inx19
-rw-r--r--inx/inkstitch_output_CSV.inx19
-rw-r--r--inx/inkstitch_output_DST.inx19
-rw-r--r--inx/inkstitch_output_EDR.inx19
-rw-r--r--inx/inkstitch_output_EXP.inx19
-rw-r--r--inx/inkstitch_output_HUS.inx19
-rw-r--r--inx/inkstitch_output_INF.inx19
-rw-r--r--inx/inkstitch_output_JEF.inx19
-rw-r--r--inx/inkstitch_output_KSM.inx19
-rw-r--r--inx/inkstitch_output_MAX.inx19
-rw-r--r--inx/inkstitch_output_PCD.inx19
-rw-r--r--inx/inkstitch_output_PCQ.inx19
-rw-r--r--inx/inkstitch_output_PCS.inx19
-rw-r--r--inx/inkstitch_output_PEC.inx19
-rw-r--r--inx/inkstitch_output_PES.inx19
-rw-r--r--inx/inkstitch_output_PLT.inx19
-rw-r--r--inx/inkstitch_output_RGB.inx19
-rw-r--r--inx/inkstitch_output_THR.inx19
-rw-r--r--inx/inkstitch_output_TXT.inx19
-rw-r--r--inx/inkstitch_output_VP3.inx19
-rw-r--r--inx/inkstitch_output_XXX.inx19
-rw-r--r--inx/inkstitch_output_ZIP.inx61
-rw-r--r--inx/inkstitch_palettes.inx (renamed from inx/embroider_palettes.inx)5
-rw-r--r--inx/inkstitch_params.inx (renamed from inx/embroider_params.inx)5
-rw-r--r--inx/inkstitch_print.inx (renamed from inx/embroider_print.inx)5
-rw-r--r--inx/inkstitch_simulate.inx (renamed from inx/embroider_simulate.inx)6
-rw-r--r--lib/__init__.py0
-rw-r--r--lib/elements/__init__.py (renamed from inkstitch/elements/__init__.py)0
-rw-r--r--lib/elements/auto_fill.py (renamed from inkstitch/elements/auto_fill.py)41
-rw-r--r--lib/elements/element.py (renamed from inkstitch/elements/element.py)29
-rw-r--r--lib/elements/fill.py (renamed from inkstitch/elements/fill.py)12
-rw-r--r--lib/elements/polyline.py (renamed from inkstitch/elements/polyline.py)3
-rw-r--r--lib/elements/satin_column.py (renamed from inkstitch/elements/satin_column.py)8
-rw-r--r--lib/elements/stroke.py (renamed from inkstitch/elements/stroke.py)91
-rw-r--r--lib/extensions/__init__.py8
-rw-r--r--lib/extensions/base.py (renamed from inkstitch/extensions.py)28
-rw-r--r--lib/extensions/embroider.py (renamed from embroider.py)42
-rw-r--r--lib/extensions/input.py72
-rw-r--r--lib/extensions/output.py51
-rw-r--r--lib/extensions/palettes.py (renamed from embroider_palettes.py)15
-rw-r--r--lib/extensions/params.py (renamed from embroider_params.py)68
-rw-r--r--lib/extensions/print_pdf.py (renamed from embroider_print.py)127
-rw-r--r--lib/extensions/simulate.py28
-rw-r--r--lib/extensions/zip.py88
-rw-r--r--lib/i18n.py21
-rw-r--r--lib/output.py128
-rw-r--r--lib/simulator.py (renamed from embroider_simulate.py)36
-rw-r--r--lib/stitch_plan/__init__.py (renamed from inkstitch/stitch_plan/__init__.py)1
-rw-r--r--lib/stitch_plan/stitch.py19
-rw-r--r--lib/stitch_plan/stitch_plan.py (renamed from inkstitch/stitch_plan/stitch_plan.py)31
-rw-r--r--lib/stitch_plan/stop.py43
-rw-r--r--lib/stitch_plan/ties.py (renamed from inkstitch/stitch_plan/ties.py)10
-rw-r--r--lib/stitch_plan/trim.py (renamed from inkstitch/stitch_plan/trim.py)0
-rw-r--r--lib/stitches/__init__.py (renamed from inkstitch/stitches/__init__.py)0
-rw-r--r--lib/stitches/auto_fill.py (renamed from inkstitch/stitches/auto_fill.py)7
-rw-r--r--lib/stitches/fill.py (renamed from inkstitch/stitches/fill.py)6
-rw-r--r--lib/stitches/running_stitch.py (renamed from inkstitch/stitches/running_stitch.py)6
-rw-r--r--lib/svg/__init__.py2
-rw-r--r--lib/svg/realistic_rendering.py129
-rw-r--r--lib/svg/svg.py (renamed from inkstitch/svg.py)48
-rw-r--r--lib/svg/tags.py12
-rw-r--r--lib/svg/units.py118
-rw-r--r--lib/threads/__init__.py (renamed from inkstitch/threads/__init__.py)0
-rw-r--r--lib/threads/catalog.py (renamed from inkstitch/threads/catalog.py)2
-rw-r--r--lib/threads/color.py (renamed from inkstitch/threads/color.py)15
-rw-r--r--lib/threads/palette.py (renamed from inkstitch/threads/palette.py)3
-rw-r--r--lib/utils/__init__.py (renamed from inkstitch/utils/__init__.py)0
-rw-r--r--lib/utils/cache.py (renamed from inkstitch/utils/cache.py)0
-rw-r--r--lib/utils/geometry.py (renamed from inkstitch/utils/geometry.py)6
-rw-r--r--lib/utils/inkscape.py (renamed from inkstitch/utils/inkscape.py)0
-rw-r--r--lib/utils/io.py33
-rw-r--r--messages.po260
-rw-r--r--print/resources/inkstitch.js88
-rw-r--r--print/resources/style.css24
-rw-r--r--print/templates/operator_overview.html4
-rw-r--r--print/templates/print_detail.html7
-rw-r--r--print/templates/print_overview.html12
-rw-r--r--print/templates/ui.html8
-rw-r--r--requirements.txt7
-rw-r--r--templates/embroider_input.inx6
-rw-r--r--templates/embroider_output.inx19
-rw-r--r--templates/embroider_zip_output.inx21
148 files changed, 4402 insertions, 1618 deletions
diff --git a/Makefile b/Makefile
index fc82757a..250a9c5b 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-EXTENSIONS:=embroider embroider_params embroider_simulate embroider_print embroider_input embroider_palettes
+EXTENSIONS:=inkstitch
# This gets the branch name or the name of the tag
VERSION:=$(TRAVIS_BRANCH)
diff --git a/README.md b/README.md
index 40cf5c34..e27856bd 100644
--- a/README.md
+++ b/README.md
@@ -1,301 +1,27 @@
-# ink/stitch: An Inkscape extension for designing machine embroidery patterns
+<a href="https://user-images.githubusercontent.com/11083514/41197881-e862e07a-6c62-11e8-89d6-32915e52bece.png"><img align=right src="images/examples/inkstitch_logo_screenshot.png"></a>
-* February 22, 2018: **Windows support added!**
-* February 5, 2018: Portuguese (pt_PT) translation added! [Want to help translate?](LOCALIZATION.md)
-* January 5, 2018: Default DPI changed to 96, to match Inkscape.
-* January 3, 2018: Project renamed from `inkscape-embroidery` to **ink/stitch**
-* January 1, 2018: [video demo of the new live stitch preview feature](https://youtu.be/QY9NcLN3oJM)
-* December 6, 2017: [video demo of how to use the extension](https://www.youtube.com/watch?v=qXntE1X1RIw)
+# Ink/Stitch: An open source machine embroidery design platform based on Inkscape
-## Introduction
-**Want to design embroidery pattern files (PES, DST, etc) using free, open source software? Hate all the other options? Try this one.**
+Want to design embroidery pattern files (PES, DST, and many more) using **free, open source software?**
-I received a really wonderful christmas gift for a geeky programmer hacker: an [embroidery machine](http://www.brother-usa.com/homesewing/ModelDetail.aspx?ProductID=SE400). It's pretty much a CNC thread-bot... I just had to figure out how to design programs for it. The problem is, **all free embroidery design software seemed to be terrible**, especially when you add in the requirement of being able to run in Linux, my OS of choice.
-
-So I wrote one.
-
-Okay, not really. I'm pretty terrible at GUIs, but I found this nifty inkscape extension that was created and hacked on by a couple of other folks. It was pretty rudimentary, but it got the job done, and more importantly, it was super hackable. I hacked the hell out of it, and at this point **ink/stitch is a viable entry-level machine embroidery design tool**.
-
-## Quick Setup On Ubuntu and Windows
-
-First, download the right release archive for your platform from the [latest release](https://github.com/lexelby/inkstitch/releases/latest).
-
-* **Linux**: `inkstitch-[VERSION]-Linux-x86_64.tar.gz`
- * Currently supports most 64-bit Linux systems from the last couple of years.
- * 32-bit support coming soon.
-* **Windows**: `inkstitch-[VERSION]-win32.zip`
- * Supports 32-bit and 64-bit Windows
-
-In Inkscape, go to Preferences and look under System. Next to "User Extensions" is a folder. Decompress the archive you downloaded directly into this folder.
-
-For example, on Linux:
-
-```
-$ cd ~/.config/inkscape/extensions
-$ tar zxf ~/Downloads/inkstitch-v1.0.0-Linux-x86_64.tar.gz
-```
-
-That's it! All python libraries and external dependencies are bundled (using the excellent [pyinstaller](http://www.pyinstaller.org)), so you shouldn't need to set anything else up. Just restart Inkscape and the extension should be ready to go.
-
-Continue reading in the "Usage" section.
-
-## Manual Setup
-
-### Inkscape
-First, install Inkscape if you don't have it. I highly recommend version 0.92 or greater, which has a really key feature: the Objects panel. This gives you a heirarchical list of objects in your SVG file, listed in their stacking order. This is really important because the stacking order dictates the order that the shapes will be sewn in.
-
-Versions 0.92.2 and higher let you bind a key to new commands, "stack up" and "stack down", which I assign to pageup and pagedown. These let you arbitrarily reorder objects in the SVG file, which lets you directly manipulate which order they stitch in. It works way better than the default "raise" and "lower" commands.
-
-### Python Dependencies
-A few python modules are needed. In some cases this extension uses features that aren't available in the versions of the modules pre-packaged in distributions, so I recommend installing them directly with pip:
-
-```
-pip install -r requirements.txt
-```
-
-### Extension installation
-1. Clone the extension source: `git clone https://github.com/lexelby/inkstitch`
-2. Install it as directed [here](https://inkscape.org/en/gallery/%3Dextension/)
-
-I prefer to symbolically link into my git clone, which allows me to hack on the code. Changes to the Python code take effect the next time the extension is run. Changes to the extension description files (`*.inx`) take effect the next time Inkscape is restarted
-
-## Usage
-### Basic Usage
-First things first: I'm going to assume you know a few embroidery terms like "fill stitch" and "satin". Look those up if you're mentally 404ing, then come back here. I'm *not* going to assume you know some of the more advanced terms, because I had to learn all that when I started this project, so I might as well teach you too.
-
-1. Open up Inkscape and create a rectangle.
-2. Make sure it has both a stroke and a fill.
-3. Convert it to a path using **Path -> Object to Path** (because ink/stitch doesn't understand rectangles, circles, and the like, and ignores them).
-4. Run **Extensions -> Embroidery -> Embroider**. Use the default settings.
-
-The rectangle you made will disappear and be replaced with some stripes and zig-zags. ink/stitch has hidden all of your layers and created a new one called Embroidery, in which it has palced a visual representation of the stitch plan it created. It has interpreted your shape as two instructions: Fill and Stroke. Fill is implemented using fill stitching, and Stroke is implemented by running satin stitching along the outline.
-
-Select the horizontal lines using the "Edit Paths by Nodes" tool. Zoom in a bit and you'll see that the lines are actually made up of lots of points. Each point represents one stitch -- one needle penetration and interlocking of the top thread with the bobbin thread. Notice how the points all line up nicely in diagonals. This will give the fill stitching a nice, orderly visual appearance.
-
-Now look at the zig-zags. These are the satin stitches. Note that the corners look pretty ugly. This is because satin stitches generated from a shape's stroke are pretty rudimentary and aren't implemented intelligently. You can exert much greater control over satin stitching using a Satin Column, described later.
-
-The stitching preview you're looking at just now isn't intended to be permanent. I usually immediately undo it (ctrl-Z) after I've looked at the stitches. The actual work that ink/stitch does is to output a design file.
-
-### Stitching Out the Design
-Where'd the design file go? One of the parameters you were able to specify in the filter settings dialog was the output directory. By default, the directory used is the place where you installed the extension's Python files. I output mine to `~/Documents/embroidery/output`.
-
-ink/stitch will create a file named `something.___`, where `something` is the name of your svg file (e.g. `something.svg`) and `___` is the proper extension for the output format you select. If `something.___` already exists, it will be renamed to `something.___.1`, and `something.___.1` will be renamed to `something.___.2`, etc, up to 5 backup copies. When you've got the design the way you like it, save off a copy of `something.___`.
-
-### Ordering
-
-Copy your rectangle and paste it elsewhere on your canvas. Deselect any shapes (**Edit -> Deselect**), re-run the extension, and look at the output. You'll see that both regions have been stitched, and there will be a line connecting them. That's a jump-stitch, where the machine will move a long distance between stitching the sections.
-
-If you're like me, your machine can't automatically cut the thread between stitching sections, so you'll need to minimize jump stitches as much as possible through careful planning of your stitch path. If your machine *can* do thread cuts, congratulations, since [pull #29](https://github.com/lexelby/inkstitch/pull/29#) it is possible to add TRIM and STOP for each object on the params menu!
-
-However, note that ink/stitch pays attention to the colors you use for objects. If you change colors from one object to the next, ink/stitch will include a color-change instruction using the color you've set for the object. My machine cuts the thread and waits for me to switch to the new thread color.
-
-#### Reordering
-
-Use the Objects panel to view the stacking order of the objects in your SVG file. ink/stitch will stitch them in their stacking order, from lowest to highest. You can reorder them in the normal way in inkscape to affect the stitching order.
-
-You can also use the Reorder extension. Hold shift and select the objects you'd like to reorder, one at a time, in the order you'd like them to end up in (lowest to highest). Run **Embroidery -> Reorder**. This extension will pull all of the selected objects out of wherever they were in the stacking order and insert them in order at the same place as the *first* object you selected. This can save you a ton of time. NOTE: this stopped working in more recent versions of inkscape, which no longer tell the extension what order you selected objects in.
-
-### Seeing the stitch plan for selected objects
-
-If you have one or more objects selected when you run the **Embroider** extension, only those objects will be embroidered. This can be useful to help you fine-tune just one small section of your design.
-
-### Embroidery Parameters
-When you run **Embroider**, you'll have the option to specify a few parameters like stitch length, fill stitch row spacing, etc. These are used as defaults for all objects in your design. You can override these parameters and set many more using the **Embroidery -> Params** extension.
-
-This extension gives you an interface to control many aspects of the stitching of each object individually. To use it, first select one or more objects. Parameters will be applied to them all as a group. If the selected objects already have parameters set, these settings will be pre-loaded into the interface.
-
-Parameters are stored in your SVG file as additional attributes on the XML objects. You can view these attributes using Inkscape's built-in XML editor panel, but you shouldn't actually need to do this during normal usage. Inkscape ignores attributes that it doesn't know, so these attributes will be saved right along with your SVG file. Note that other SVG programs may *not* retain these attributes, so be careful!
-
-I recommend avoiding dependence on the default settings specified in the **Embroider** extension's settings window. In fact, I bypass it entirely by binding a keystroke (ctrl+e) to "Embroider (no preferences)" in Inkscape's settings. This way, I can quickly see the stitch plan just by pressing the keystroke. I also bind a keystroke to **Params** so that I can quickly view and change settings for each object.
-
-### Sidenote on extensions
-**Params** is a bit weird, in that the dialog is produced by an entirely separate program (the extension) rather than Inkscape itself. This is due to the way Inkscape structures extensions. I wish ink/stitch could have deeper integration into Inkscape's user interface, but it's currently not possible. This is the price we pay for not having to write an entire vector graphics editor program :)
-
-Another issue is that Inkscape has a memory leak related to extensions. The more times you run an extension, the more memory Inkscape uses and the slower it gets. I periodically save my SVG file, close Inkscape, and restart it to work around this issue. See above re: putting up with this kind of hassle so as not to have a to implement an entire vector graphics editor. Hopefully they'll fix this bug soon.
-
-### AutoFill
-
-AutoFill is the default method for generating fill stitching. To use it, create a closed path in Inskcape and add a fill color. This algorithm works for complex shapes with or without holes.
-
-ink/stitch will break the shape up into sections that it can embroider at once using back-and-forth rows of stitches. It then adds straight-stitching between sections until it's filled in the entire design. The staggered pattern of stitches is continued seamlessly between sections, so the end result doesn't appear to have any breaks. When moving from one section to the next, it generates running stitching along the border of the shape.
-
-
-#### AutoFill parameters
-
-Using the **Params** extension, you can set these parameters:
-
-* **angle**: The angle of the rows of stitches, in degrees. 0 is horizontal, and the angle increases in a counter-clockwise direction. Negative angles are allowed.
-* **row spacing**: distance between rows of stitches
-* **maximum stitch length**: the length of each stitch in a row. "Max" is because a shorter stitch may be used at the start or end of a row.
-* **running stitch length**: length of stitches around the outline of the fill region used when moving from section to section
-* **staggers**: stitches are staggered so that neighboring rows of stitches don't all fall in the same column (which would create a distracting valley effect). Setting this dictates how many rows apart the stitches will be before they fall in the same column position.
-
-#### AutoFill Underlay
-
-By default, AutoFill will cover the shape with one layer of stitches. In almost all cases, this won't look any good. The individual stitches will sink into the fabric (even if it's thin) and the fill will appear sparse. The fabric may even stick up between rows.
-
-To solve this, you need underlay: an initial layer of stitches that hold up the final stitches. Underlay for fill stitch it's usually comprised of fill stitching 90 degrees offset from the final fill (called "top stitching"). The row spacing should be much wider than in the top stitching. The goal is to flatten out the fabric and give the top stitches "rails" to sit on.
-
-In **Params**, you'll see an underlay tab next to the AutoFill tab. Enable it by checking the box. The default settings should be good enough for most cases: 90 degrees offset and row spacing 3x the spacing of the top stitching.
-
-### Manual Fill
-
-Manual Fill is the old mode from before I figured out how to implement automatic fill routing. In some cases, AutoFill may not be an option, such as when the running stitches between sections are not acceptable for your design. Usually, fill region edges are covered over by satin, but not always.
-
-In manual fill, the extension will still break up the shape into sections, each of which can be embroidered in one go. Then these sections will be fill-stitched one at a time, jumping directly between sections. You'll almost certainly want to break your shape up into smaller shapes and connect then using running stitches (described below). It's a painstaking process, made moreso because you'll need to do it twice: once for the underlay and again for the top stitching.
-
-The **flip** option can help you with routing your stitch path. When you enable **flip**, stitching goes from right-to-left instead of left-to-right. Using **flip** and rotating 180 additional degrees (by adding or subtracting 180 from **angle**), you can cause fill stitching for a given shape to start from any of the four possible corners.
-
-
-### Running Stitch
-
-Running stitch can be created by setting a dashed stroke on a path. Any kind of dashes will do the job, and the stroke width is irrelevant. ink/stitch will create stitches along the path using the stroke width you specify.
-
-In order to avoid rounding corners, ash extra stitch will be added at the point of any sharp corners.
-
-The **repeats** parameter says how many times time run down and back song the path. An odd number of repeats means that the stitches will end at the end of the path, while an even number means that stitching will return to the start of the path. The default is one repeat; that is, just traveling once from the start to the end of the path.
-
-If an object consists of multiple paths, they will be stitched in order with a jump between each.
-
-### Simple Satin
+Ink/Stitch aims to be a full-fledged embroidery digitizing platform based entirely on free, open source software. Our goal is to be approachable for hobbyists while also providing the power needed by professional digitizers.
-A line without dashes will result in satin stitching. The width of the satin will be dictated by the stroke width. (For historical reasons, a stroke width less than 0.5 pixels will result in running stitch instead).
+Want to learn more?
-This is "simple satin": **Embroider** will plot zig-zags to the left and right of the line from start to end, but it won't do anything special around curves and corners. Sharper curves and corners will result in sparse stitching around the outside of the curve and dense stitching around the i. T
+* Check out our list of [features](https://inkstitch.org/features/)
+* [Quick Install](https://inkstitch.org/docs/install/) on Linux and Windows (Mac support in the works!)
+* See some [photos](https://inkstitch.org/tutorials/inspiration/lexelby/) showing what Ink/Stitch can do
+* Watch some [videos](https://inkstitch.org/tutorials/video/) of Ink/Stitch in action
+* ...and lots more on our [website](https://inkstitch.org)
-This won't look good and may even poke holes in the insides of corners. I avoid using plain satin entirely; it's just kept in for backward compatibility. It'll probably work fine for straight lines.
+# Background and Philosophy
-### Satin Column
+_by @lexelby, an Ink/Stitch programmer_
-Satin Column mode gives you much greater control over how the satin is generated. You define a satin column using a shape made of two mostly-parallel lines. **Embroider** will draw zig-zags back and forth between the two lines. You can vary the thickness of the column as you like.
-
-The two paths must have the same number of points. This means that each path will be made up of an equal number of Bezier curves. Each pair of points acts as a "checkpoint": **Embroider** will ensure that a "zag" ends up going from one point to the other.
-
-**Embroider** considers each pair of Bezier curves, one at a time. It picks the longest if the two and determines how many zig-zags will be necessary to satisfy the **zig-zag spacing** setting. This makes it so that the outside of a curve will never have sparse stitching like with simple satin.
-
-However, this does mean that the inside of a curve will have a higher stitch density than you specified. Be careful how you design sharp curves, because **stitching at too high a density may poke a hole in the fabric**!
-
-To avoid this issue, transition your stitching to go around the corner at an angle, like this:
-
-Some embroidery design programs solve this problem differently. They modify the satin such that some stitches on the inside corner don't go all the way to the edge, to avoid having the make penetrate the fabric too many times in the same spot. I haven't gotten around to implementing that yet. Pull requests welcome!
-
-Satin Column supports these settings:
-
-* **zig-zag spacing**: the peak-to-peak distance between zig-zags.
-* **pull compensation**: Satin stitches pull the fabric together, resulting in a column narrower than you draw in Inkscape. This setting expands each pair of needle penetrations outward from the center of the satin column. You'll have to determine experimentally how much compensation you need for your combination of fabric, thread, and stabilizer.
-
-Satin Column also supports three kinds of underlay, of which you can use any or all simultaneously. I use the terms defined in [this excellent article](http://www.mrxstitch.com/underlay-what-lies-beneath-machine-embroidery/) on satin column design.
-
-#### Center Walk Underlay
-
-This is a row of running stitch down the center of the column and back. This may be all you need for thin satin columns. You can also use it as a base for more elaborate underlay.
-
-#### Contour Underlay
-
-This is a row of running stitch up one side of the column and back down the other. The rows are set in from the edge of the column by an amount you specify. For small or medium width satin, this may serve well enough by itself.
-
-#### Zig-Zag Underlay
-
-This is essentially a lower-density satin stitch sewn to the end of the column and back to the start. Added with contour underlay, you get the "German Underlay" mentioned in the article linked above. For wide columns or challenging fabrics, you can use all three underlay types together.
-
-
-## Workflow
-
-Here's how I use ink/stitch to design embroidery patterns.
-
-### Pixels Per Millimeter
-
-My embroidery machine (a Brother SE400) can handle patterns up to 10cm x 10cm (about 4in x 4in). Most machine embroidery design advice articles I've read talk in terms of millimeters, so that's what I work in.
-
-My machine can (theoretically) position the needle with an accuracy of a tenth of a millimeter. The Brother PES format cannot encode a position any more precisely than this. In practice, even if a machine had finer accuracy than this, the realities of sewing on real fabric, even with the best stabilizer, mean that you can't get any more accurate than this (and you shouldn't bother trying).
-
-Previously, I used a nonstandard resolution of 10 pixels per millimeter, and this was hardcoded into ink/stitch. Now, **ink/stitch respects Inkscape's default of 96dpi**.
-
-### Step 1: Sketch design or use an image
-
-First, I get an idea for what I want my finished product to look like. If I'm basing my design off an existing picture or graphic, I load it into Inkscape in its own layer. Some graphics are amenable to Inkscape's auto-tracing feature, especially if I simplify the image in GIMP first.
-
-After auto-tracing, I clean up the vector shapes, using "Simplify" and deleting nodes by hand when possible. My goal is to use as few Bezier curves as reasonably possible to represent the image.
-
-If I need to trace an image by hand, I usually use the freehand drawing tool. This tool creates paths with a lot of Bezier nodes, so again, I'll simplify the curves as much as possible.
-
-Working with an existing SVG image can save a ton of time, so consider using Google image search with the filter set to SVG.
-
-For text, choose a font carefully. It's quite hard to make satin look good when it's 1mm wide or narrower. Sans-serif fonts tend to be the easiest. For text smaller than 4mm tall, you'll have a very difficult time making lowercase letters look good, so consider block-caps. Cursive/script fonts can work well, but it's not going to be as easy as you think. I find that I spend the most time on text by far.
-
-
-### Step 2: Plan stitch path and color changes
-
-At this point, you'll have a vector graphic representation of your image. The next thing to do is to convert your vectors into the kind that **Embroider** understands and put them in the right order.
-
-When you're designing for embroidery machines that can't cut the thread mid-sew or switch colors automatically, you're going to want to optimize your stitch path to reduce or hide jump stitches and make minimal color changes. I also try to avoid stitching over jump stitches when possible, because it's a total pain to trim them by hand when you do.
-
-The order of stitching also affects how the fabric pulls and pushes. Each stitch will distort the fabric, and you'll need to take this into account and compensate accordingly. Look for articles on machine embroidery distortion for more info on this.
-
-### Step 3: create the embroidery vectors
-
-I make heavy use of layers and groups at this point. If I've traced an image, I'll leave it as the lowest layer and set it invisible in the Layers or Objects palette. Any layer, group, or vector shape that is set invisible will be ignored by **Embroider**.
-
-I keep my initial traced vectors in their own layer and use them as a reference when designing embroidery vectors. I copy and paste then as necessary into a higher layer and work with the copies.
-
-I use only AutoFill and Satin Columns in my designs. I begin converting filled areas to AutoFill regions. Each time I create an AutoFill shape, I set its parameters using **Params**. Then I select it and run **Embroider**, which will cause it to show a stitch plan for just the selected object(s).
-
-I examine the resulting stitch plan using the node editor tool. Each vertex is a single stitch; the needle will penetrate the fabric and interlock with the bobbin thread at this point. Once I'm done examining the stitch plan, I Undo the **Embroider** operation to remove the stitch plan and make my vectors visible again. Then I make any changes necessary, re-run **Embroider**, and repeat until it looks right.
-
-At this point, I save my SVG file. If Inkscape is starting to become sluggish (due to the memory leak described above), I'll restart it before continuing.
-
-Next, I work on Satins. Remember that a Satin Column is defined by two lines that run along the edges of the column. It's usually a good idea to run satin along the outside border of a fill region. Inkscape makes this easy. I copy and paste the shape from the traced vectors, then disable Fill and enable Stroke. I set the stroke width to my desired satin width. Finally, I use the "Stroke to Path" option to convert just the stroke into its own path.
-
-At this point, it's necessary to cut the paths so that they aren't a continuous loop. The cut will also tell **Embroider** where to start stitching from. Add a point at the desired cut location by double-clicking on the path with the Node Editor tool active. Cut at this point by selecting at and pressing shift+b. Repeat for the second path.
-
-Now you've got an object made of two paths. They need to be going on the same direction for Satin Column to work. You can tell what direction the path goes in by enabling direction indicators in Inkscape's preferences. To reverse one of the paths, select one of its points and choose "Reverse Path". I bind this to ctrl+r in Inkscape's preferences.
-
-By now, it's likely that the two paths in the object have an unequal number of nodes. As described above, a Satin Column is made of consecutive pairs of points on the two paths. You have a couple of techniques available to make your nodes line up in pairs:
-
-* simplify the shape (control+L)
-* delete extra nodes
-* add more nodes
-* joining nodes
-
-I usually Simplify first if necessary to reduce the path to a manageable number of nodes. Remember that machine embroidery is fairly imprecise and your final product will not have the incredibly fine details that you see on your screen, so simplifying can often be acceptable even if it changes the path.
-
-Next, I _try_ to delete nodes or join. Inkscape will attempt to manipulate the neighboring nodes as necessary to keep the path the same, but I find that it's not particularly good at this. Instead of deleting a troublesome point, it can often work better to simply add a matching point on the other path.
-
-Finally, I run *Embroider* with the path selected and examine the output. I add, remove, and adjust points as necessary to make my satin look nice.
-
-You may find that you get the dreaded error, "object <name> has two paths with an unequal number of points". This can be confusing because it may _look_ like your paths have the same number of points. Usually this is because of duplicate points: multiple points with the exact same coordinates or very similar coordinates. To find them, I drag-select each point in turn, examining the bottom status bar. It will tell me how many points I've selected. If it looks like I've selected just one but Inkscape says I've selected 3, then it's likely that I've found my culprit.
-
-Often just pressing shift+J (join nodes) will eliminate the extra points without modifying the shape. Sometimes it won't, and in cases like that, I've had luck with adding extra points on either side of the "cluster", then delete the "cluster". The extra points anchor the shape and disallow Inkscape from messing it up. Then it may be possible to delete the added points, or I just add points to the other path to match with them.
-
-### Step 4: Ordering
-
-Once I've created all of my vectors and test-embroidered them individually, it's time to put everything in the right order. This is where the Objects tool from the latest development version of Inkscape (described above) comes in useful. Because my embroidery machine can neither trim threads nor switch colors mid-sew, I optimize my order to minimize color changes and reduce or hide jump-stitches.
-
-*Embroider* will stitch objects in exactly the order they appear in your SVG document, from lowest to highest in stacking order. If the distance between two objects is long, *Embroider* will add a jump-stitch between them automatically. It uses the color of the object to determine thread color, so changes in color from one object to the next will result in a thread-change instruction being added to the embroidery output file.
-
-Inkscape gives you the ability to raise and lower objects in the stacking order using the PageUp and PageDown keys. However, it seems to be unwilling to give the user complete control over the stacking order. I think this has to do with whether objects overlap: if A and B don't overlap, Inkscape doesn't care how they're stacked in the SVG file and it sometimes won't let you reorder them.
-
-To solve this, I created the *Reorder* extension. To use it, hold down the shift key and select objects one at a time in the order you'd like them to appear in the SVG file and run *Reorder*. *Reorder* will remove the selected objects from the SVG XML tree and then re-add them at the location of the first-selected object, in the order you selected them.
-
-You can also manually manipulate the underlying SVG XML structure by using Inkscape's XML Editor pane. Its "Raise" and "Lower" buttons directly manipulate the order of XML tags in the SVG file and are not subject to the same limitations as PageUp and PageDown. Note that the ordering of XML tags in the XML Editor tool is the _reverse_ of the order of objects in the Objects tool.
-
-### Step 4: Render to a file format supported by your machine
-
-Once I've got everything in the right order, I deselect all objects and run *Embroider* again. This will embroider all visible objects in the document. In the extension settings, select a file format supported by your machine. Most machines can support DST, and some Brother machines prefer PES.
-
-*Embroider* will create a file in the specified output directory named after your SVG file, but with the extension changed to `.DST`, `.PES`, or whatever format you selected. It will back up any existing file there, storing up to 5 old copies of each file.
-
-### Step 5: Convert to PES and upload
-
-Transfer the design to your machine in whatever manner is appropriate. My machine exposes itself as a (tiny) USB thumb drive, so I can upload directly.
-
-### Step 6: Test-sew
-
-I've never gotten an embroidery file correct on the first try. There's always room for improvement! To test out my design, I prepare a test piece of fabric that matches my final fabric as closely as possible. I use the same stabilizer and the exact same fabric if possible. For t-shirts, I try to find a similar fabric (usually knit). Knits need a lot of stabilization.
-
-I sew out the design, watching the machine to make sure that there aren't any surprises. I'm watching for gaps that indicate that the fabric has been distorted. I'm also watching for areas where stitches are piling up too closely and the machine is having trouble sewing, which indicates that the stitch density is too high. Finally, of course, I'm watching in giddy anticipation to see my design for the first time! :)
+I received a really wonderful christmas gift for a geeky programmer hacker: an [embroidery machine](http://www.brother-usa.com/homesewing/ModelDetail.aspx?ProductID=SE400). It's pretty much a CNC thread-bot... I just had to figure out how to design programs for it. The problem is, **all free embroidery design software seemed to be terrible**, especially when you add in the requirement of being able to run in Linux, my OS of choice.
-### Step 7+: iterate
+I started off hacking on [inkscape-embroidery](http://www.jonh.net/~jonh/inkscape-embroidery/). It had some of the basic capabilities I needed, and I saw a lot of potential. I love the idea of using an existing, ultra-powerful SVG editor as the basis for an embroidery design suite.
-Then I go back and tweak my design. Hopefully it only takes a few tries to get it how I want it. Once I'm done, I copy the final embroidery file from my output directory, just to avoid accidentally overwriting it in the future.
+Things took off from there. I continued adding features as I needed them, and by this point, very little if any of the original code remains.
+The goal of Ink/Stitch is to provide a powerful embroidery digitizing platform for everyone **completely free**. I want to open up the field of embroidery design, making it approachable even for those who can't spend hundreds or thousands of dollars on software. And I want folks like me, who love to combine code with art, to have an open, extensible, and approachable platform to hack on.
diff --git a/bin/build-dist b/bin/build-dist
index a1fa82d9..4d73313a 100755
--- a/bin/build-dist
+++ b/bin/build-dist
@@ -34,26 +34,23 @@ pyinstaller_args+="-p inkscape-0.92.2/share/extensions "
# output useful debugging info that helps us trace library dependency issues
pyinstaller_args+="--log-level DEBUG "
-mkdir -p dist/inkstitch/bin
-for extension in "$@"; do
- if [ "$BUILD" = "windows" ]; then
- wine c:\\Python\\scripts\\pyinstaller.exe $pyinstaller_args ${extension}.py
- else
- # without the LD_LIBRARY_PATH, it seems that pyinstaller can't find all of
- # wxpython's shared libraries
- LD_LIBRARY_PATH="${site_packages}/wx" pyinstaller $pyinstaller_args ${extension}.py;
- fi
-
- # By default, pyinstaller will treat each of ink/stitch's extensions
- # separately. This means it packages a lot of the same shared libraries (like
- # wxPython) multiple times. Turns out that we can just copy the contents of
- # the directories pyinstaller creates into one and it works fine, eliminating
- # the duplication. This significantly decreases the size of the inkstitch
- # tarball/zip.
- cp -a dist/${extension}/* dist/inkstitch/bin
- rm -rf dist/${extension}
-
- # Inkscape doesn't let us run native binaries as extensions(?!). Instead we
- # add this stub script which executes the binaries that pyinstaller creates.
- cp stub.py dist/${extension}.py
-done
+if [ "$BUILD" = "windows" ]; then
+ wine c:\\Python\\scripts\\pyinstaller.exe $pyinstaller_args inkstitch.py
+else
+ # without the LD_LIBRARY_PATH, it seems that pyinstaller can't find all of
+ # wxpython's shared libraries
+ LD_LIBRARY_PATH="${site_packages}/wx" pyinstaller $pyinstaller_args --strip inkstitch.py;
+fi
+
+# pyinstaller put a whole mess of libraries under dist/inkstitch. We'd like
+# to put some more user-accessible stuff like examples and palettes in
+# folders under inkstitch/ (see ../Makefile) so let's move the pyinstaller
+# stuff into its own dir.
+shopt -s dotglob
+mkdir dist/bin
+mv dist/inkstitch/* dist/bin
+mv dist/bin dist/inkstitch
+
+# Inkscape doesn't let us run native binaries as extensions(?!). Instead we
+# add this stub script which executes the binary that pyinstaller creates.
+cp stub.py dist/inkstitch.py
diff --git a/bin/gen-input-inx b/bin/gen-input-inx
index 918adfb9..6351d062 100755
--- a/bin/gen-input-inx
+++ b/bin/gen-input-inx
@@ -21,9 +21,9 @@ def libembroidery_input_formats():
while(curFormat):
extension = embFormat_extension(curFormat)
description = embFormat_description(curFormat)
- writerState = embFormat_readerState(curFormat)
+ reader_state = embFormat_readerState(curFormat)
- if writerState.strip() and embFormat_type(curFormat) != EMBFORMAT_OBJECTONLY:
+ if reader_state.strip() and embFormat_type(curFormat) != EMBFORMAT_OBJECTONLY:
# extension includes the dot, so we'll remove it
yield extension[1:], description
@@ -37,7 +37,7 @@ def main():
for format, description in libembroidery_input_formats():
inx = template.render(format=format, description=description)
- with open("inx/embroider_input_%s.inx" % format.upper(), 'w') as inx_file:
+ with open("inx/inkstitch_input_%s.inx" % format.upper(), 'w') as inx_file:
inx_file.write(inx)
diff --git a/bin/gen-output-inx b/bin/gen-output-inx
new file mode 100755
index 00000000..f167dbee
--- /dev/null
+++ b/bin/gen-output-inx
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+
+import sys, os
+from os.path import dirname
+from libembroidery import *
+from jinja2 import Environment, FileSystemLoader, select_autoescape
+
+
+def build_environment():
+ template_dir = os.path.join(dirname(dirname(os.path.realpath(__file__))), "templates")
+
+ return Environment(
+ loader = FileSystemLoader(template_dir),
+ autoescape = True
+ )
+
+
+def libembroidery_output_formats():
+ formatList = embFormatList_create()
+ curFormat = formatList
+ while(curFormat):
+ extension = embFormat_extension(curFormat)
+ description = embFormat_description(curFormat)
+ writer_state = embFormat_writerState(curFormat)
+
+ if writer_state.strip() and embFormat_type(curFormat) != EMBFORMAT_OBJECTONLY:
+ # extension includes the dot, so we'll remove it
+ yield extension[1:], description
+
+ curFormat = curFormat.next
+
+
+def main():
+ env = build_environment()
+ template = env.get_template('embroider_output.inx')
+
+ for format, description in libembroidery_output_formats():
+ inx = template.render(format=format, description=description)
+
+ with open("inx/inkstitch_output_%s.inx" % format.upper(), 'w') as inx_file:
+ inx_file.write(inx)
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/bin/gen-zip-inx b/bin/gen-zip-inx
new file mode 100755
index 00000000..5fbc8f1e
--- /dev/null
+++ b/bin/gen-zip-inx
@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+
+import sys, os
+from os.path import dirname
+from libembroidery import *
+from jinja2 import Environment, FileSystemLoader, select_autoescape
+
+
+def build_environment():
+ template_dir = os.path.join(dirname(dirname(os.path.realpath(__file__))), "templates")
+
+ return Environment(
+ loader = FileSystemLoader(template_dir),
+ autoescape = True
+ )
+
+
+def libembroidery_output_formats():
+ formatList = embFormatList_create()
+ curFormat = formatList
+ while(curFormat):
+ extension = embFormat_extension(curFormat)
+ description = embFormat_description(curFormat)
+ writer_state = embFormat_writerState(curFormat)
+
+ if writer_state.strip() and embFormat_type(curFormat) != EMBFORMAT_OBJECTONLY:
+ # extension includes the dot, so we'll remove it
+ yield extension[1:], description
+
+ curFormat = curFormat.next
+
+
+def main():
+ env = build_environment()
+ template = env.get_template('embroider_zip_output.inx')
+
+ inx = template.render(formats=libembroidery_output_formats())
+
+ with open("inx/inkstitch_output_ZIP.inx", 'w') as inx_file:
+ inx_file.write(inx)
+
+
+if __name__ == "__main__":
+ sys.exit(main())
diff --git a/embroider_input.py b/embroider_input.py
deleted file mode 100644
index 04d79d4f..00000000
--- a/embroider_input.py
+++ /dev/null
@@ -1,61 +0,0 @@
-import sys
-import os
-from libembroidery import *
-from inkex import etree
-import inkex
-from inkstitch import PIXELS_PER_MM, INKSCAPE_LABEL, _
-from inkstitch.stitch_plan import StitchPlan
-from inkstitch.svg import render_stitch_plan
-
-
-def pattern_stitches(pattern):
- stitch_pointer = pattern.stitchList
- while stitch_pointer:
- yield stitch_pointer.stitch
- stitch_pointer = stitch_pointer.next
-
-
-def main(embroidery_file):
- pattern = embPattern_create()
- embPattern_read(pattern, embroidery_file)
- embPattern_flipVertical(pattern)
-
- stitch_plan = StitchPlan()
- color_block = None
- current_color = None
-
- for stitch in pattern_stitches(pattern):
- if stitch.color != current_color:
- thread = embThreadList_getAt(pattern.threadList, stitch.color)
- color = thread.color
- color_block = stitch_plan.new_color_block((color.r, color.g, color.b))
- current_color = stitch.color
-
- if not stitch.flags & END:
- color_block.add_stitch(stitch.xx * PIXELS_PER_MM, stitch.yy * PIXELS_PER_MM,
- jump=stitch.flags & JUMP,
- stop=stitch.flags & STOP,
- trim=stitch.flags & TRIM)
-
- extents = stitch_plan.extents
- svg = etree.Element("svg", nsmap=inkex.NSS, attrib=
- {
- "width": str(extents[0] * 2),
- "height": str(extents[1] * 2),
- "viewBox": "0 0 %s %s" % (extents[0] * 2, extents[1] * 2),
- })
- render_stitch_plan(svg, stitch_plan)
-
- # rename the Stitch Plan layer so that it doesn't get overwritten by Embroider
- layer = svg.find(".//*[@id='__inkstitch_stitch_plan__']")
- layer.set(INKSCAPE_LABEL, os.path.basename(embroidery_file))
- layer.attrib.pop('id')
-
- # Shift the design so that its origin is at the center of the canvas
- # Note: this is NOT the same as centering the design in the canvas!
- layer.set('transform', 'translate(%s,%s)' % (extents[0], extents[1]))
-
- print etree.tostring(svg)
-
-if __name__ == '__main__':
- sys.exit(main(*sys.argv[1:]))
diff --git a/images/examples/Bfly FSL.svg b/images/examples/Bfly FSL.svg
new file mode 100644
index 00000000..9e528f1e
--- /dev/null
+++ b/images/examples/Bfly FSL.svg
@@ -0,0 +1,837 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:inkstitch="http://inkstitch.org/namespace"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="100mm"
+ height="100mm"
+ viewBox="0 0 100 100"
+ version="1.1"
+ id="svg11604"
+ inkscape:version="0.92.3 (2405546, 2018-03-11)"
+ sodipodi:docname="Bfly FSL.svg">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#848484"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4142136"
+ inkscape:cx="280.92306"
+ inkscape:cy="155.27797"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:snap-global="false"
+ inkscape:window-width="1920"
+ inkscape:window-height="1055"
+ inkscape:window-x="0"
+ inkscape:window-y="8"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <defs
+ id="defs11598" />
+ <metadata
+ id="metadata11601">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evan West at Wild West Designs</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:rights>
+ <cc:Agent>
+ <dc:title>License to Use</dc:title>
+ </cc:Agent>
+ </dc:rights>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>Wild West Designs</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:source>www.wildwestdesigns.biz</dc:source>
+ </cc:Work>
+ </rdf:RDF>
+ <inkstitch:client-overview-transform>&quot;matrix(5, 0, 0, 5, -598.975, -235.975)&quot;</inkstitch:client-overview-transform>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer3"
+ inkscape:label="Instructions"
+ sodipodi:insensitive="true"
+ style="display:inline">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:1.25;font-family:'A&amp;S Sarsaparilla Ornamental';-inkscape-font-specification:'A&amp;S Sarsaparilla Ornamental';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="39.158333"
+ y="105.55624"
+ id="text4721"
+ sodipodi:insensitive="true"><tspan
+ sodipodi:role="line"
+ id="tspan4719"
+ x="39.158333"
+ y="105.55624"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';stroke-width:0.26458332px">Instructions</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="0.52916664"
+ y="115.02882"
+ id="text4729"
+ sodipodi:insensitive="true"><tspan
+ sodipodi:role="line"
+ id="tspan4727"
+ x="0.52916664"
+ y="115.02882"
+ style="stroke-width:0.26458332px">1. For free standing lace, the areas that</tspan><tspan
+ sodipodi:role="line"
+ x="0.52916664"
+ y="121.20242"
+ style="stroke-width:0.26458332px"
+ id="tspan4731">would be for traditional fills are going to</tspan><tspan
+ sodipodi:role="line"
+ x="0.52916664"
+ y="127.37604"
+ style="stroke-width:0.26458332px"
+ id="tspan4733">be for 2 layers of loose fill with opposing</tspan><tspan
+ sodipodi:role="line"
+ x="0.52916664"
+ y="133.54965"
+ style="stroke-width:0.26458332px"
+ id="tspan4735">angles. For instance, one loose fill would</tspan><tspan
+ sodipodi:role="line"
+ x="0.52916664"
+ y="139.72327"
+ style="stroke-width:0.26458332px"
+ id="tspan4737">have 0 degree angle and the second </tspan><tspan
+ sodipodi:role="line"
+ x="0.52916664"
+ y="145.89687"
+ style="stroke-width:0.26458332px"
+ id="tspan4739">layer would have 90 degree angle.</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="0.79374999"
+ y="156.32686"
+ id="text4743"
+ sodipodi:insensitive="true"><tspan
+ sodipodi:role="line"
+ id="tspan4741"
+ x="0.79374999"
+ y="156.32686"
+ style="stroke-width:0.26458332px">2. Experiment with different density</tspan><tspan
+ sodipodi:role="line"
+ x="0.79374999"
+ y="162.50047"
+ style="stroke-width:0.26458332px"
+ id="tspan4745">levels and stitch angles to attach </tspan><tspan
+ sodipodi:role="line"
+ x="0.79374999"
+ y="168.67407"
+ style="stroke-width:0.26458332px"
+ id="tspan4747">different looks and affects.</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="0"
+ y="178.14665"
+ id="text4751"
+ sodipodi:insensitive="true"><tspan
+ sodipodi:role="line"
+ id="tspan4749"
+ x="0"
+ y="178.14665"
+ style="stroke-width:0.26458332px">3. For detail work and outline work, use </tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="184.32027"
+ style="stroke-width:0.26458332px"
+ id="tspan4753">a decent size satin stitch. Satin stitch</tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="190.49387"
+ style="stroke-width:0.26458332px"
+ id="tspan4755">outlines are required as that helps &quot;seal&quot;</tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="196.66748"
+ style="stroke-width:0.26458332px"
+ id="tspan4757">the edges and keep the design together</tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="202.84109"
+ style="stroke-width:0.26458332px"
+ id="tspan4759">after the solvy stabilizer is removed.</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="0"
+ y="213.27107"
+ id="text4763"
+ sodipodi:insensitive="true"><tspan
+ sodipodi:role="line"
+ x="0"
+ y="213.27107"
+ style="stroke-width:0.26458332px"
+ id="tspan4765">4. For the actual embroidery, use solvy</tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="219.44469"
+ style="stroke-width:0.26458332px"
+ id="tspan4771">and I prefer heavy weight solvy, usually </tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="225.61829"
+ style="stroke-width:0.26458332px"
+ id="tspan4775">with two layers of stabilizer. Depending</tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="231.7919"
+ style="stroke-width:0.26458332px"
+ id="tspan4777">on the brand, may still have to use more</tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="237.96552"
+ style="stroke-width:0.26458332px"
+ id="tspan4779">even with it being heavy weight. Just </tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="244.13913"
+ style="stroke-width:0.26458332px"
+ id="tspan4781">have to experiement to find out what is</tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="250.31274"
+ style="stroke-width:0.26458332px"
+ id="tspan4783">needed.</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="0"
+ y="259.78531"
+ id="text4787"
+ sodipodi:insensitive="true"><tspan
+ sodipodi:role="line"
+ id="tspan4785"
+ x="0"
+ y="259.78531"
+ style="stroke-width:0.26458332px">5. Following the instructions on the </tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="265.95892"
+ style="stroke-width:0.26458332px"
+ id="tspan4789">stabilizer for removal. I tend to like to </tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="272.13254"
+ style="stroke-width:0.26458332px"
+ id="tspan4791">have a little of the stabilizer left and to </tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="278.30615"
+ style="stroke-width:0.26458332px"
+ id="tspan4793">try not to remove all of it. This allows for</tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="284.47974"
+ style="stroke-width:0.26458332px"
+ id="tspan4795">some stiffness to remain in the finished</tspan><tspan
+ sodipodi:role="line"
+ x="0"
+ y="290.65335"
+ style="stroke-width:0.26458332px"
+ id="tspan4797">product.</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="0.26458332"
+ y="301.08334"
+ id="text4801"
+ sodipodi:insensitive="true"><tspan
+ sodipodi:role="line"
+ id="tspan4799"
+ x="0.26458332"
+ y="301.08334"
+ style="stroke-width:0.26458332px">6. Enjoy your new FSL ornament.</tspan></text>
+ </g>
+ <g
+ style="display:inline"
+ transform="translate(0,-197)"
+ id="layer1"
+ inkscape:groupmode="layer"
+ inkscape:label="Butterfly Lace">
+ <path
+ embroider_row_spacing_mm="1.8"
+ embroider_angle="45"
+ embroider_max_stitch_length_mm="4"
+ inkscape:connector-curvature="0"
+ id="path1785"
+ d="m 35.695692,239.89609 c 0,0 -17.67039,-8.69345 -25.51339,-7.843 0,0 -5.2916696,0.28348 -7.1815496,6.52009 0,0 -1.03943,7.08705 4.44122,16.63095 0,0 1.51191,2.55134 5.4806596,1.98437 0,0 10.58333,-2.55133 13.89062,-3.68526 0,0 7.37054,-1.79539 9.73289,-3.2128 0,0 -1.7009,-5.48066 -0.85045,-10.39435 z"
+ style="display:inline;fill:#191d1f;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 4.4181624,235.50212 c 0,0 -1.55915,2.55134 -1.5119,4.63021 0,0 0.33073,6.37835 2.22061,10.2526 0,0 1.46465,4.34673 3.77976,6.18936"
+ id="path1156"
+ inkscape:connector-curvature="0" />
+ <path
+ embroider_row_spacing_mm="1.8"
+ embroider_angle="135"
+ embroider_max_stitch_length_mm="4"
+ inkscape:connector-curvature="0"
+ id="path1785-7"
+ d="m 35.695692,239.89609 c 0,0 -17.67038,-8.69345 -25.51339,-7.843 0,0 -5.2916696,0.28348 -7.1815496,6.52009 0,0 -1.03943,7.08705 4.44122,16.63095 0,0 1.51191,2.55134 5.4806596,1.98437 0,0 10.58333,-2.55133 13.89062,-3.68526 0,0 7.37054,-1.79539 9.73289,-3.2128 0,0 -1.70089,-5.48066 -0.85045,-10.39435 z"
+ style="display:inline;fill:#191d1f;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0"
+ d="m 8.6861324,256.4076 c 0,0 2.0713396,1.33635 5.1449396,0.60135 0,0 9.95579,-2.67269 11.5594,-3.07359 0,0 9.08717,-2.40543 11.02487,-3.60814"
+ id="path11197"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path2086"
+ d="m 34.939742,251.04639 1.6064,-0.85045 0.0945,1.88989 v 0.66145 l -1.51191,0.66146 -3.40178,1.51191 -4.53572,1.79538 -8.88244,2.26786 -5.95312,0.66146 -2.5513396,0.18899"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0;stroke-opacity:1"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_row_spacing_mm="1.8"
+ embroider_angle="45"
+ embroider_max_stitch_length_mm="4"
+ inkscape:connector-curvature="0"
+ id="path2088"
+ d="m 9.3318524,259.88158 5.5751496,14.78832 c 0,0 1.08668,2.26786 5.19717,1.27567 0,0 2.55134,-1.13392 5.05544,-3.26004 0,0 4.34672,-4.11049 5.81138,-5.6224 l 7.9375,-8.92969 -2.22061,-5.00818 -0.75595,-0.0945 -2.92932,1.32292 c 0,0 -4.11049,1.70089 -4.7247,1.93713 0,0 -1.74814,0.66145 -2.4096,0.89769 0,0 -9.35491,1.98437 -11.38653,2.17336 z"
+ style="display:inline;fill:#191d1f;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="ccccccccccccc" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path1318"
+ d="m 9.3318524,259.88158 c 0,0 5.1971696,13.79613 5.5278996,14.74108 0,0 0.61422,0.94494 1.88989,1.5119"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ embroider_row_spacing_mm="1.8"
+ embroider_angle="135"
+ embroider_max_stitch_length_mm="4"
+ inkscape:connector-curvature="0"
+ id="path2088-9"
+ d="m 9.3318524,259.88158 5.5751496,14.78832 c 0,0 1.08668,2.26786 5.19717,1.27567 0,0 2.55134,-1.13392 5.05544,-3.26004 0,0 4.34672,-4.11049 5.81138,-5.6224 l 7.9375,-8.92969 -2.22061,-5.00818 -0.75596,-0.0945 -2.92931,1.32292 c 0,0 -4.11049,1.70089 -4.7247,1.93713 0,0 -1.74814,0.66145 -2.4096,0.89769 0,0 -9.35491,1.98437 -11.38653,2.17336 z"
+ style="display:inline;fill:#191d1f;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ sodipodi:nodetypes="ccccccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1320"
+ d="m 16.182672,275.85108 c 0,0 3.16555,0.99219 5.66964,-0.75596 0,0 5.57515,-4.29947 7.60677,-6.52008 0,0 4.77195,-5.24442 5.57515,-6.04762 0,0 3.63802,-4.20499 3.82701,-4.39398 0,0 2.92932,6.28386 3.77976,7.65402 0,0 4.29948,7.32329 5.7169,8.92969 0,0 0.85044,1.22842 1.32291,1.6064"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0;stroke-opacity:1"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_row_spacing_mm="1.1"
+ embroider_max_stitch_length_mm="4"
+ embroider_angle="180"
+ inkscape:connector-curvature="0"
+ id="path2411"
+ d="m 49.633562,276.37079 2.504104,-3.16554 c 0,0 3.54352,-5.05544 4.6302,-6.99257 0,0 2.88207,-5.14992 4.11049,-7.79575 0,0 2.36236,-4.86644 2.83483,-6.56734 0,0 1.13392,-4.7247 1.6064,-8.07924 0,0 0.42522,-2.50409 -0.18899,-4.8192 0,0 -0.66146,-3.21279 -2.12612,-4.53571 0,0 -2.88207,-2.50409 -6.89806,-1.46466 0,0 -2.59859,0.8032 -5.575154,3.35454 0,0 -3.40179,-3.44903 -5.52791,-2.97656 0,0 -3.827,-0.28349 -5.95312,1.46465 0,0 -1.98438,1.74815 -2.92932,4.20499 0,0 -0.89769,2.92931 -0.47247,6.99256 0,0 1.03944,6.4256 2.12612,9.49665 0,0 3.68527,8.40997 4.96094,10.53609 0,0 4.7247,8.07923 6.89806,10.34709 z"
+ style="display:inline;fill:#191d1f;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.633562,276.2763 c 0,0 -4.11049,-5.29166 -5.10267,-7.22879 0,0 -5.00819,-8.69345 -5.48066,-10.53609 0,0 -1.98438,-4.29948 -2.17336,-6.04762"
+ id="path2569"
+ inkscape:connector-curvature="0" />
+ <path
+ embroider_row_spacing_mm="1.1"
+ embroider_max_stitch_length_mm="4"
+ embroider_angle="90"
+ inkscape:connector-curvature="0"
+ id="path2411-2"
+ d="m 49.633562,276.37079 2.504104,-3.16555 c 0,0 3.54352,-5.05543 4.6302,-6.99256 0,0 2.88207,-5.14992 4.1105,-7.79575 0,0 2.36235,-4.86644 2.83482,-6.56734 0,0 1.13393,-4.7247 1.6064,-8.07924 0,0 0.42522,-2.50409 -0.18899,-4.8192 0,0 -0.66146,-3.21279 -2.12612,-4.53571 0,0 -2.88207,-2.50409 -6.89806,-1.46466 0,0 -2.59859,0.8032 -5.575154,3.35454 0,0 -3.40179,-3.44903 -5.52791,-2.97656 0,0 -3.827,-0.28349 -5.95312,1.46465 0,0 -1.98438,1.74814 -2.92932,4.20499 0,0 -0.89769,2.92931 -0.47247,6.99256 0,0 1.03944,6.4256 2.12612,9.49665 0,0 3.68527,8.40998 4.96094,10.53609 0,0 4.7247,8.07924 6.89806,10.34709 z"
+ style="display:inline;fill:#191d1f;fill-rule:evenodd;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path996"
+ d="m 37.443832,254.68441 -0.56696,-2.17336 -0.70871,-3.1183 -0.42522,-2.92932 -0.28348,-2.69308 0.14174,-2.50409 0.0472,-1.32292 -2.07887,-0.99219 -3.30729,-1.5119 -3.63802,-1.51191 -4.63021,-1.70089 -4.29948,-1.27567 -3.87426,-0.75595 -2.78757,-0.14174 -1.8898796,1.08668 -1.37017,1.70089 -0.61421,1.93713 0.0473,1.74814 0.8032,1.6064 1.46466,1.37016 1.6063996,0.66146 1.79538,-0.0473 1.74814,-0.99219 1.08668,-1.46466 0.0472,-1.55915 -0.7087,-1.37016 -1.08668,-0.56696 -0.81501,0.0118 -0.83864,0.29529 -0.68508,0.48428 -0.36616,0.72052 -0.10631,0.7087 0.0945,0.63784 0.38979,0.64964 0.53153,0.37798 0.63783,0.15355"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0;stroke-opacity:1"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 11.930442,232.1712 -3.7915796,0.24805 m 3.6616496,0.76777 -3.9569396,-0.36617 m 1.91351,1.14574 -2.27967,-0.6024 m 1.61821,1.39379 -2.31511,-0.73233 m 1.63003,2.16155 -2.17337,-0.53153 m 2.04344,1.77177 c -0.0472,0.0236 -2.23243,0.24804 -2.23243,0.24804 m 2.82301,1.13393 -2.46865,0.66146 m 3.14192,0.37798 -1.92531,1.64183 m 3.2127996,-0.63784 -1.3111096,1.91351 m 2.5277196,-1.5119 -0.21262,1.78357 m 1.63003,-2.05525 0.25986,1.81901 m 0.59058,-2.59858 1.18118,1.53553 m -0.63784,-2.26786 1.51191,0.59059 m -1.4056,-1.6064 1.68908,0.21261 m -1.85444,-1.05124 1.74814,-0.14175 m -2.29149,-0.38979 1.46466,-1.1103 m -2.35054,0.87407 c 0,-0.0473 0.50791,-1.47647 0.50791,-1.47647 m -1.28748,1.81901 -0.41341,-1.50009 m -0.21262,2.13793 c -0.0591,0 -1.18117,-0.79139 -1.18117,-0.79139 m 1.12212,1.70089 -1.41742,0.43703 m 1.64184,0.21262 -0.73233,0.73233 m 1.34654,-0.38979 -0.15355,0.92131 m 0.38978,-0.37797 c 0,0 -1.33472,0.0827 -1.87806,-1.24023 0,0 -0.43704,-0.99219 0.3071,-2.07887 0,0 0.73233,-1.08669 2.13793,-1.12212 0,0 1.3111,-0.0354 2.06706,1.02762 0,0 0.72051,0.88588 0.59058,2.06706 0,0 -0.0591,1.25205 -0.95675,2.19699 0,0 -0.86226,1.03943 -2.06706,1.32291 0,0 -2.1143,0.53153 -3.04743,-0.0354 0,0 -2.1733596,-0.6142 -3.1655496,-2.88206 0,0 -0.8032,-1.75995 -0.21261,-3.80339 0,0 0.49609,-1.73632 1.58277,-2.7167 l 0.6024,-0.93313 m 4.0278096,8.06743 c 0,0 -1.75995,-0.0591 -1.59458,-1.94894 0,0 0.21261,-1.58277 2.00799,-1.74814 0,0 1.52372,-0.0945 1.96076,1.64184 0,0 0.37797,1.58277 -1.12212,2.72851 0,0 -1.02762,0.8977 -2.72852,0.72052 0,0 -2.0906796,-0.16537 -3.1419196,-2.07887 0,0 -1.08669,-1.87807 -0.25986,-3.7207 0,0 0.48428,-1.24024 1.41741,-2.03163 0,0 1.5591496,0.30711 1.9961896,-1.004 l 0.2008,-0.9095"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path1044" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 11.659502,232.01925 c 0,0 5.41221,0.53454 7.01583,1.26953 0,0 7.91786,2.33861 10.12283,3.50792 l 2.43884,1.03567 1.08934,0.55208 3.015,1.38171 -0.0591,0.73233 -0.10631,0.75596 -0.0118,0.23623 v 0.24805 l -0.0354,0.51971"
+ id="path1211"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccc" />
+ <path
+ id="path1239"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 30.502012,237.72379 -0.97721,-0.45937 m 0.53454,0.71829 -1.14425,-0.53454 m 0.16704,1.12754 -0.83521,-0.90203 m -0.0668,2.03792 c -0.0334,-0.0167 -1.31964,-0.92709 -1.31964,-0.92709 m 1.09413,1.85419 -1.61197,-0.0668 m 2.41378,1.00226 c -0.0668,0.0334 -2.18827,1.37811 -2.18827,1.37811 m 2.79798,-0.45102 c -0.0167,0.0334 -1.62868,1.67043 -1.62868,1.67043 m 2.79798,-1.13589 c -0.0334,0.0501 -1.07743,2.10475 -1.07743,2.10475 m 2.6894,-2.15486 -0.53454,2.35531 m 1.65373,-2.74786 c 0.0167,0.0752 -0.14198,2.39707 -0.14198,2.39707 m 1.09413,-3.61649 c 0.008,0.0418 -0.0167,2.78127 -0.0167,2.78127 m 0.88532,-3.67496 -0.0752,2.78128 m 0.25056,-2.48895 c 0,0 -0.98555,1.7456 -1.28623,2.02958 0,0 -0.82687,1.01896 -2.26344,1.31964 0,0 -2.29685,0.50948 -3.60814,-1.5535 0,0 -0.86862,-1.23612 -0.35079,-2.78963 0,0 0.5596,-1.78736 2.28849,-1.89594 l 0.46773,-0.37585 m 4.76909,4.91108 c 0,0 -0.47608,0.65982 -0.60971,0.83522 0,0 -1.328,1.57856 -2.97337,1.66208 0,0 -3.16548,0.63476 -4.51853,-2.53071 0,0 -0.91039,-1.82077 0.45937,-3.72507 0,0 0.593,-0.83522 1.5368,-1.14425 l 0.74334,-0.29232"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm=".33"
+ embroider_center_walk_underlay="True" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path1410"
+ d="m 29.833832,237.23101 0.68488,0.30068 1.31964,0.56795 0.16705,0.65147 0.16704,0.76839 -0.11693,0.7517 -0.28398,0.58465 -0.50112,0.43431 -0.68488,0.30069 -0.48861,0.006 -0.53153,-0.15946 -0.4016,-0.3012 -0.28348,-0.38979 -0.11221,-0.37798 -0.0413,-0.37207"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0;stroke-opacity:1"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 31.360782,238.37238 1.05124,0.2008 m -0.86225,0.15355 0.92722,0.23033 m -0.87998,0.5079 1.02763,0.0709 m -1.02172,0.64965 0.96856,0.15356 m -1.28748,0.33663 0.84454,0.39569 m -1.32291,-0.1004 0.47837,0.75596 m -0.91541,-0.56106 c -0.006,0.0295 0.14174,0.76776 0.14174,0.76776 m -0.67918,-0.86226 -0.0532,0.78548 m -0.37207,-1.03352 -0.23623,0.69098 m -0.0236,-0.88588 c -0.0236,0.0236 -0.30711,0.43704 -0.30711,0.43704 m 0.12402,-0.72052 c -0.0236,0.0118 -0.33073,0.25395 -0.33073,0.25395 m 0.25986,-0.57877 -0.35435,0.0532 m 0.24214,-0.15946 c 0,0 -0.0118,0.66146 0.31301,0.99809 0,0 0.36617,0.54925 1.11031,0.56697 0,0 0.7028,0.0591 1.35835,-0.63193 0,0 0.45475,-0.6024 0.43113,-1.13393 0,0 0.0709,-0.56696 -0.36617,-1.13983 l -0.14174,-0.33073 m -2.78757,1.67727 c 0,0 -0.0413,0.63783 0.31892,1.13393 0,0 0.47246,0.7028 1.39378,0.64964 0,0 0.75595,0.0118 1.38198,-0.64374 0,0 0.49609,-0.61421 0.55515,-1.11621 0,0 0.10631,-0.63783 -0.0768,-1.09259 l -0.15355,-0.51381"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path1438" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path4780"
+ d="m 31.915932,238.28969 -3.02381,-1.46465 -5.85863,-2.22061 -3.44903,-1.08668 -4.20499,-1.08669 -3.54353,-0.42522 c 0,0 -2.5040896,-0.0945 -3.5435196,0.47247 0,0 -2.03162,0.8032 -3.2128,2.07887 0,0 -1.65365,2.26786 -2.12612,4.48847 0,0 -0.14174,3.82701 0.8032,7.1343 0,0 1.22843,4.67745 2.59859,6.66183"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 6.2608024,252.79453 c 0,0 0.75595,2.64583 1.93712,3.16555 0,0 1.32292,0.23624 2.5040996,0.18899 0,0 2.95294,-0.11812 3.99237,-1.37016 0,0 1.74814,-1.88989 1.72452,-2.85845 0,0 0.0709,-2.22061 -0.44885,-3.30729 0,0 -1.63002,-3.04743 -4.13412,-2.05525 0,0 -2.1497296,0.68509 -2.2678496,2.48047 -0.0236,0.0472 0.0472,1.77177 1.1339296,2.29148 0,0 1.27567,0.51972 2.43322,-0.35435 0,0 0.44884,-0.56696 0.51972,-0.75595"
+ id="path4956"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 7.9616924,252.32206 -1.91351,1.25205 m 2.76396,-0.8977 -2.17337,1.79539 m 2.45685,-0.70871 -1.86626,1.67727 m 2.62221,-1.01581 -1.06306,2.4096 m 2.9056896,-2.10249 -0.37797,2.36235 m 1.81901,-2.69308 0.42522,2.29148 m 0.66146,-3.28367 1.22842,1.86626 m -0.44884,-3.09468 1.63002,1.32292 m -1.22843,-2.8112 1.98438,0.42522 m -2.12612,-1.84263 2.26786,-0.21261 m -3.07106,-1.06306 1.79539,-0.87407 m -2.85844,0.25986 c 0.0945,-0.11812 1.29929,-1.63002 1.29929,-1.63002 m -2.22061,1.41741 c 0,0 0.16536,-2.008 0.14174,-1.91351 m -1.06306,2.12612 -0.75595,-1.63002 m -0.11812,2.2206 -1.4646596,-0.87407 m 1.3465396,1.55916 c 0,0 -1.9134996,-0.23624 -1.8898796,-0.14175 m 1.7481396,1.13393 -1.7245096,0.70871 m 2.3150996,0.21261 -1.3465396,1.25205 m 2.2206096,-0.94494 -0.28348,1.29929 m 0.94494,-1.65365 0.82682,1.11031 m -0.33073,-1.53553 1.15756,0.33073 m -0.33073,-0.49609 c 0,0 -0.37798,1.39378 -1.74814,1.72451 0,0 -1.15756,0.4016 -2.2678596,-0.7087 0,0 -1.37016,-1.67727 0.1889896,-3.63803 0,0 1.86626,-2.3151 4.74832,-0.75595 0,0 1.84264,1.13393 2.05525,3.37817 0,0 0.44885,2.22061 -0.94494,4.06324 0,0 -1.18118,1.84263 -3.02381,2.38598 0,0 -1.67727,0.51971 -2.78758,0.18898 0,0 -2.3150996,-0.0472 -3.7088896,-3.40178 m 7.2524196,-3.28367 c 0,0 -0.37797,1.46466 -2.008,1.41741 0,0 -1.55915,0.14174 -1.8190096,-1.81901 0,0 -0.11811,-1.9135 2.0788696,-2.64583 0,0 1.91351,-0.56697 3.18918,1.1103 0,0 1.15755,1.06306 0.94494,3.35454 0,0 -0.30711,2.05525 -1.55916,3.02381 0,0 -1.27567,1.29929 -3.23642,1.32292 0,0 -2.0316196,-0.0945 -3.2600396,-1.41741 0,0 0.49609,-0.61422 -0.0945,-1.25205 0,0 -0.4016,-0.28348 -0.94494,-0.18899"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5178" />
+ <path
+ inkscape:label="path5359"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 6.4970324,252.84178 -0.56696,-0.51972 0.42522,0.99219 1.01581,1.88988 1.70089,1.48828 c 0,0 0.8977,0.92132 3.8506396,0.54334 0,0 6.6382,-1.72451 7.72488,-1.98438 0,0 10.32348,-2.85844 11.10306,-3.09467 l 1.34653,-0.44885 -0.89769,-0.35435 c 0,0 -2.4658,-0.44163 -2.91682,-1.95337 0,0 -0.65147,-1.82913 -0.1921,-2.41378 0,0 0.53454,-1.68714 2.1298,-1.88759 0,0 1.26118,-0.0501 1.74561,0.74334 0,0 0.593,0.86028 0.15869,1.7289 0,0 -0.50113,1.04402 -1.57021,1.02732 0,0 -0.49278,0.0334 -0.92709,-0.3842"
+ id="path5359"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 33.625722,250.92857 -1.22777,0.81016 m -0.43431,-1.05237 -0.34244,1.03567 m -0.98556,-1.51174 c 0,0 -0.43431,1.05237 -0.42596,1.01896 m -0.3842,-2.29685 -0.85192,1.00227 m 0.49278,-2.00453 c 0,0 -1.03567,0.46772 -1.00226,0.45937 m 1.11083,-1.45327 -1.11083,0.15033 m 1.73725,-0.99391 -1.17766,-0.12528 m 1.62032,-0.34244 -0.44266,-0.70158 m 1.41987,0.56795 c -0.0167,-0.0334 -0.16705,-0.96885 -0.16705,-0.96885 m 0.91874,1.20271 0.3675,-0.85192 m 0.0752,1.35305 c 0.0167,-0.0334 0.71828,-0.50948 0.71828,-0.50948 m -0.66817,1.21106 c 0.0418,-0.0334 0.97721,-0.25892 0.97721,-0.25892 m -1.20272,0.91874 c 0.0418,0.008 0.85192,0.11694 0.85192,0.11694 m -1.21106,0.30902 c 0.0251,0.0334 0.45937,0.57631 0.45937,0.57631 m -0.89368,-0.37585 0.10857,0.73499 m -0.55959,-0.71829 c -0.0167,0.0334 -0.15869,0.56795 -0.15869,0.56795 m -0.35079,-0.65982 -0.23386,0.37584 m 0.0251,-0.32573 c 0,0 0.71828,0.7684 1.82912,0.0334 0,0 0.84357,-0.61806 0.65982,-1.64538 0,0 -0.20045,-1.40316 -1.81242,-1.33635 0,0 -1.19436,-0.0418 -1.96276,1.38647 0,0 -0.55959,1.1526 -0.0418,2.37202 0,0 0.55125,1.34469 1.76231,1.82077 0,0 0.69323,0.39255 2.53071,0.29232 m -3.0569,-2.85644 c 0,0 0.7851,0.69323 1.73725,0.26727 0,0 0.65147,-0.27562 0.95215,-1.02732 0,0 0.47607,-0.96885 -0.31738,-1.921 0,0 -0.91874,-1.07743 -2.36367,-0.48442 0,0 -1.23612,0.36749 -1.7289,1.87088 0,0 -0.40926,1.16096 0.1921,2.46389 0,0 0.5763,1.29459 1.88759,1.83748 0,0 0.91874,0.40091 1.97946,0.29233"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5579" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path5950"
+ d="m 33.291632,251.3963 0.88533,-0.0501 2.33861,-1.08579 0.43431,2.45554 c 0,0 -3.00678,1.21942 -3.50791,1.40317 0,0 -6.39776,2.97337 -10.40681,3.64154 0,0 -6.99912,1.63703 -9.63841,1.77066 l -0.10022,0.46772 -0.86863,0.80181 -0.66817,1.10249 -0.21716,0.88533 -0.0501,1.06908 0.35079,1.10248 0.63477,0.78511 1.00226,0.70158 1.05237,0.25057 1.23612,-0.16705 1.00227,-0.55124 0.63476,-0.91874 c 0,0 0.26727,-1.06908 0.0668,-1.43657 0,0 -0.71117,-2.0414 -2.65421,-0.79526 0,0 -0.68508,0.69689 -0.53153,1.5119 0,0 0.17718,0.72052 0.93904,0.92723"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="path6178"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 14.332202,259.98233 -1.77901,-0.0501 m 0.72663,0.83522 -1.12754,-0.51784 m 0.71829,1.08578 -1.23612,-0.66817 m 0.61806,1.81242 -1.26953,-0.53454 m 1.25282,1.49504 -1.24447,-0.0668 m 1.52845,0.89368 -1.39482,0.70994 m 2.03793,0.1921 -1.03567,1.1359 m 2.02958,-0.62642 -0.84357,1.29459 m 1.49504,-0.96886 -0.22551,1.21942 m 1.16096,-1.3614 0.15869,1.24447 m 0.50948,-1.64538 c 0.0334,0.0167 0.86027,0.88534 0.86027,0.88534 m -0.36749,-1.58692 0.94379,0.61806 m -0.86862,-1.46998 1.21941,0.14199 m -1.48668,-0.63477 1.26953,-0.2255 m -1.87924,-0.30904 1.12754,-0.79345 m -1.71219,0.82686 0.0585,-1.07743 m -0.62641,1.48669 -0.81851,-0.5429 m 0.6097,1.21107 -0.88533,0.34244 m 1.00226,0.24221 c -0.0418,0.0334 -0.6097,0.58465 -0.6097,0.58465 m 0.86862,-0.28397 -0.21715,0.60135 m 0.30903,-0.15869 c 0,0 -1.05238,-0.24221 -1.05238,-1.38646 0,0 0.0752,-1.17765 1.19436,-1.5535 0,0 1.26953,-0.52619 2.12146,0.73499 0,0 0.75169,1.25282 -0.18375,2.53906 0,0 -0.65147,1.11919 -2.32191,1.27788 0,0 -1.80407,0.1921 -2.98172,-1.29458 0,0 -1.24448,-1.68714 -0.48443,-3.95893 0,0 0.68488,-1.5201 1.84583,-1.95441 m 1.88759,5.48738 c 0,0 -1.04402,-0.21716 -0.84357,-1.44493 0,0 0.31739,-1.33635 1.78737,-1.16095 0,0 1.40316,0.36749 1.12754,1.921 0,0 -0.28397,1.57856 -2.19662,1.82912 0,0 -2.15486,0.29233 -3.0736,-1.90429 0,0 -0.70158,-1.72055 0.44267,-3.16547 0,0 0.6097,-0.91874 2.1298,-1.55351"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path6367"
+ d="m 13.964702,259.54802 -2.13815,0.10022 -2.4388396,0.26727 1.6704396,4.57699 2.43883,6.5481 0.66817,1.67044 0.33409,-0.73499 0.23386,-1.26953 0.66818,-1.1359 1.06907,-0.90203 0.93545,-0.31738 0.98555,-0.11693 0.98556,0.0334 0.86863,0.60135 0.46772,0.81851 0.13363,0.90204 -0.15034,0.75169 -0.80499,0.82453 -0.57877,0.27167 -0.67327,-0.0827 -0.6024,-0.23623 -0.30711,-0.37798 -0.18899,-0.49609 0.0354,-0.4961 0.0472,-0.22442 0.23624,-0.41341"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="path6585"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 14.694392,273.32336 -0.88588,-2.23242 m 1.35835,1.07487 -1.07487,-1.87807 m 1.45285,0.49609 -0.88589,-1.35835 m 1.77177,0.12993 -0.8032,-1.27567 m 2.16155,0.53153 -0.43704,-1.26386 m 1.74814,1.47647 0.42523,-1.61821 m 0.54334,2.44503 c 0,0 1.32292,-1.22842 1.24023,-1.16936 m -0.99218,1.97257 1.24023,-0.33073 m -1.81901,1.08668 1.21661,0.55515 m -2.01981,-0.31892 c -0.0236,0.0827 0.15355,1.27567 0.15355,1.27567 m -0.89769,-1.52371 -0.66146,1.03943 m 0.36617,-1.54734 c -0.0472,0.0118 -0.85045,0.55515 -0.85045,0.55515 m 0.96856,-1.06306 c -0.0472,0 -0.74414,0.0118 -0.74414,0.0118 m 0.74414,-0.33071 c 0,0 -0.67327,0.69689 -0.12993,1.58277 0,0 0.93313,1.24024 2.19699,0.0945 0,0 0.90951,-0.79138 0.36616,-2.06705 0,0 -0.85044,-1.81901 -3.27185,-0.90951 0,0 -1.47647,0.50791 -2.12612,2.16156 0,0 -0.44884,1.70089 -0.62602,2.44503 m 3.44903,-3.38997 c 0,0 -0.7087,0.68508 -0.29529,1.72451 0,0 0.3071,0.8032 1.3111,0.88588 0,0 1.54734,0.14174 2.12612,-1.58277 0,0 0.67327,-1.84264 -1.32292,-2.90569 0,0 -1.72451,-0.8977 -3.87425,0.61421 0,0 -1.22843,0.86226 -1.65365,2.57496 l -0.27167,0.72052"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path6778"
+ d="m 13.867572,271.94139 0.99218,2.70489 c 0,0 1.8072,2.36235 5.39798,1.21661 0,0 1.9135,-1.05124 2.74032,-1.6064 0,0 3.48447,-2.8112 4.72471,-4.016 l 5.0318,-5.18536 3.012,-3.35453 0.93313,-1.06306 c 0,0 0.33073,-2.22061 -0.8032,-3.64984 0,0 -2.1143,-2.55133 -4.53571,-1.35835 0,0 -1.85445,0.57878 -2.33873,2.56315 0,0 -0.36616,1.91351 1.39379,2.83482 0,0 1.18117,0.43704 2.27967,-0.77957 0,0 0.69689,-0.83864 0.27167,-1.8072 0,0 -0.31892,-1.1103 -1.73633,-0.89769"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="path7010"
+ style="display:inline;fill:none;fill-rule:evenodd;stroke:#191d1f;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 35.446492,261.611 1.921,-1.95441 m -1.87924,1.26118 2.01288,-1.84583 m -1.74561,0.0919 1.69549,-1.06908 m -2.16321,-0.64311 1.66208,-0.65983 m -2.52235,-0.18374 1.81242,-0.99391 m -2.93162,0.60971 1.26953,-1.50339 m -2.00452,1.37811 0.14199,-1.46164 m -1.56185,1.87924 -0.70159,-1.26117 m -0.56795,2.5307 c -0.0334,-0.008 -1.28623,-0.81016 -1.28623,-0.81016 m 0.95215,1.97112 c -0.0334,0.0167 -1.51175,0.0418 -1.51175,0.0418 m 2.23839,0.94379 -1.42823,0.87698 m 2.31356,-0.58465 c 0,0 -0.93545,1.30293 -0.9605,1.31129 m 1.60361,-1.31129 0.0668,1.41152 m 0.46772,-1.94606 c 0.0334,0.0167 1.01897,0.81016 1.05238,0.84357 m -0.81852,-1.5034 c 0.0418,-0.0251 1.14425,0.25893 1.14425,0.25893 m -1.21941,-0.87699 1.04401,-0.18374 m -1.43657,-0.26727 0.77675,-0.64312 m -1.46163,0.45937 0.0501,-0.68488 m -0.25056,0.3842 c 0,0 1.21942,-0.34244 1.83748,0.79346 0,0 0.50948,0.75169 -0.0585,1.82913 0,0 -0.50949,1.05237 -1.84583,1.186 0,0 -1.70385,0.23387 -2.39708,-1.62032 0,0 -0.51783,-1.45328 0.48443,-2.86479 l 0.35079,-0.45102 c 0,0 1.52009,-1.54515 3.62484,-1.40316 0,0 1.82077,0.0501 2.91491,1.47833 0,0 0.93544,0.80181 0.97721,2.88985 L 36.941462,260.4 m -5.69618,-2.79798 c 0,0 1.30294,-0.25891 1.63703,1.06073 0,0 0.35079,1.30294 -1.06073,2.02123 0,0 -2.00452,0.73499 -2.53906,-1.46999 0,0 -0.39255,-1.69549 1.56186,-2.94831 0,0 2.47224,-1.56186 4.51852,0.64311 0,0 0.98556,1.01062 0.79346,2.64764 0,0 -0.0585,0.67653 -0.40926,1.37811 l -0.14199,0.7684"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path7207"
+ d="m 36.248302,261.11822 2.67269,-3.04019"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458331, 0.26458331;stroke-dashoffset:0" />
+ <path
+ id="path7439"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 11.245362,259.33824 -3.3545396,0.28349 m 4.2286096,1.60639 c -0.0945,0.0236 -3.7561396,1.27567 -3.7561396,1.27567 m 4.6065796,0.11812 c -0.0945,0.0473 -3.7088896,2.50409 -3.7088896,2.50409 m 4.3703496,2.55134 c -0.11812,0.0945 -2.83482,1.6064 -2.83482,1.6064 m 4.89007,2.43322 c -0.0945,0.0473 -3.11831,1.6064 -3.11831,1.6064 m 3.23642,-0.4016 c -0.11811,0.0236 -2.19698,2.03163 -2.19698,2.03163 m 2.66945,-1.15756 -1.60639,2.8112 m 2.12611,-2.55134 c 0,0 -0.47247,4.13412 -0.49609,4.016 m 1.48828,-4.03962 0.73233,3.68527 m 0.77957,-4.44123 0.70871,4.06325 m 1.1103,-3.77976 c 0.0473,0.11811 0.94494,3.02381 0.94494,3.02381 m 1.41742,-4.72471 1.18117,3.51991 m 1.67727,-6.11849 1.53553,2.83482 m 2.36235,-6.85082 1.67727,2.92932 m 3.94513,-8.97694 c 0.0945,0.0473 1.48828,2.92932 1.48828,2.92932 m 0.73233,-4.86645 1.1103,2.22062 m 0,-0.85045 -0.59059,0.59058 c 0,0 -3.63802,4.39398 -4.41759,5.14993 0,0 -5.17355,5.88226 -7.84301,8.05562 0,0 -3.59077,3.23642 -5.88225,4.03962 0,0 -4.58296,2.22061 -5.90588,-1.15755 l -3.54353,-8.8352 c 0,0 -2.4804696,-6.82719 -2.7639496,-7.48865 m 30.4507096,-1.46466 -0.54334,0.4961 -6.35473,7.39416 c 0,0 -4.51209,4.81919 -5.81138,5.81138 0,0 -3.49628,3.1183 -4.58296,3.47266 0,0 -0.51972,-1.15755 -1.93713,-0.77958 0,0 -1.18118,0.14174 -1.32292,1.37016 0,0 -2.19698,0.28349 -3.18917,-2.19698 l -2.008,-4.89007 -1.03943,-2.69308 c 0,0 -0.16537,-3.07106 -0.44885,-4.06324 l -0.82682,-2.38598"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_manual_stitch="True"
+ inkscape:connector-curvature="0"
+ id="path7640"
+ d="m 10.678392,259.10201 -2.3859696,-0.0709"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0" />
+ <path
+ id="path7862"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 9.0870324,260.78414 -0.75169,-2.43884 m 2.3720196,2.45554 -0.53454,-2.37202 m 2.83973,2.20498 -0.18374,-2.23838 m 3.55802,1.87088 -0.33408,-2.22168 m 5.12823,1.38647 -0.3842,-2.30521 m 6.48129,0.86863 -0.735,-2.6894 m 5.29528,0.93544 c 0,0 -0.85192,-2.50565 -0.86862,-2.43883 m 4.34313,1.01897 -0.7684,-2.77293 m 2.3052,1.68714 -0.53454,-2.05463 m -27.5621696,8.78648 c 0,0 2.2550796,-0.10022 2.5891696,-0.18374 0,0 5.09483,-0.35079 6.84878,-0.7684 0,0 6.8989,-1.45328 8.78649,-2.25509 0,0 6.04697,-1.93771 9.35443,-3.74177 l 0.73499,-0.35079 m -28.8149896,5.82981 c 0,0 4.5936896,0.31739 7.8844496,-0.33409 0,0 5.69618,-0.88533 8.4691,-1.85418 0,0 7.03253,-2.20497 9.53818,-3.52461 l 2.6727,-1.26953"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path8067"
+ d="m 37.050112,252.73264 -0.56795,-2.43883"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0" />
+ <path
+ id="path8305"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 35.079002,240.83915 0.50113,-3.17383 m -2.20498,2.77292 0.63477,-3.842 m -5.31198,1.87089 1.5368,-3.4411 m -9.12058,1.23613 1.03567,-4.67722 m -7.85104,2.80633 1.90429,-4.27631 m -6.04697,4.67722 -0.9688496,-4.67722 m -3.20723,7.11605 -3.27406,-4.10927 m 2.37202,6.71515 -4.54357996,-1.67044 m 5.41220996,5.27858 -5.37879996,1.03567 m 6.24741996,4.71062 c -0.13363,0.0668 -4.27631,1.50339 -4.27631,1.50339 m 6.88219,1.9043 -4.87767,3.54132 m 6.7819696,-0.96885 c -0.10023,0.13363 -2.7061096,3.0736 -2.7061096,3.0736 m 6.8487796,-3.00679 c -0.0668,0.13364 -1.03567,2.60588 -1.03567,2.60588 m 13.56393,-6.18061 0.63477,3.00679 m 6.98242,-5.47903 0.56794,2.60588 m 0.23386,-2.10475 c 0,0 -4.07586,1.70385 -5.84652,2.13816 0,0 -13.8646,4.2429 -16.37026,4.51017 0,0 -2.73951,0.63477 -3.40768,0.46772 0,0 -2.1715696,-0.0668 -3.9422296,-3.97563 0,0 -2.97337,-6.34765 -3.17382,-9.68852 0,0 -0.83522,-5.67948 1.97111,-8.31877 0,0 2.53906,-3.00678 7.5169496,-2.20497 0,0 6.28084,0.83522 13.46371,3.842 l 9.12057,3.94223 m 0.93544,10.75759 c 0,0 -8.0849,2.43884 -8.81989,2.70611 0,0 -14.03165,4.30972 -17.13866,4.07586 0,0 -3.2072296,-0.10023 -5.2451696,-5.31198 0,0 -3.64154,-7.34992 -3.04019,-12.76212 0,0 -0.33408,-6.84878 8.1517196,-8.71967 0,0 4.51018,-0.53454 13.73098,3.14041 0,0 10.28987,4.00905 11.65963,5.17835"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path8514"
+ d="m 35.847402,240.00393 c 0,0 0.63476,-2.00452 1.13589,-2.63929 0,0 1.46998,-2.47224 3.34087,-3.34086 0,0 1.33635,-0.50113 2.3052,-0.60136 l 1.36976,0.85192 0.7851,0.51784 0.7684,0.75169 0.63477,1.00226 0.33408,1.26953 0.13364,1.50339 -0.28398,1.48669 -0.7684,1.20271 -0.68488,0.81851 -1.28623,0.91874 -1.23612,0.58466 -1.26953,0.10022 -1.10249,-0.15034 -0.88533,-0.4009 -0.66817,-0.50113 -0.56795,-0.7517 -0.18375,-1.11919 0.0334,-1.01896 0.30068,-0.71829 0.63477,-0.7851 0.60135,-0.3675 0.73499,-0.21716 0.66818,-0.0167 0.75169,0.21716 0.33409,0.25057 0.51783,0.63476"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0" />
+ <path
+ id="path8760"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 40.858702,234.1073 2.57247,-0.65147 m -0.43431,1.63702 1.36975,-1.5535 m -0.0167,2.45554 1.18601,-1.63703 m -0.3842,2.92326 c 0.0668,0 1.87088,-1.26953 1.87088,-1.26953 m -1.73725,2.88985 2.52236,-1.26953 m -2.63929,2.77292 c 0.0668,0.0668 2.6727,-0.18374 2.6727,-0.18374 m -3.29076,1.52009 c 0.0668,0.0835 2.18827,0.735 2.18827,0.735 m -3.42439,0.45101 0.91874,1.57021 m -2.73951,-0.85192 0.0835,1.62032 m -1.77066,-2.13816 -0.81852,1.87089 m -0.51783,-3.27405 -1.31964,1.26953 m 1.5535,-2.17156 -1.921,0.4176 m 2.20497,-1.18601 -1.77066,-0.0501 m 2.2718,-0.50113 -0.98556,-1.31964 m 1.77066,1.18601 -0.20045,-1.87089 m 1.18601,1.72055 0.58465,-1.55351 m 0.0668,2.08805 0.86862,-0.88533 m -0.26727,0.81851 c 0,0 -0.65147,-2.00452 -2.92326,-1.35305 0,0 -1.5368,0.41761 -2.05463,2.22167 0,0 -0.66817,2.43884 1.83748,3.8086 0,0 2.6894,1.25282 5.36209,-0.96886 0,0 1.78737,-1.48668 2.08805,-3.34086 0,0 0.56794,-2.10475 -0.40091,-3.85871 0,0 -0.60135,-1.5368 -2.53906,-2.40542 l -1.35305,-0.3508 m -0.23386,6.33095 c 0,0 -0.88533,-2.08804 -3.10701,-0.88533 0,0 -1.60362,0.95215 -1.23612,2.99008 0,0 0.48442,2.35531 3.40769,2.28849 0,0 2.60587,0 4.29301,-2.82303 0,0 0.96885,-1.68714 0.55124,-3.57473 0,0 -0.0334,-1.5535 -2.05463,-3.02349 0,0 -1.10249,-0.68487 -2.35531,-0.68487 l -1.10249,-0.15034"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path8973"
+ d="m 41.696062,233.65949 c 0,0 -1.48828,0.23623 -2.59858,1.03943 0,0 -0.70871,0.75595 -0.82683,0.85045"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0" />
+ <path
+ embroider_center_walk_underlay="True"
+ id="path9213"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 62.768246,233.75398 2.50409,2.92931 m -3.28367,-4.18136 c 0.0945,0.0473 3.87426,2.24424 3.87426,2.24424 m -4.8192,-4.29948 4.70108,1.53552 m -6.07124,-3.94512 4.60658,0.0236 m -8.26823,-2.59859 c 0.0472,-0.0945 4.96094,-2.48047 4.96094,-2.48047 m -8.3391,1.03943 3.56715,-3.63802 m -7.512284,3.23642 0.14174,-4.29948 m -4.34672,6.04762 -1.03944,-4.70108 m -2.29148,6.77995 -2.55134,-2.95294 m 1.48828,6.26023 -3.87425,-1.25204 m 3.23642,3.23642 -3.18917,0.56696 m 2.97656,0.85045 -2.14974,1.53553 m 0.68508,0.49609 c 0,0 -0.66146,-1.96075 -0.54334,-4.44122 0,0 0.21261,-4.37035 2.7167,-7.01618 0,0 3.09468,-4.18136 9.40216,-4.15774 0,0 6.071254,-0.35435 11.244794,5.07906 0,0 2.88207,3.14192 3.70889,6.70907 0,0 0.75596,3.2128 0.28349,4.67746 m -25.726014,-2.008 c 0,0 -0.0472,-0.73233 -0.0709,-0.85045 0,0 -0.59058,-4.55933 1.41741,-7.29966 0,0 2.5041,-4.89007 9.40216,-4.84282 0,0 5.457034,-0.0236 9.614774,4.34672 0,0 2.92932,2.57497 3.9215,7.32329 l 0.0709,0.96857"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path9430"
+ d="m 63.949416,235.66748 -0.82682,-1.1103 c 0,0 -1.58278,-1.2993 -2.36235,-1.34654 0,0 -0.96857,-0.37798 -1.32292,-0.42522 l -0.68508,-1.65365 -0.51972,-1.79539 -0.18899,-2.07887 0.14174,-2.12611 0.99219,-2.55134 1.25205,-2.17336 2.24423,-2.14974 2.14974,-1.06306 1.37017,-0.21261 1.32291,0.0709 0.87407,0.47247 0.77958,0.8032 0.3071,1.15755 -0.33073,1.1103 -0.51971,0.8977 -0.59059,0.44884 -0.96856,0.14174 -0.87407,-0.0945 -0.66146,-0.33072 -0.4016,-0.47247 -0.37798,-0.59059 -0.16536,-0.47247"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0" />
+ <path
+ id="path9678"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 60.878356,232.95078 -2.6222,-0.66146 m 1.63002,-2.19698 -2.78758,-0.21261 m 2.19699,-2.12612 -2.4096,0.4016 m 3.82701,-3.49628 -3.42541,0.0945 m 3.82701,-2.55135 -3.04743,-0.3071 m 4.58296,-1.91351 -2.57496,-1.03943 m 4.7247,-0.33073 -2.008,-1.93713 m 3.59077,1.70089 -0.4016,-3.04743 m 1.48829,3.09468 1.15755,-2.66946 m -0.51972,3.33092 2.4096,-1.37017 m -2.48047,2.45685 c 0.14174,0.0709 2.43322,0.51972 2.43322,0.51972 m -3.2128,0.16536 c 0,0.0945 0.75596,1.84264 0.75596,1.84264 m -1.63003,-2.008 c -0.0472,0.0945 -0.63783,1.93713 -0.63783,1.93713 m -0.23624,-2.62221 -1.65364,0.85044 m 0.8032,-0.99219 c 0,0 0.3071,-0.0709 0.37797,0.37798 0,0 0.37798,1.84263 2.43323,1.39379 0,0 1.5119,-0.30711 1.58277,-2.07887 0,0 0.0709,-2.38598 -3.14193,-2.05525 0,0 -2.57496,0.68509 -4.25223,2.5041 0,0 -1.96075,1.96075 -2.55134,4.2286 0,0 -0.99218,2.71671 -0.16536,5.45704 0,0 0.54334,1.9135 1.6064,3.4254 m 3.80338,-13.11104 c 0,0 -0.18899,0.18898 -0.0236,0.59058 0,0 0.37799,1.77177 2.26787,1.93713 0,0 1.67727,0.23624 2.83482,-1.37016 0,0 0.89769,-1.25205 0.33073,-2.69308 0,0 -0.73233,-2.4096 -4.06325,-1.91351 0,0 -2.64583,0.44885 -4.81919,2.83482 0,0 -2.5041,2.38598 -3.16555,6.07125 0,0 -0.85045,3.77976 1.37016,7.25242"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm=".33" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path9899"
+ d="m 59.744436,232.87991 c 0,0 -2.48047,-0.51972 -3.85063,0.14174 0,0 -3.59078,1.48828 -5.362544,3.28367 0,0 -3.33092,-3.47266 -6.14211,-3.02381 0,0 -2.12612,0.11812 -2.71671,0.30711 l 0.37798,-0.99219 0.68508,-1.48828 0.59059,-2.05525 0.0945,-2.22061 -0.35436,-2.12612 -0.96856,-2.12611 -1.5119,-1.81901 -1.53553,-1.48828 -2.05525,-0.87407 -1.9135,-0.16537 -1.77177,0.75595 -0.92131,1.25205 -0.11812,1.2048 0.51972,1.18118 0.94494,0.87407 1.18117,0.0236 1.11031,-0.49609 0.73233,-0.8032 0.4016,-0.82682"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26458332, 0.26458332;stroke-dashoffset:0" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 40.302282,233.4705 2.83482,-0.4961 m -1.6064,-8.81157 2.29148,-1.72451 m -4.016,-0.59059 3.23642,-1.37016 m -5.05543,-0.21262 2.76395,-1.96075 m -4.77195,1.25205 1.86626,-2.66946 m -3.44903,2.97656 0.14174,-2.90569 m -0.96856,3.68527 -2.57497,-0.59059 m 2.97656,1.48828 -2.6222,1.06306 m 3.28366,-0.37798 -1.18117,2.14974 m 2.14974,-2.3151 c 0,0.11812 0.4016,2.05525 0.4016,2.05525 m 0.49609,-2.9057 1.34654,0.70871 m -0.66146,-0.92132 c 0,0 -0.33073,0.0236 -0.42522,0.28349 0,0 -0.33073,1.72451 -2.17336,1.77176 0,0 -1.7009,0 -1.86626,-1.91351 0,0 0.0236,-1.81901 2.22061,-2.38597 0,0 2.26786,-0.49609 4.74833,1.81901 0,0 2.19698,1.72452 2.81119,4.44122 0,0 0.75596,2.74033 -0.0236,4.89007 0,0 -0.35435,1.67727 -1.39379,3.23642 l -0.42522,0.75595 m -3.18916,-12.78032 c 0,0 0.14174,0.30711 -0.0945,0.85045 0,0 -0.80321,1.93713 -2.92932,1.88988 0,0 -2.62221,0 -2.62221,-3.02381 0,0 0.42522,-2.95294 3.87425,-3.1183 0,0 3.11831,-0.0236 5.64602,2.95293 0,0 2.38598,2.45685 2.50409,5.85864 0,0 0.51972,2.52771 -1.29929,6.21298 l -0.28348,0.73233 m -1.01581,-3.26005 c 0.11812,0 3.23642,-0.11811 3.23642,-0.11811 m -2.55134,-2.5041 3.00019,0.4961 m -3.09468,-2.4096 c 0.11811,-0.0236 3.18917,-0.66146 3.18917,-0.66146"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26458332;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path10151" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path1578"
+ d="m 41.827552,233.48924 c 0,0 -3.87541,1.5368 -4.94449,4.00904 0,0 -1.9377,3.00678 -1.13589,9.42125 0,0 1.26953,6.88219 2.60588,9.88897 l 0.43732,-2.19496 0.70871,-1.46466 1.48828,-1.27567 1.39379,-0.75595 1.6064,-0.18899 1.5119,0.33073 1.48828,0.77958 1.01581,1.1103 0.44885,1.51191 c 0,0 0.0709,1.25205 0,1.34654 -0.0709,0.0945 -0.54334,1.32292 -0.54334,1.32292 0,0 -0.8977,0.96856 -0.99219,0.96856 -0.0945,0 -1.44103,0.44885 -1.44103,0.44885 l -1.18118,-0.28349 -0.94494,-0.85044 -0.33073,-0.99219 0.16536,-0.96856 0.42523,-0.70871 0.42522,-0.33073"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0" />
+ <path
+ id="path1834"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 39.188262,257.82747 -1.31964,-3.47451 m 1.97111,0.86863 -1.13589,-2.7061 m 2.42213,0.71828 -1.01897,-2.43883 m 3.09031,1.40316 -0.90204,-2.35531 m 2.72281,2.53906 c 0,0 -0.0668,-2.65599 -0.11693,-2.57247 m 1.5368,3.22394 c 0,0 1.35305,-2.3052 1.28623,-2.25509 m -0.55124,3.35758 2.17157,-1.28624 m -2.05464,2.65599 c 0.11693,-0.0334 2.55577,-0.4176 2.55577,-0.4176 m -3.17383,1.63702 c 0.0501,0.0668 1.88759,1.35305 1.88759,1.35305 m -3.00678,-0.4009 1.18601,1.83748 m -2.10475,-2.27179 c -0.0334,0.0668 -0.4009,2.50565 -0.3675,2.42213 m -0.25056,-3.00679 c -0.0668,0.0501 -1.63703,1.68714 -1.58691,1.60362 m 1.63702,-2.58917 -1.77066,0.43431 m 2.02123,-1.1526 -0.65147,-0.7684 m 0.7851,0.35079 c 0,0 -1.06908,0.45102 -1.1693,1.82078 0,0 -0.0835,1.13589 1.11919,1.78736 0,0 1.46998,0.80181 2.88985,-0.71829 0,0 1.16931,-1.43657 0.63477,-3.04019 0,0 -0.68488,-2.83974 -3.95893,-2.93996 0,0 -2.10475,-0.13364 -3.67496,1.65373 0,0 -1.63702,1.921 -1.50339,4.69392 m 5.51243,-3.50791 c 0,0 -1.48668,0.56795 -1.46998,2.38872 0,0 0.0167,2.00452 2.40543,2.3219 0,0 2.23838,0.0668 3.25734,-2.10475 0,0 1.18601,-1.85418 -0.4009,-4.34313 0,0 -1.88759,-2.75621 -5.34539,-2.02122 0,0 -2.33861,0.30068 -3.95893,2.78962 0,0 -0.53454,1.05238 -0.68488,1.67044 l -0.13363,1.01896"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path2063"
+ d="m 38.336342,256.77509 1.83748,4.04246 2.12145,4.35983 2.22168,3.77518 1.35305,2.25509 0.28398,-0.51783 -0.25057,-1.26954 0.13363,-1.68714 0.46773,-1.50339 1.30294,-1.45327 1.40316,-0.80181 1.5368,-0.33409 1.486694,0.10023 1.1693,0.56794 0.71829,0.91874 0.26727,0.65147 0.10023,1.03567 -0.31739,1.05238 -0.86862,1.05237 -1.1359,0.41761 -1.01896,-0.10023 -0.768404,-0.46772 -0.41761,-0.70158 -0.10023,-0.60136"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0" />
+ <path
+ id="path2327"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 51.950386,272.59411 -1.169304,1.9377 m -0.66817,-2.12145 -0.3842,1.95441 m -0.81852,-2.58917 -0.23386,2.43883 m -0.71828,-3.15712 -1.21942,1.95441 m 0.55124,-3.4411 c -0.10022,0.0167 -1.95441,1.33635 -1.95441,1.33635 m 1.5368,-2.6894 c -0.0835,-0.0167 -2.07134,0.58465 -2.07134,0.58465 m 3.37428,-2.67269 -2.58917,-0.43432 m 4.05915,-0.85192 -1.38646,-1.5368 m 3.374284,1.31965 -0.18375,-2.03793 m 1.50339,2.60587 c 0,0 1.57021,-2.15486 1.46999,-2.12145 m -0.88533,3.57473 c 0.0835,-0.0167 1.95441,-1.1526 1.95441,-1.1526 m -2.20498,2.07134 c 0.13364,0.0167 1.82078,0.46772 1.82078,0.46772 m -2.55577,0.10023 c 0.0835,0.10023 0.85192,1.72055 0.85192,1.72055 m -1.83748,-1.46999 -0.0167,1.93771 m -0.484424,-2.42213 -1.40317,1.38646 m 0.83522,-1.9377 -1.31964,0.15033 m 0.7851,-0.50113 c 0,0 0.18375,0.61806 0.21716,0.88533 0,0 0.18375,1.10249 1.586914,1.28624 0,0 1.28624,0.0668 2.02123,-1.08578 0,0 0.68488,-0.91874 0.30068,-2.18827 0,0 -0.55125,-2.05464 -3.023494,-1.97112 0,0 -1.77066,0.0668 -2.82304,0.96886 0,0 -1.38645,1.1526 -1.83747,2.62258 0,0 -0.46772,1.67043 0.10022,3.10701 0,0 0.7684,2.00452 2.72281,2.53906 0,0 1.25283,0.33408 2.321914,0.11693 l 0.66817,-0.16705 m -2.438844,-6.11379 c 0,0 -0.18374,0.45102 -0.11693,0.98556 0,0 0.35079,1.50339 1.854194,1.73725 0,0 1.97111,0.11693 2.77292,-1.38646 0,0 0.91874,-1.1526 0.31738,-2.85644 0,0 -0.83522,-2.42213 -3.791894,-2.23838 0,0 -2.3219,0.15034 -3.8587,1.9377 0,0 -1.78736,1.88759 -1.40317,4.71063 0,0 0.51784,2.42213 2.52236,3.60813 0,0 1.35305,0.71829 2.78963,0.61807 h 0.634764"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path2560"
+ d="m 51.733236,273.66319 1.77066,-2.40543 2.43883,-3.67495 2.85645,-5.06142 1.63702,-3.20723 1.11919,-2.35532 0.53454,-1.18601 -0.45102,-1.75395 -0.95214,-1.62032 -1.5201,-1.62033 -1.80407,-0.4009 -1.85418,0.28397 -1.50339,0.90204 -1.16931,1.08578 -0.93544,1.5535 -0.10022,1.5034 0.26726,1.186 0.90204,0.96886 0.96885,0.51783 h 1.16931 l 1.08578,-0.46772 0.85192,-1.00226 0.23386,-0.91874 -0.20045,-0.90203 -0.40091,-0.56795 -0.65147,-0.41761"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0" />
+ <path
+ id="path2824"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 60.987436,257.09248 c 0.0167,-0.15034 1.62033,-3.32417 1.62033,-3.32417 m -2.05464,0.81851 c 0,0 1.5201,-2.38872 1.45328,-2.3386 m -2.38872,0.60135 c 0,0 1.62032,-2.12145 1.5535,-2.07134 m -3.39098,1.21942 c 0,0 0.88533,-2.3219 0.86863,-2.23838 m -3.27405,2.38872 -0.10023,-2.55576 m -1.45328,3.8587 -1.43657,-2.23838 m 0.83521,3.25734 -2.622584,-0.16704 m 2.422134,1.31965 -2.305204,1.186 m 2.772934,-0.10022 c -0.0668,0.13363 -1.60362,1.62032 -1.57021,1.5535 m 2.52235,-0.95215 c -0.0167,0.11693 -0.93544,2.32191 -0.91874,2.23839 m 1.77066,-2.22168 c 0.0668,0.11693 0.41761,2.07134 0.43432,1.98782 m 0.48442,-2.70611 c 0.0835,0.0334 1.5201,1.08578 1.5201,1.08578 m -1.45328,-2.12145 c 0.0835,0.0167 1.77066,-0.0334 1.77066,-0.0334 m -2.02123,-0.8018 1.03567,-1.00227 m -0.93544,0.18375 c 0,0 1.11919,0.50113 1.26953,1.50339 0,0 0.40091,1.46999 -0.90203,2.60588 0,0 -0.93545,0.91874 -2.6894,0.65147 0,0 -1.87089,-0.35079 -2.35532,-2.60588 0,0 -0.21715,-2.27179 1.08579,-3.69166 0,0 1.26953,-2.13815 4.47676,-2.37201 0,0 2.17157,-0.0835 3.62484,1.33634 0,0 1.30294,1.08579 1.60362,2.77292 l 0.13364,1.16931 m -6.46459,-1.08578 c 0,0 1.5368,0.66817 0.96886,2.40542 0,0 -0.45102,1.31965 -1.98782,1.50339 0,0 -1.75396,0.28398 -2.52236,-1.90429 0,0 -0.35079,-1.73725 0.73499,-3.10701 0,0 1.28624,-1.95441 3.77519,-2.05463 0,0 2.40542,-0.0668 3.57473,1.75395 0,0 0.7684,1.03567 0.7684,2.25509 l 0.16704,2.22168"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path1139"
+ d="m 61.823306,256.38531 c 0,0 0.75595,-1.6064 0.99218,-2.17337 0,0 1.22843,-4.15774 1.55916,-5.5279 0,0 1.03943,-4.44122 1.03943,-6.66183 0,0 0.0945,-2.59859 -0.75595,-4.67746 0,0 -0.0945,-1.93712 -2.55134,-3.49628 0,0 -2.03162,-0.94494 -2.88207,-1.08668 l -0.8032,0.61421 -1.34654,0.70871 -1.03943,0.8032 -0.92132,1.18117 -0.54334,1.48829 c 0,0 -0.0709,1.03943 -0.0945,1.13392 -0.0236,0.0945 0.11812,1.32292 0.11812,1.32292 l 0.61421,1.58278 1.01581,1.18117 1.44103,0.8032 1.34654,0.28348 1.32292,-0.18899 1.37016,-0.51971 1.15756,-1.06306 0.44884,-1.06306 0.0709,-1.03943 -0.3071,-0.96857 -0.47247,-0.68508 -0.61421,-0.44884 -0.82683,-0.23624 -0.7087,0.0472 -0.61421,0.28348 -0.4961,0.35435"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0" />
+ <path
+ id="path1411"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 60.122406,233.39963 -2.3151,-0.51972 m 1.48828,0.92132 -2.90569,-0.0945 m 0.33073,1.819 -1.88988,-0.59058 m 1.06306,2.43322 -2.48047,-0.70871 m 2.3151,2.36236 -2.52771,0.23623 m 2.83482,1.46466 -2.29148,0.99219 m 3.54352,0.0236 -1.88988,1.74814 m 3.04743,-1.06306 c 0,0 -1.48828,2.33873 -1.44103,2.24423 m 2.76395,-1.70089 -0.47247,1.93713 m 1.74814,-2.33873 0.61421,1.6064 m 0.54334,-2.43322 c 0.0945,0 1.06306,1.03943 1.06306,1.03943 m -0.51972,-2.33873 1.32292,0.47247 m -1.55915,-1.5119 1.48828,-0.35435 m -2.29148,-0.51972 1.2048,-1.01581 m -1.96075,1.01581 0.0709,-1.55915 m -1.15755,1.70089 -0.44885,-1.22842 m -0.47247,1.03943 c 0,0 1.34654,-1.34654 2.69308,-0.87407 0,0 1.41741,0.30711 1.84263,1.79539 0,0 0.61422,2.008 -1.1103,3.54353 0,0 -1.70089,1.6064 -3.82701,1.08668 0,0 -2.52771,-0.25986 -3.85063,-2.74033 0,0 -1.06306,-2.3151 -0.23624,-4.37035 0,0 0.85045,-2.38597 3.04744,-3.54352 l 1.25204,-0.63784 m 0.42522,5.9295 c 0,0 0.92132,-1.01581 2.03163,-0.8032 0,0 1.58277,0.23624 1.81901,1.55915 0,0 0.56696,1.27567 -0.66146,2.8112 0,0 -1.51191,1.93713 -4.34673,1.08668 0,0 -2.43322,-0.7087 -3.09468,-3.28366 0,0 -0.59059,-2.26786 0.73233,-4.03962 0,0 1.22842,-2.24424 3.89788,-2.52772 l 0.51972,-0.47247"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0"
+ d="m 59.366456,232.85629 c 0,0 3.82701,0.51971 5.05543,3.77976 0,0 0.56697,1.55915 0.8032,2.64583"
+ id="path1890"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_max_stitch_length_mm="4"
+ embroider_row_spacing_mm="1.8"
+ embroider_angle="45"
+ inkscape:connector-curvature="0"
+ id="path2132"
+ d="m 65.225086,238.85666 2.74033,-1.55915 6.56734,-3.35454 c 0,0 9.21316,-3.92151 10.2526,-4.06324 0,0 5.29167,-1.74815 7.70126,-1.08669 0,0 3.92151,0.42523 5.33892,4.11049 0,0 1.37016,5.33892 -0.61421,9.6384 0,0 -1.6064,5.5279 -3.16555,7.51227 0,0 -1.84264,2.78758 -3.30729,3.68527 0,0 -1.84264,0.70871 -3.2128,0.37798 0,0 -11.67002,-2.03162 -13.13468,-2.26786 l -6.14211,-1.32292 -4.01599,-1.13392 c 0,0 1.27566,-5.90588 1.27566,-7.2288 0,0 -0.0473,-2.74033 -0.28348,-3.30729 z"
+ style="display:inline;fill:#191d1f;stroke:none;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499998, 0.26499998;stroke-dashoffset:0" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499998, 0.26499998;stroke-dashoffset:0"
+ d="m 65.177836,238.95115 c 0,0 0.66146,4.34673 -0.18898,6.37835 0,0 -0.51972,3.44903 -0.75595,4.016 l 0.33072,0.18899"
+ id="path2376"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6"
+ sodipodi:nodetypes="cccc" />
+ <path
+ embroider_max_stitch_length_mm="4"
+ embroider_row_spacing_mm="1.8"
+ embroider_angle="135"
+ inkscape:connector-curvature="0"
+ id="path2132-3"
+ d="m 65.225086,238.85666 2.74033,-1.55915 6.56734,-3.35454 c 0,0 9.21316,-3.92151 10.2526,-4.06324 0,0 5.29167,-1.74815 7.70126,-1.08669 0,0 3.92151,0.42523 5.33892,4.11049 0,0 1.37016,5.33892 -0.61421,9.6384 0,0 -1.6064,5.5279 -3.16555,7.51227 0,0 -1.84263,2.78758 -3.30729,3.68527 0,0 -1.84264,0.70871 -3.2128,0.37798 0,0 -11.67002,-2.03162 -13.13467,-2.26786 l -6.14212,-1.32292 -4.01599,-1.13392 c 0,0 1.27567,-5.90588 1.27567,-7.2288 0,0 -0.0472,-2.74033 -0.28349,-3.30729 z"
+ style="display:inline;fill:#191d1f;stroke:none;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499998, 0.26499998;stroke-dashoffset:0" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499998, 0.26499998;stroke-dashoffset:0"
+ d="m 64.232896,249.3455 2.69309,0.8032 1.5119,-0.28349 1.01581,-0.3071 0.98841,-0.55054 0.7684,-0.80181 0.58465,-0.95214 0.25056,-1.11919 -0.20045,-1.20272 -0.48443,-0.65147 -0.65147,-0.56794 -1.03567,-0.23386 -0.0835,-0.51784 -1.52009,-0.4009 -1.31964,-0.91874 -0.71829,-1.00226 -0.15034,0.35079"
+ id="path2883"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 70.492216,236.31227 1.75395,-0.98555 m -1.13589,1.1693 1.80407,-1.05237 m -0.43432,1.53679 1.15261,-0.96885 m -0.48443,2.00452 1.60362,-0.8018 m -1.93771,2.57246 c 0.18375,0.0167 2.32191,0.0668 2.32191,0.0668 m -3.62485,1.45328 c 0.10023,0.0167 2.2885,0.75169 2.2885,0.75169 m -3.70837,-0.33408 c 0.0668,0.10022 1.03567,2.03793 1.03567,2.03793 m -2.13815,-2.3052 c 0.0167,0.10023 0.0668,2.6727 0.0668,2.62258 m -1.03568,-3.29075 c -0.0334,0.0835 -0.73499,2.65599 -0.73499,2.52235 m 0.0668,-3.49121 -1.62031,1.921 m 1.05237,-2.92326 -1.63703,1.21942 m 1.05237,-1.75396 0.11694,0.50113 c 0,0 -0.18375,1.75396 1.23611,2.99008 0,0 1.06909,1.01897 2.68941,0.7517 0,0 1.68714,-0.20045 2.57247,-1.48669 0,0 1.13589,-1.31964 0.7851,-2.95667 0,0 -0.16704,-0.88533 -0.90203,-1.50339 0,0 -0.81852,-0.58465 -2.45554,-0.41761 m -5.0113,2.73952 c 0,0 0.73498,2.77292 1.30293,3.107 0,0 0.91874,1.28624 2.82304,1.38646 0,0 1.80407,0.25057 3.50791,-1.30293 0,0 1.63703,-1.65374 1.46998,-3.34087 0,0 0.18375,-1.20272 -0.96885,-2.40543 0,0 -0.81851,-0.81851 -2.15486,-0.68488"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path3157" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0"
+ d="m 71.260616,235.6608 -1.67044,0.81851 -0.25056,0.7517 -0.21716,0.88533 0.13364,0.71829 0.41021,0.63624 0.68508,0.4016 0.79139,0.0236 0.61421,-0.25986 0.42523,-0.38979 0.25985,-0.42522"
+ id="path3410"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 70.126966,236.36438 -1.06306,0.5079 m 0.87407,0.10631 -1.13393,0.56696 m 1.11031,0.86226 c -0.0473,0.0354 -1.45285,0.51972 -1.45285,0.51972 m 2.008,0 c 0,0 -1.34654,1.22842 -1.29929,1.16936 m 1.77176,-0.77957 c 0,0 -0.48428,1.27567 -0.46066,1.21661 m 1.24024,-1.55915 0.33073,0.96856 m 0.12993,-1.38197 0.66146,0.22442 m -0.25987,-0.34254 c 0,0 -0.0827,0.83863 -0.89769,1.32291 0,0 -0.63783,0.4961 -1.54734,0.17718 0,0 -0.92131,-0.22442 -1.19298,-1.42922 0,0 -0.0827,-0.72052 0.14174,-1.19299 l 0.22442,-0.69689 m 3.16555,1.80719 c 0,0 -0.0827,0.79139 -0.93313,1.19299 0,0 -0.73233,0.43704 -1.48828,-0.0473 0,0 -0.68508,-0.43703 -0.74414,-1.20479 0,0 -0.0591,-0.79139 0.42522,-1.37017 l 0.23624,-0.69689"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path3680" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0"
+ d="m 69.690406,236.49602 2.3052,-1.23612 2.53906,-1.30294 3.17382,-1.36976 3.94223,-1.57021 4.10927,-1.43657 3.34087,-0.7684 1.73725,-0.16704 1.36976,0.0668 0.63476,1.20271 1.00226,1.63703 0.46773,1.97111 -0.53455,2.37201 -1.33634,1.87089 -2.03793,1.06908 -2.10475,0.0668 -1.63703,-0.66817 -1.03567,-1.33635 -0.0167,-1.23612 0.40091,-1.50339 0.98555,-0.78511 0.80181,-0.31738 0.91874,0.0668 0.81851,0.36749 0.45102,0.60136 c 0,0 0.21716,0.53454 0.23386,0.66817 0.0167,0.13364 0.0167,0.66818 -0.0167,0.735 -0.0334,0.0668 -0.25056,0.65147 -0.25056,0.65147 l -0.48443,0.50112"
+ id="path3937"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 91.472876,229.1127 2.15486,0.13363 m -1.93771,1.25283 1.85418,-0.95215 m -1.60361,1.31965 2.92326,-0.0501 m -2.38872,1.77065 3.04019,-0.21716 m -2.82304,2.45554 2.82304,0.48443 m -4.17609,1.30294 2.40543,1.45328 m -4.2095,-0.58466 1.05238,2.37202 m -2.53906,-2.40542 c -0.0334,0.0835 -0.16705,2.15486 -0.16705,2.15486 m -0.98555,-2.88986 c -0.10023,0.0668 -1.65373,1.5368 -1.65373,1.5368 m 1.40316,-3.20723 -2.18827,0.0167 m 3.34087,-0.95213 -0.20045,-2.17157 m 1.23612,2.22168 c 0,0 1.41987,-1.83748 1.33635,-1.77066 m -0.95215,2.48895 1.95441,-0.33409 m -1.87089,1.5368 0.7684,0.91874 m -0.83522,-0.0167 c 0,0 0.85192,-0.56795 1.06908,-1.33635 0,0 0.48443,-1.00226 -0.46772,-2.20497 0,0 -1.26953,-1.25283 -2.97337,-0.33409 0,0 -1.82078,1.00226 -1.68714,2.97338 0,0 -0.10023,1.82077 1.87089,2.99008 0,0 1.83747,0.96885 4.2262,-0.0501 0,0 2.35531,-1.16931 3.02348,-2.97338 0,0 0.93544,-1.78737 0.56795,-3.59144 0,0 -0.16704,-1.58691 -1.5368,-2.90655 l -0.0334,-0.56795 m -4.12597,7.75082 c 0,0 0.7684,-0.50113 0.80181,-1.16931 0,0 0.31738,-0.88533 -0.53454,-1.78736 0,0 -1.30294,-0.96885 -2.65599,0.18375 0,0 -1.18601,1.08578 -0.63477,2.67269 0,0 0.80181,1.87089 2.93997,1.77066 0,0 2.45554,-0.20045 3.55802,-1.9377 0,0 1.01897,-1.23612 0.98556,-2.53906 0,0 0.10022,-1.58692 -0.60136,-2.58918 0,0 -0.43431,-0.73499 -0.90203,-1.03567 l -0.3842,-1.60361"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path4260" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0"
+ d="m 92.608766,228.77861 1.36976,0.40091 1.26953,0.56794 1.46998,1.26953 1.10249,1.87089 0.36749,2.10475 0.13364,2.20497 -0.26727,2.73951 -0.66818,2.40543 -0.70158,1.87089 -1.06908,2.93996 -1.03567,2.00452 -0.93544,1.50339 -1.10249,1.30294 -1.5702,0.66818 -1.02465,0.18573 -1.54734,0.17718 -1.16937,-0.42522 -1.06305,-0.53153 -0.70871,-0.70871 -0.69689,-0.96856 -0.41342,-1.19299 -0.0118,-1.48828 0.24805,-1.29929 0.79139,-1.4056 0.98037,-0.99219 1.05125,-0.55515 1.14574,-0.14174 0.95675,0.1063 0.75595,0.33073 0.59059,0.64965 0.35436,0.63783 0.12992,0.95676 -0.14174,0.85044 -0.42522,0.72052 -0.51972,0.49609 -0.73233,0.28349 -0.87407,0.0354 -0.61421,-0.22442 -0.43703,-0.30711 -0.28348,-0.35435"
+ id="path4521"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 92.108646,251.7551 -1.32292,1.85444 m 0.48428,-2.10249 -0.98037,2.01981 m -0.8977,-2.008 c 0,0.0473 0.12993,2.1143 0.12993,2.1143 m -1.54734,-2.23242 c -0.0118,0.0472 -0.37797,2.12612 -0.37797,2.12612 m -1.31111,-3.20099 c -0.0473,0.0473 -0.93313,2.05525 -0.93313,2.05525 m 0.16537,-3.11831 -1.50009,1.58278 m 1.26385,-2.95294 c -0.0472,0.0118 -2.2088,0.22443 -2.2088,0.22443 m 3.15374,-2.4096 c -0.0472,-0.0236 -2.33872,-0.56697 -2.33872,-0.56697 m 3.89788,-0.76776 c 0,0 -1.07487,-1.81901 -1.12212,-1.85445 m 2.62221,1.73633 c 0,0 0.98037,-1.65365 0.9095,-1.6064 m 0.11812,2.57497 c 0.0709,-0.0118 1.67727,-1.06306 1.74814,-1.11031 m -1.79539,2.09068 c 0.0472,0.0591 1.8072,0.14174 1.8072,0.14174 m -2.46865,0.63784 c 0.0354,0.0709 1.3111,1.54734 1.3111,1.54734 m -2.04343,-1.13393 0.0591,1.78357 m -1.06306,-2.09068 c -0.0709,0.0591 -0.63784,1.27567 -0.63784,1.27567 m 0.0472,-1.26386 c 0,0 0.30711,0.98038 1.46466,1.06306 0,0 1.19299,0.10631 1.83082,-0.81501 0,0 0.74414,-0.93313 0.41342,-2.07887 0,0 -0.55516,-1.83082 -2.62221,-1.61821 0,0 -1.13393,0.0827 -2.04344,0.88588 0,0 -1.14574,1.15756 -1.32292,2.06706 0,0 -0.46065,1.58278 -0.14174,2.55134 0,0 0.31892,1.50009 1.48829,2.38598 0,0 1.28748,1.0158 2.94112,0.93312 0,0 1.31111,-0.15355 1.83082,-0.49609 l 1.25205,0.24805 m -5.30348,-5.04362 c 0,0 0.36617,1.07487 1.42922,1.32291 0,0 1.37017,0.30711 2.35055,-0.8032 0,0 0.92131,-0.95675 0.73232,-2.18517 0,0 -0.29529,-2.57496 -3.04743,-2.59859 0,0 -2.38597,-0.21261 -4.016,2.68127 0,0 -0.89769,1.57097 -0.59059,3.62621 0,0 0.12993,1.45285 1.6064,2.9175 0,0 1.38198,1.31111 3.37817,1.31111 0,0 1.19298,-0.0118 1.52371,-0.16537 l 0.79139,0.0945"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path4815" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0"
+ d="m 91.857076,252.83287 -1.08579,0.91874 -1.67043,0.41761 -1.40317,0.0167 -2.00452,-0.41762 -2.87314,-0.46772 -3.47451,-0.60135 -2.38872,-0.43432 -2.20497,-0.35079 -2.88986,-0.61806 -2.88985,-0.56794 -1.65373,-0.50114 1.43658,-0.45101 1.58691,-0.70159 0.98556,-1.03566 0.4768,-0.83116 0.23623,-1.004 -0.16536,-1.14574 -0.51972,-0.8032 -0.95675,-0.63783 -0.82682,-0.0945 -0.85045,0.22442 -0.63783,0.53153 -0.2953,0.51972 -0.16536,0.51972 0.0591,0.6024 0.27167,0.54334 0.47247,0.4016"
+ id="path5080"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 67.457506,249.81797 1.58278,0.43703 m -0.93313,-0.86225 1.83082,0.48428 m -0.37797,-1.27567 c 0.0354,0.0472 0.9095,0.96856 0.9095,0.96856 m 0.0945,-1.9135 c 0.0591,0.0354 0.81501,1.24023 0.81501,1.24023 m -0.81501,-4.67746 c 0,0 1.14574,-0.83863 1.07487,-0.80319 m -2.03163,0.61421 0.23624,-1.32292 m -1.08668,1.6064 -0.82682,-0.83864 m 0.38978,1.48829 -1.24023,-0.15356 m 1.29929,0.8032 -1.27567,0.77958 m 1.46466,-0.0945 c -0.0236,0.0472 -0.47247,1.004 -0.46066,0.95675 m 0.56697,-0.35435 c 0,0 -0.76777,-0.36617 -0.88589,-1.18118 0,0 -0.1063,-1.1103 0.77958,-1.70089 0,0 1.02762,-0.73233 2.05525,-0.15355 0,0 0.93313,0.43703 1.09849,1.52371 0,0 0.28348,1.0985 -0.38979,2.25605 0,0 -0.74414,1.31111 -2.13793,1.75995 0,0 -0.49609,0.16537 -0.94494,0.21261 l -0.95675,0.64965 m 1.33473,-3.2128 c 0,0 -0.87407,-0.22443 -1.08668,-1.39379 0,0 -0.0827,-0.88588 0.6024,-1.61821 0,0 0.61421,-0.56697 1.2048,-0.64965 0,0 0.6024,-0.0827 0.85044,0 0,0 1.12212,0.15356 1.68908,1.24024 0,0 0.62603,1.28748 0.0827,2.59859 0,0 -0.36616,0.89769 -0.88588,1.45284 0,0 -0.55515,0.74414 -2.09067,1.28748 l -0.6969,0.55515"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path5372" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0"
+ d="m 67.886336,250.39404 -3.64155,-1.00227 c 0,0 0.53454,-2.27179 0.56795,-2.57246 0,0 1.20271,-5.21176 0.4009,-7.45014"
+ id="path5646"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 64.870736,247.59736 -0.56697,3.1183 m 2.38598,-2.88207 -0.68508,3.56715 m 7.27604,-2.07887 -0.63784,3.40179 m 12.11887,-0.82682 -0.73233,3.56715 m 5.17355,-3.44904 c 0,0.0945 -0.47247,3.85064 -0.47247,3.85064 m 1.98437,-4.27586 1.58278,3.28367 m -0.73233,-4.29948 3.04743,1.27567 m -2.88207,-2.45684 c 0.14174,0.0709 3.26005,1.55915 3.26005,1.55915 m -1.7009,-2.12612 2.17337,1.03944 m 0.18898,-6.70908 2.71671,1.2048 m -2.64583,-6.47285 3.9215,1.79539 m -3.1183,-5.57515 c 0.11811,-0.0236 3.21279,-0.28348 3.21279,-0.28348 m -4.65383,-2.17336 3.26005,-1.84264 m -5.26805,0.82683 0.92132,-2.71671 m -2.50409,3.33092 0.3071,-3.80339 m -1.6064,3.33092 0.0945,-3.23642 m -3.56715,3.23642 0.73233,-3.04743 m -6.7327,5.38615 -0.21262,-3.28366 m -6.18936,6.35472 -1.13392,-3.77976 m -6.85082,7.32329 -0.85045,-2.92932 m -0.54334,1.51191 0.8032,-0.37798 4.20499,-2.24423 4.03961,-2.05525 3.09469,-1.44103 3.00018,-1.2993 2.19699,-0.89769 2.24423,-0.77957 c 0,0 4.06325,-1.58278 7.11068,-1.34654 0,0 3.44903,0.42522 5.45703,2.78757 0,0 1.93713,1.77176 1.81901,5.66964 0,0 -0.0236,6.77995 -4.27585,13.63077 0,0 -1.51191,3.99237 -5.07906,4.8192 0,0 -4.65383,-0.18899 -6.56734,-0.70871 0,0 -18.23735,-3.80338 -18.96968,-4.016 m 1.2048,-10.84319 1.25205,-0.49609 c 0,0 6.26023,-3.18918 6.68545,-3.40179 0,0 7.74852,-3.59077 8.85882,-3.82701 0,0 5.90588,-2.3151 8.10287,-2.03162 0,0 0.56696,1.15755 1.58277,0.94494 0,0 0.92132,-0.21261 1.74814,-0.8032 0,0 3.16555,1.01581 3.94513,3.94513 0,0 0.92131,2.62221 -0.16537,6.89806 0,0 -0.8032,4.1105 -3.37816,8.76433 0,0 -0.75595,-0.14174 -1.13393,0.47247 0,0 -0.4016,0.61421 -0.0473,1.15755 0,0 -0.96856,2.008 -3.09468,2.7167 0,0 -2.008,0.16537 -5.26804,-0.49609 0,0 -9.52028,-1.65365 -10.44159,-2.008 0,0 -5.5279,-1.18118 -6.26023,-1.44103 0,0 -1.2993,-0.0709 -2.1025,-1.03944 l -0.92131,-0.51972"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path5963" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0"
+ d="m 64.311606,248.79042 c 0,0 -0.30068,1.90429 -0.63477,2.73951"
+ id="path6240"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_row_spacing_mm="1.8"
+ embroider_max_stitch_length_mm="4"
+ embroider_angle="45"
+ inkscape:connector-curvature="0"
+ id="path6518"
+ d="m 63.743656,251.29607 2.3052,1.06908 3.34087,1.1693 3.30746,0.90203 4.2429,1.06908 4.14268,0.70159 4.24291,0.23386 3.37427,0.0334 2.3052,-0.0334 -1.43657,4.20949 -2.07134,4.94449 -1.73725,4.07586 -1.1693,2.53906 -0.70159,1.03567 -0.96885,0.63476 -1.30294,0.0334 -2.3052,-0.43431 -1.83748,-0.83522 -2.83973,-1.90429 -3.0402,-2.57247 -3.17382,-3.20724 -2.80633,-3.14041 -2.43883,-2.6727 -1.67044,-2.00452 0.7684,-1.73725 1.03567,-2.47224 z"
+ style="display:inline;fill:#191d1f;stroke:none;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499998, 0.26499998;stroke-dashoffset:0" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499998, 0.26499998;stroke-dashoffset:0"
+ d="m 63.810476,251.26266 -0.70158,2.10475 -1.10249,2.63928 -0.46772,1.06908"
+ id="path6798"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_row_spacing_mm="1.8"
+ embroider_max_stitch_length_mm="4"
+ embroider_angle="135"
+ inkscape:connector-curvature="0"
+ id="path6518-6"
+ d="m 63.743656,251.29607 2.3052,1.06908 3.34087,1.1693 3.30746,0.90203 4.2429,1.06909 4.14268,0.70158 4.24291,0.23386 3.37427,0.0334 2.3052,-0.0334 -1.43657,4.20949 -2.07134,4.94449 -1.73725,4.07586 -1.1693,2.53906 -0.70159,1.03567 -0.96885,0.63476 -1.30294,0.0334 -2.3052,-0.43431 -1.83748,-0.83522 -2.83973,-1.90429 -3.0402,-2.57247 -3.17382,-3.20724 -2.80633,-3.14041 -2.43883,-2.6727 -1.67044,-2.00452 0.7684,-1.73725 1.03567,-2.47224 z"
+ style="display:inline;fill:#191d1f;stroke:none;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499998, 0.26499998;stroke-dashoffset:0" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499998, 0.26499998;stroke-dashoffset:0"
+ d="m 61.505276,257.14259 c 0,0 0.80181,-1.80407 0.96885,-2.20497 0,0 1.10249,-2.97338 1.23612,-3.54132 l 1.70385,0.63476 1.57021,0.66817 2.47224,0.80181 2.63929,0.7684 2.83973,0.73499 3.07361,0.63477 2.83973,0.50113 2.70611,0.20045 2.33861,0.10023 1.36975,0.46772 0.90204,1.06908 0.73499,1.23612 -0.16705,1.83748 -0.43431,0.93544 -0.66817,0.55125 -1.03567,0.85192 -1.06908,0.3842 -1.06908,-0.0501 -1.13589,-0.46773 -0.50113,-0.7851 -0.20046,-1.00226 0.3675,-1.01897 0.3842,-0.4176 0.61806,-0.33409 0.51783,-0.10023 0.40091,0.0501 0.4009,0.18375 0.31738,0.26727 0.20046,0.3675"
+ id="path7377"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 86.127486,256.62476 2.15486,0.0668 m -2.25509,0.4343 c 0.0668,0 2.3219,-0.0167 2.3219,-0.0167 m -1.41987,1.05237 1.8876,-0.61806 m -1.03567,1.78737 1.62032,-0.85192 m -1.80407,1.85418 1.62032,-0.40091 m -2.07134,1.5201 c 0.10023,0.0334 1.97111,0.7684 1.97111,0.7684 m -2.82303,0.11693 c 0,0 1.01896,1.73725 1.00226,1.67043 m -2.18827,-1.23612 c 0,0 0.11693,1.9377 0.10023,1.85418 m -1.1359,-2.07134 c 0,0 -0.53454,1.73726 -0.53454,1.67044 m -0.0501,-2.40543 -1.1526,1.08578 m 1.1526,-1.87088 -1.5368,0.15034 m 2.07134,-0.70159 c 0,-0.0835 -1.10249,-1.20271 -1.10249,-1.20271 m 1.80407,1.18601 0.40091,-1.77066 m 0.20045,1.9043 0.96885,-0.83522 m -0.26727,0.95215 c 0,0 -0.30068,-1.63703 -2.08804,-1.16931 0,0 -1.1526,0.31738 -1.45328,1.62032 0,0 -0.33409,1.43658 0.86862,2.35531 0,0 1.28624,0.88534 2.75622,0.3675 0,0 1.36976,-0.46772 2.02123,-1.36976 0,0 1.41987,-1.72054 0.70158,-4.02574 0,0 -0.33409,-0.86863 -0.98556,-1.38646 l -0.0167,-0.63477 m -2.02123,4.27631 c 0,0 -0.4176,-1.35305 -1.78736,-0.88533 0,0 -1.1526,0.3675 -1.1693,1.70385 0,0 -0.0501,1.23612 1.40316,1.80407 0,0 1.82077,0.55124 3.25735,-1.03567 0,0 0.95215,-1.01897 0.88533,-2.12145 0,0 0.16704,-0.95215 -0.46772,-1.93771 0,0 -0.71829,-1.03567 -1.50339,-1.13589 l -0.0167,-0.70159"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path7693" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0"
+ d="m 86.996106,256.45771 h 1.30294 1.60362 l 1.10248,-0.0167 -0.96885,2.85644 -1.58691,3.97564 -1.1693,2.83974 -0.90204,2.15486 -0.70158,1.41987 -0.3842,-1.10249 -0.31739,-1.18601 -0.86862,-1.11919 -1.36976,-0.65147 -1.20271,-0.0835 -1.1693,0.4009 -0.91874,0.7517 -0.3675,0.88533 -0.13363,0.7684 0.31738,0.85192 0.65147,0.56795 0.73499,0.13363 0.80181,-0.18375 0.45102,-0.38419 0.35079,-0.55125 0.0668,-0.55124"
+ id="path7982"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 84.757726,270.84015 1.35305,-2.62258 m -1.68714,1.36976 1.60362,-2.3052 m -2.03793,0.90203 1.5535,-1.63702 m -2.62258,0.20045 1.43658,-1.70385 m -2.53906,1.45328 0.71828,-2.10474 m -1.67043,2.23838 -1.08579,-1.5368 m 0.50113,2.23838 -2.22167,0.0167 m 2.10474,1.1025 -1.62032,1.26953 m 2.15486,-0.83521 c 0.0167,0.10022 -0.23386,2.05463 -0.21715,1.9544 m 0.95214,-2.15486 c 0.0668,0.10023 0.93545,1.31965 0.93545,1.31965 m -0.60136,-1.83748 1.28624,-0.15034 m -0.81852,-0.4176 c 0,0 0.68488,1.1526 -0.50113,2.08804 0,0 -0.75169,0.63476 -1.75395,0.25057 0,0 -0.96885,-0.26728 -1.21942,-1.55351 0,0 -0.13364,-1.5368 1.1526,-2.50565 0,0 1.65373,-1.23612 3.54132,-0.35079 0,0 1.80407,0.61806 2.22168,2.80633 l 0.15034,1.1526 m -3.77519,-1.80407 c 0,0 0.58466,1.31964 -0.90203,1.921 0,0 -1.45328,0.48442 -1.88759,-1.25283 0,0 -0.21716,-1.28623 1.31964,-2.15486 0,0 1.921,-0.96885 3.4578,0.63477 0,0 0.91874,0.56794 0.90204,2.50565 l 0.16704,1.72055"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path8296" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0"
+ d="m 85.635806,269.87433 -0.75596,1.70089 -0.47247,0.94494 -0.54334,0.73233 -0.89769,0.61421 -1.32292,0.0473 -1.48828,-0.23623 -1.81901,-0.61421 -1.48828,-0.82682 -2.24423,-1.48828 -1.98438,-1.6064 -1.70089,-1.63003 -1.55915,-1.55915 -1.65365,-1.77176 -1.63002,-1.79539 -1.53553,-1.67727 -0.82682,-0.87407 0.0472,-1.46465 0.21261,-1.6064 0.94494,-1.58278 1.51191,-0.92132 1.67726,-0.37797 1.48828,0.28348 0.94495,0.63783 0.73233,1.03944 0.21261,1.39379 -0.23624,0.92132 -0.92132,1.0158 -1.22842,0.33073 -0.74414,-0.15355 -0.63783,-0.4016 -0.35436,-0.74414 -0.0118,-0.82682 0.21261,-0.49609 0.2953,-0.43704 0.35435,-0.24805"
+ id="path8589"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 64.894356,260.66116 -1.9135,-2.16155 m 1.7127,1.06306 -1.67727,-1.59459 m 1.59459,0.24805 -1.45285,-1.02763 m 1.88989,-0.37797 -1.53553,-1.004 m 2.44503,-0.17718 -1.18117,-1.39378 m 2.59858,0.62602 -0.6024,-1.72452 m 1.84263,1.53553 c 0,0 0.16537,-1.55915 0.15356,-1.5119 m 1.05125,2.09067 c 0,0 1.18117,-1.4174 1.12211,-1.35835 m -0.41341,2.43322 1.52372,-0.88588 m -1.48828,2.05525 1.61821,-0.15355 m -2.4096,1.01581 c 0.0472,0.0354 1.13393,1.28748 1.13393,1.28748 m -2.06706,-1.18118 c 0,0 0.15355,1.83082 0.17718,1.77177 m -0.90951,-2.31511 c 0,0 -0.99219,1.4056 -0.95675,1.34654 m 0.93313,-2.19698 -1.47647,0.42522 m 1.87807,-1.004 -0.59059,-0.76776 m 0.67327,0.41341 c 0,0 -0.83864,0.3071 -1.01581,1.1103 0,0 -0.31892,0.96857 0.53153,1.66546 0,0 0.95675,0.68508 1.92531,0.0827 0,0 1.05125,-0.47247 1.16937,-1.77176 0,0 0.17717,-1.07487 -0.79139,-2.07887 0,0 -1.3111,-1.19299 -2.84664,-0.79139 0,0 -1.37016,0.17718 -2.07886,1.02762 0,0 -0.95676,0.83864 -1.13393,1.94895 0,0 -0.31892,1.1103 0.21261,2.35054 l 0.15355,1.15755 m 3.79158,-4.86645 c 0,0 -0.74414,0.21261 -1.0985,0.88588 0,0 -0.63783,0.98038 0.16537,2.13793 0,0 0.85045,1.01581 2.19698,0.66146 0,0 1.34655,-0.38979 1.79539,-1.57096 0,0 0.63784,-1.31111 0.0236,-2.55134 0,0 -0.24804,-0.51972 -0.60239,-0.86226 0,0 -1.37017,-1.2048 -3.55534,-1.13393 0,0 -1.6064,0.22443 -2.63402,1.32292 0,0 -1.39379,1.19299 -1.46466,3.34273 l 0.15355,1.27567"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path8915" />
+ <path
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0"
+ d="m 64.138406,260.24775 -1.44103,-1.65365 -1.18118,-1.47647"
+ id="path9212"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="1.6" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 92.699236,256.43255 -3.37817,-0.23623 m 2.71671,1.46466 -3.44903,-0.47248 m 2.69308,2.69308 -3.49628,-0.85044 m 2.55134,3.35454 -2.71671,-0.92132 m 0.96857,4.89007 -2.4096,-1.08668 m 0.49609,5.69326 -2.3151,-1.34654 m 0.82682,3.66164 -1.93713,-2.85844 m -0.0709,4.39397 -0.61421,-3.85063 m -1.70089,3.96875 1.01581,-3.70889 m -2.76395,3.49628 1.29929,-4.3231 m -2.52772,3.59077 0.4961,-2.88207 m -2.55134,1.74814 0.73233,-2.88207 m -5.48066,-0.35435 1.44104,-3.44903 m -5.10268,0.25986 1.84263,-3.33092 m -5.59877,-1.34654 1.67727,-2.90569 m -3.99237,-0.35435 1.06305,-2.38598 m -0.62602,0.33073 0.41341,0.48428 3.00019,3.53172 2.52772,2.82301 1.67727,1.75995 c 0,0 2.16155,2.25604 2.43322,2.4096 0,0 1.47647,1.35835 1.63002,1.50009 0,0 3.08287,2.65765 4.8192,3.42541 0,0 0.77957,-1.21661 2.01981,-0.96856 0,0 1.14574,0.0945 1.24023,1.27567 0,0 2.13793,-0.11812 3.02381,-1.96075 l 1.41741,-3.02382 1.73633,-4.13411 0.42522,-1.03943 c 0,0 0.93313,-1.77177 0.6969,-4.00419 0,0 0.33577,-1.41894 1.10417,-2.67177 m -28.661,1.70321 0.37797,0.57877 c 0,0 2.36236,2.83482 2.76396,3.24823 l 2.69308,3.00019 c 0,0 2.06706,2.19699 2.26785,2.35054 0,0 3.2128,3.20099 3.89788,3.62621 0,0 3.53172,3.012 5.53972,3.56715 0,0 2.63402,0.94494 4.14592,0.42522 0,0 1.2993,-0.27167 1.97257,-1.46465 l 1.24023,-2.83483 1.53553,-3.55533 1.54734,-3.70889 1.41741,-3.35454 1.02762,-2.49228 0.48428,-1.38198"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path9544" />
+ <path
+ id="path9867"
+ style="display:inline;fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 64.114786,252.9599 0.75595,-2.29149 m 1.03943,3.18918 1.2993,-2.45685 m 1.5119,3.28367 1.01581,-2.24423 m 2.14974,3.33091 1.15756,-2.55134 m 2.17336,3.42541 1.13393,-2.66946 m 2.33872,3.16556 0.54334,-2.92932 m 3.92151,3.47266 -0.11812,-2.76395 m 2.66946,3.00018 0.35435,-2.88207 m 3.28367,2.74033 0.25986,-2.52772 m 1.29929,2.71671 0.23623,-2.78757 m 0.54334,1.81901 -2.33872,0.0709 c 0,0 -5.36254,0.11811 -7.37054,-0.23624 0,0 -6.96893,-0.77957 -10.93768,-2.19698 0,0 -5.55153,-1.6064 -6.80357,-2.31511 l -0.73233,-0.35435 m 28.70256,3.56715 c 0,0 -2.52771,0.49609 -3.68527,0.4016 0,0 -5.45703,0.0473 -7.39415,-0.35435 0,0 -5.17355,-0.73233 -6.33111,-1.15756 0,0 -6.40197,-1.63002 -7.60677,-2.26785 0,0 -2.45684,-0.77958 -3.28367,-1.39379"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_running_stitch_length_mm="1.6"
+ inkscape:connector-curvature="0"
+ id="path10189"
+ d="m 63.713186,251.40074 c 0,0 0.49609,-2.03162 0.66146,-2.69308"
+ style="fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.26499999, 0.26499999;stroke-dashoffset:0" />
+ <path
+ id="path10503"
+ style="fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 62.957236,244.07745 4.06324,0.14174 m -4.51209,1.18118 c 0.0945,0.0236 4.53571,0.54334 4.53571,0.54334 m -4.25223,1.93713 3.14193,0.42522 m -0.63784,0.75596 c 0,0 1.03944,-3.30729 0.92132,-5.03181 m -2.97656,4.7247 c 0,0 0.85044,-2.90569 0.51971,-4.7247"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 62.579256,248.61317 3.49628,1.01581 m -4.48847,0.33073 4.18136,0.99219 m -4.41759,0.89769 3.61439,1.37016 m -4.67745,0.92132 4.01599,1.1103 m -5.76413,3.35454 3.80338,1.74815 m -7.01618,3.827 c 0.11812,0.0945 4.60658,0.87407 4.60658,0.87407 m -6.94531,2.5041 c 0.0709,0.0945 4.25223,1.03943 4.25223,1.03943 m -5.78776,2.05525 c 0.0473,0.11811 3.26005,2.48046 3.26005,2.48046 m -4.512094,-0.28348 c 0.0945,0.16537 1.393794,3.70889 1.393794,3.70889 m -2.078874,-3.1183 0.0709,4.84282 m -2.07887,-8.03199 -1.93713,3.70889 m -1.13393,-7.86663 c 0,0 -1.72451,3.82701 -1.67727,3.73251 m -0.61421,-9.80375 -2.36235,3.94512 m 0.61421,-7.39416 -2.36235,3.96875 m 0.96856,-7.74851 c 0,0 -3.28366,3.18917 -3.23642,3.09468 m 2.48047,-6.00037 c -0.0945,0.0945 -2.88207,2.95294 -2.88207,2.95294 m 2.48047,-6.09487 -3.75614,2.22061 m 3.35454,-4.7247 -3.75614,0.51972 m 3.35454,-2.4096 -3.35454,0.33073 m 4.08687,-2.64584 -3.23642,-1.29929 m 3.56715,-0.44885 -2.26786,-1.65364 m 3.89788,0.68508 -3.40178,-1.81901 m 3.49628,0.59059 -2.69308,-1.91351 m 3.09468,1.32292 -2.03163,-2.22061 m 4.25224,1.77176 -2.03163,-3.47265 m 5.14993,3.63802 -0.68508,-3.94513 m 3.47265,5.43341 c 0.0236,-0.0945 0.47247,-4.25223 0.47247,-4.25223 m 1.65365,5.31529 0.37798,-3.51991 m 2.385974,1.77177 c 0,0 -0.23623,-3.89788 -0.28348,-3.80339 m 2.74033,2.74033 -0.59059,-3.59077 m 3.66164,4.3231 -0.0236,-4.20499 m 1.7954,4.60659 1.74814,-4.03962 m -1.2993,4.65383 3.99238,-2.52772 m -2.1025,3.70889 3.11831,-1.72451 m -2.8112,3.59077 3.9215,-1.86626 m -3.70889,5.2208 3.80339,-0.0945 m -1.03944,1.84264 c 0,0 0.18899,-2.52772 0.0945,-3.14193 0,0 -0.23624,-2.48047 -0.70871,-3.68527 0,0 -0.85044,-2.57496 -2.48046,-4.29948 0,0 -3.26005,-2.33872 -7.06344,-1.25204 0,0 -3.56715,0.92132 -5.386164,3.37816 0,0 -2.50409,-3.87426 -8.05562,-3.09468 0,0 -2.2206,0.16537 -5.05543,2.36235 0,0 -0.54334,0.28348 -0.66145,0.70871 0,0 -0.16537,0.51971 0.0236,0.92131 0,0 -2.07887,2.55134 -2.24423,6.52009 0,0 -0.21262,4.9137 1.06305,8.17374 0,0 1.03944,3.59077 2.48047,6.52009 0,0 2.43322,5.45703 3.54353,7.25242 0,0 4.03962,7.81938 7.86663,11.90625 0,0 2.385974,-2.69308 4.086874,-5.26805 0,0 6.02399,-9.0478 7.98474,-13.72526 0,0 3.33092,-6.96893 3.89788,-9.87463 m -1.72451,-3.30729 c 0,0 -0.0236,-0.7087 -0.0709,-0.94494 0,0 1.08668,-0.99219 1.06306,-2.57496 0,0 0.18899,-2.24423 -1.06306,-4.91369 0,0 -0.92132,0.42522 -1.44104,-0.37798 0,0 -0.47247,-0.56696 0,-1.48828 0,0 -2.43322,-1.63002 -4.81919,-1.27567 0,0 -2.92932,-0.0709 -6.921694,3.56715 0,0 -2.83482,-3.04743 -6.66183,-3.18917 0,0 -1.53553,0.11812 -2.1025,0.3071 0,0 -2.33872,0.75596 -2.81119,1.39379 0,0 0.56696,0.56696 -0.16537,1.58278 0,0 -0.37797,0.63783 -1.34654,0.4016 0,0 -2.76395,5.38616 -0.42522,7.46503 0,0 -0.51972,3.26004 1.15755,7.34691 0,0 -0.59059,0.59059 -0.7087,1.06306 0,0 1.44103,4.27585 2.3151,5.76413 0,0 3.35454,7.41779 5.71689,10.84319 0,0 3.1183,4.70108 4.20498,5.59878 0,0 2.008004,-2.5041 2.456854,-3.09468 0,0 5.43341,-7.79576 6.96894,-11.67002 0,0 3.23642,-6.85082 3.80338,-8.26823 0,0 -0.0945,-0.49609 -0.66146,-1.03943 0,0 1.01582,-2.69308 1.13393,-3.47266"
+ style="fill:none;stroke:#191d1f;stroke-width:0.26499999;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path10886" />
+ </g>
+</svg>
diff --git a/images/examples/InkStitch Multi Color.svg b/images/examples/InkStitch Multi Color.svg
index ba8364f0..9d4b11e0 100644
--- a/images/examples/InkStitch Multi Color.svg
+++ b/images/examples/InkStitch Multi Color.svg
@@ -2,6 +2,7 @@
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
+ xmlns:inkstitch="http://inkstitch.org/namespace"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
@@ -14,7 +15,7 @@
viewBox="0 0 101.6 101.6"
version="1.1"
id="svg8"
- inkscape:version="0.91+devel r"
+ inkscape:version="0.92.2 (unknown)"
enable-background="new"
sodipodi:docname="InkStitch Multi Color.svg">
<sodipodi:namedview
@@ -25,10 +26,10 @@
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
- inkscape:cx="186.52413"
+ inkscape:cx="55.709376"
inkscape:cy="107.28777"
inkscape:document-units="mm"
- inkscape:current-layer="g4828"
+ inkscape:current-layer="layer3"
showgrid="false"
inkscape:snap-global="false"
units="in"
@@ -47,356 +48,127 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title></dc:title>
+ <dc:title />
</cc:Work>
</rdf:RDF>
+ <inkstitch:thread-palette />
+ <inkstitch:client-overview-transform>&quot;matrix(2.23777, 0, 0, 2.23777, -204, -268)&quot;</inkstitch:client-overview-transform>
</metadata>
<g
- id="g4808">
- <path
- inkscape:connector-curvature="0"
- id="path4334"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="M 34.811856,55.028284 V 41.664807 m -3.140416,13.29666 v -13.29666"
- embroider_satin_column="True"
- embroider_trim_after="True"
- embroider_zigzag_spacing_mm="0.32"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay_spacing_mm="1.2" />
- <path
- inkscape:connector-curvature="0"
- embroider_zigzag_spacing_mm="0.33"
- embroider_zigzag_underlay_spacing_mm="1.2"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay="True"
- embroider_satin_column="True"
- d="M 44.233107,54.961467 44.099472,44.872042 M 41.35996,54.961467 41.293142,44.938859"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4357" />
- <path
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1"
- d="M 42.829942,44.938859 41.694047,41.798443"
- id="path4380"
- inkscape:connector-curvature="0"
- embroider_running_stitch_length_mm="2.5" />
- <path
- inkscape:connector-curvature="0"
- embroider_zigzag_underlay_spacing_mm="1.2"
- embroider_zigzag_underlay_inset_mm=".4"
- embroider_zigzag_underlay="True"
- embroider_zigzag_spacing_mm="0.33"
- embroider_satin_column="True"
- d="m 50.246671,55.362371 4.944486,-1.069078 m -6.61492,0 6.481284,-3.407688 m -10.089422,-0.334086 4.744032,-4.744032 m -9.354434,1.403164 5.345393,-5.612661 m -5.412208,2.605878 3.608139,-3.474503 m -2.071341,0.46772 11.02487,10.690783 0.133633,3.474503 m -11.759859,-14.098468 0.06682,4.944486 3.34087,1.870887 7.884451,7.349913"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4416" />
- <path
- embroider_trim_after="True"
- inkscape:connector-curvature="0"
- id="path4451"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 48.576237,45.874302 5.746295,-0.06681 m -5.87993,7.617174 6.614919,-2.605876 m -4.209494,4.877668 3.474505,-1.937705 m -1.336349,1.5368 -0.133633,-13.49711 m -0.400905,13.563928 -2.605879,-2.204974 0.133636,-11.425772"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm="0.33"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_spacing_mm="1.2"
- embroider_zigzag_underlay_inset_mm=".04" />
- <path
- inkscape:connector-curvature="0"
- id="path4508"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 62.035343,54.91994 -0.0945,-6.945313 m -3.023805,6.945313 0.09449,-6.992559"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm="0.33"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay_spacing_mm="1.2" />
- <path
- embroider_running_stitch_length_mm="2.5"
- inkscape:connector-curvature="0"
- id="path4539"
- d="m 60.334448,47.785639 0.04725,-5.811383"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- inkscape:connector-curvature="0"
- id="path4573"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 61.988093,41.59628 -0.04725,6.992559 m -2.929312,-7.039808 v 7.65402"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm=".33"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay_spacing_mm="1.2" />
- <path
- embroider_running_stitch_length_mm="2.5"
- inkscape:connector-curvature="0"
- id="path4608"
- d="m 62.366072,48.25811 2.787573,-2.504093 2.787573,-3.638021"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- inkscape:connector-curvature="0"
- embroider_trim_after="True"
- id="path4652"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 64.019718,42.257739 7.417781,0.14174 m -11.150298,5.953125 7.654017,-0.33073 m -3.307291,6.283854 7.039808,-0.141739 m -1.511906,-12.473215 -4.960937,6.3311 5.480655,6.992559 m -4.299479,-13.465402 -5.008184,6.898066 5.480653,6.567336"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm="0.33"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay_spacing_mm="1.2" />
- <path
- id="path4343"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 33.072916,68.10186 -0.09449,-3.401788 m -0.921322,3.000188 -1.275667,-2.976563 m 0.944938,3.071056 -3.071056,-1.086681 m 3.638021,1.299292 -3.000184,2.055246 m 3.968749,-1.346538 c -0.0945,0.09449 -2.267857,2.740326 -2.267857,2.740326 m 4.441219,-1.322916 -3.567149,1.677267 m 3.449031,1.417413 -3.09468,-1.063059 m 0.212614,3.260045 -1.252048,-3.472656 m -1.063057,3.449032 -0.188989,-3.96875 m -0.614211,0.637836 c 0,0 1.252045,0.779576 2.173364,0.897692 0,0 1.086681,0.02363 1.393786,-0.566963 0,0 0.4016,-0.496093 -0.614211,-1.228422 0,0 -1.204799,-0.614211 -1.606399,-0.897694 0,0 -1.34654,-0.87407 -1.41741,-1.960751 0,0 -0.259859,-1.937128 1.559151,-2.504092 0,0 1.063058,-0.685082 3.449033,0.188988 m -4.77195,8.409968 c 0,0 2.409598,0.803201 3.96875,-0.02363 0,0 1.441035,-0.637826 1.441035,-2.055237 0,0 0.236235,-1.511905 -0.826823,-2.291481 0,0 -1.559152,-0.968564 -2.102493,-1.228422 0,0 -0.94494,-0.283482 -0.755952,-1.110305 0,0 0.07087,-0.755953 1.630022,-0.354353 0,0 0.826823,0.236235 1.441035,0.685082"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm="0.33"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay_spacing_mm="1.2"
- inkscape:connector-curvature="0" />
- <path
- embroider_running_stitch_length_mm="2.5"
- inkscape:connector-curvature="0"
- id="path4394"
- d="m 35.71875,66.849812 3.425409,-0.236233 -0.04725,3.307291 0.07087,3.071056 0.02363,0.944941"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- id="path4448"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 40.23084,74.503832 0.02363,-7.65402 m -2.078876,7.677642 0.02363,-7.630393"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm=".33"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay_spacing_mm="1.2"
- inkscape:connector-curvature="0" />
- <path
- embroider_running_stitch_length_mm="2.5"
- inkscape:connector-curvature="0"
- id="path4503"
- d="m 39.262277,66.471836 c 0,0 -2.645833,0 -2.763951,-0.02363 -0.118118,-0.02363 -0.73233,0.165364 -0.73233,0.165364"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- id="path4561"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 35.435267,67.629388 7.535899,0.02363 m -7.535899,-1.795393 h 7.535899"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm="0.33"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay_spacing_mm="1.2"
- inkscape:connector-curvature="0" />
- <path
- embroider_running_stitch_length_mm="2.5"
- inkscape:connector-curvature="0"
- id="path4620"
- d="m 44.624812,66.684447 0.519719,2.291483 c 0,0 0.259858,3.212798 0.212611,3.354538 -0.04725,0.14174 -0.118118,1.748139 -0.118118,1.748139"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- id="path4682"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 46.278458,74.503832 0.04725,-8.669829 m -2.102494,8.646204 0.02363,-8.575333"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm="0.33"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay_spacing_mm="1.25"
- inkscape:connector-curvature="0" />
- <path
- embroider_running_stitch_length_mm="2.5"
- sodipodi:nodetypes="ccccc"
- inkscape:connector-curvature="0"
- id="path4745"
- d="m 47.861235,66.778943 3.118303,-0.07087 0.259858,1.228423 0.118117,2.83482 0.02363,3.472657"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- id="path4811"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 52.420572,74.527454 v -7.677642 m -2.078868,7.630395 v -7.724888"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm=".33"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay_spacing_mm="1.2"
- inkscape:connector-curvature="0" />
- <path
- embroider_running_stitch_length_mm="2.5"
- inkscape:connector-curvature="0"
- id="path4878"
- d="m 51.357513,66.613579 -3.378162,0.04725"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- id="path4948"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 47.601375,67.653013 h 7.512277 m -7.535899,-1.771764 7.583146,-0.02363"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm=".33"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay_spacing_mm="1.2"
- inkscape:connector-curvature="0" />
- <path
- embroider_running_stitch_length_mm="2.5"
- inkscape:connector-curvature="0"
- id="path5019"
- d="m 57.357885,67.322284 -0.425222,1.464656 -0.165365,1.984375 0.590587,1.700893 2.220611,1.370166 h 1.653646 l 1.228423,-0.708708"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- id="path5109"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 61.657364,71.031176 0.02363,4.890066 m -1.630029,-4.417597 c 0,0 -0.566962,4.582962 -0.566962,4.51209 m -0.425225,-4.937313 c 0,0 -3.02381,3.543525 -3.000185,3.42541 m 2.409597,-4.181364 -3.874256,0.685083 m 3.945128,-1.913503 -3.28367,-0.661459 m 4.228611,0.02362 -1.795389,-3.165549 m 2.763951,3.047431 -0.212611,-3.992372 m 1.393788,4.370351 0.236233,-4.086868 m 0.803201,9.402156 c 0,0 -1.630024,1.039434 -3.23642,0.708705 0,0 -2.14974,-0.188986 -3.260045,-2.315102 0,0 -0.87407,-1.511905 -0.448847,-3.260045 0,0 0.4016,-2.196986 2.291481,-3.09468 0,0 2.456845,-1.34654 4.724702,0.330729 m 0.02362,5.315289 c 0,0 -1.488282,1.299295 -2.763952,1.063059 0,0 -1.677267,0.188989 -2.267855,-2.078868 0,0 -0.236235,-1.771764 0.921317,-2.740328 0,0 0.897693,-0.779576 2.409598,-0.425223 0,0 0.992187,0.496094 1.488281,1.063058"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm=".33"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay_spacing_mm="1.2"
- inkscape:connector-curvature="0" />
- <path
- embroider_running_stitch_length_mm="2.5"
- inkscape:connector-curvature="0"
- id="path5184"
- d="m 64.515809,67.275037 0.685083,0.614212 0.04725,3.567149 -0.14174,2.527716"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- id="path5262"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 66.193079,74.480207 -0.02363,-4.51209 m -2.007991,4.51209 v -4.630208"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm=".33"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay_spacing_mm="1.2"
- inkscape:connector-curvature="0" />
- <path
- embroider_running_stitch_length_mm="2.4"
- inkscape:connector-curvature="0"
- id="path5341"
- d="m 65.082774,69.613763 0.02363,-3.449031"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
- <path
- id="path5423"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 66.169454,65.857625 0.02363,5.008186 m -2.031626,-5.031808 -10e-7,5.008183"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm=".33"
- embroider_zigzag_underlay="True"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay_spacing_mm="1.2"
- inkscape:connector-curvature="0" />
- <path
- embroider_zigzag_underlay_spacing_mm="1.2"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay="True"
- embroider_zigzag_spacing_mm=".33"
- embroider_satin_column="True"
- d="m 66.074961,69.070423 4.03962,-6e-6 m -4.346724,1.748145 4.417597,0.04725"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path5508"
- inkscape:connector-curvature="0" />
- <path
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1"
- d="m 70.256322,70.157104 0.401601,-2.007997 -0.09449,-1.984375"
- id="path5593"
- inkscape:connector-curvature="0"
- embroider_running_stitch_length_mm="2.5" />
- <path
- embroider_zigzag_underlay_spacing_mm="1.2"
- embroider_zigzag_underlay_inset_mm=".04"
- embroider_zigzag_underlay="True"
- embroider_trim_after="True"
- embroider_zigzag_spacing_mm=".33"
- embroider_satin_column="True"
- d="m 71.50837,65.857625 0.04725,8.646207 m -2.055249,-8.622583 0.04725,8.622583"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path5681"
- inkscape:connector-curvature="0" />
- </g>
- <g
- id="layer1"
- inkscape:label="Ink Stitch - Black"
- style="display:inline"
- inkscape:groupmode="layer" />
- <g
- id="g4815">
- <path
- embroider_zigzag_spacing_mm="0.33"
- embroider_satin_column="True"
- d="m 67.051242,59.672092 -3.274052,0.03341 m 3.240643,-0.56795 c 0,0 -2.271792,-0.267269 -3.240643,-0.03341"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#4d4f53;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4730"
- inkscape:connector-curvature="0" />
- <path
- style="opacity:1;fill:none;fill-opacity:1;stroke:#4d4f53;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1"
- d="M 63.576739,59.505048 61.505398,59.97277 57.329313,60.00618 49.945993,60.073 43.297662,60.173227 36.114794,60.073 30.669177,60.00618 h -0.768398"
- id="path4771"
- inkscape:connector-curvature="0"
- embroider_running_stitch_length_mm="2.5" />
- <path
- embroider_center_walk_underlay_stitch_length_mm="2.5"
- embroider_center_walk_underlay="True"
- embroider_zigzag_spacing_mm=".33"
- embroider_satin_column="True"
- d="m 29.633508,60.874806 0.902036,0.534538 13.898014,-0.06682 c 0,0 2.639287,-0.400903 4.109269,-0.634765 l 12.595078,-0.16704 c 0,0 2.372017,0.334087 3.274051,0.334087 m -34.845264,-1.737254 0.935443,-0.534538 c 0,0 13.129614,-0.200453 13.630745,-0.06682 0,0 3.842,0.60136 4.744035,0.701586 l 12.194172,0.167043 c 0,0 2.639287,-0.400904 3.173826,-0.367496"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#4d4f53;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4815"
- inkscape:connector-curvature="0" />
- <path
- id="path4862"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#4d4f53;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="m 63.9016,60.84944 c 0,0 1.842632,0.165365 3.165549,-0.07087 m -3.212796,-0.519717 3.212796,-0.09449"
- embroider_satin_column="True"
- embroider_zigzag_spacing_mm="0.33"
- inkscape:connector-curvature="0" />
- <path
- embroider_trim_after="True"
- embroider_center_walk_underlay_stitch_length_mm="2.5"
- embroider_center_walk_underlay="True"
- embroider_zigzag_spacing_mm="0.33"
- embroider_satin_column="True"
- d="m 66.26395,59.054055 c 0,0 2.787574,0.283482 4.29948,0.732329 m -4.370351,1.133928 c 0,0 4.015997,-0.614212 4.488468,-0.897694"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#4d4f53;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path4911"
- inkscape:connector-curvature="0" />
- </g>
- <g
inkscape:groupmode="layer"
- id="layer3"
- inkscape:label="Needle - Grey"
- style="display:inline" />
- <g
style="display:inline"
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="Hoop - Green">
+ inkscape:label="Ink Stitch - Black"
+ id="layer1">
<g
- id="g4828">
+ style="display:inline"
+ id="g4808">
<path
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_spacing_mm="0.32"
+ embroider_trim_after="True"
+ embroider_satin_column="True"
+ d="M 34.811856,55.028284 V 41.664807 m -3.140416,13.29666 v -13.29666"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4334"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4357"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="M 44.233107,54.961467 44.099472,44.872042 M 41.35996,54.961467 41.293142,44.938859"
+ embroider_satin_column="True"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_spacing_mm="0.33"
+ inkscape:connector-curvature="0" />
+ <path
+ embroider_running_stitch_length_mm="2.5"
inkscape:connector-curvature="0"
- embroider_fill_underlay_inset_mm=".3"
- embroider_fill_underlay_angle="45"
- embroider_fill_underlay="True"
- embroider_max_stitch_length_mm="4"
- id="path5770"
- transform="scale(0.26458333)"
- d="m 62.755859,185.12695 c 0,0 -4.54649,-0.12742 -5.55664,5.55469 v 66.03906 c 0,0 1.263006,5.68223 6.1875,5.42969 l 13.257812,0.12695 -0.125,-77.02539 z M 66.625,229.79688 c 2.370474,-0.0417 3.455078,1.29101 3.455078,1.29101 v 4.16797 c -0.378807,0.88388 -1.894531,1.13476 -1.894531,1.13476 l -3.410156,0.12696 c -2.399112,-0.63135 -2.777344,-3.15625 -2.777344,-3.15625 0.12627,-2.65165 2.777344,-3.2832 2.777344,-3.28321 0.686588,-0.18939 1.302577,-0.27164 1.849609,-0.28124 z m -0.513672,16.79492 c 0.175254,-0.005 0.361299,0.004 0.558594,0.0273 0,0 2.52549,-0.25241 2.904297,2.9043 0,0 0.378699,2.90439 -2.904297,3.2832 0,0 -3.534473,-7.9e-4 -3.408203,-3.03125 0,0 0.220808,-3.10729 2.849609,-3.18359 z"
- style="opacity:1;fill:#003399;fill-opacity:1;stroke:none;stroke-width:1.70078731;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ id="path4380"
+ d="M 42.829942,44.938859 41.694047,41.798443"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
<path
- style="opacity:1;fill:none;fill-opacity:1;stroke:#003399;stroke-width:0.44999998;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998,0.44999998;stroke-dashoffset:0;stroke-opacity:1"
- d="m 20.363467,48.919569 0.425223,-6.992559 1.464658,-4.582962 3.685268,-4.204986 4.299478,-2.598587 5.433409,-1.511903 6.66183,-0.188989 10.819569,-0.09449 11.622767,0.236236 5.149924,1.322916 5.149927,3.685268 3.354538,4.819194 1.27567,4.488469 0.614212,4.015996 -0.425225,3.779761"
- id="path5866"
+ id="path4416"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 50.246671,55.362371 4.944486,-1.069078 m -6.61492,0 6.481284,-3.407688 m -10.089422,-0.334086 4.744032,-4.744032 m -9.354434,1.403164 5.345393,-5.612661 m -5.412208,2.605878 3.608139,-3.474503 m -2.071341,0.46772 11.02487,10.690783 0.133633,3.474503 m -11.759859,-14.098468 0.06682,4.944486 3.34087,1.870887 7.884451,7.349913"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_underlay_inset_mm=".4"
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ inkscape:connector-curvature="0" />
+ <path
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ d="m 48.576237,45.874302 5.746295,-0.06681 m -5.87993,7.617174 6.614919,-2.605876 m -4.209494,4.877668 3.474505,-1.937705 m -1.336349,1.5368 -0.133633,-13.49711 m -0.400905,13.563928 -2.605879,-2.204974 0.133636,-11.425772"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4451"
+ inkscape:connector-curvature="0"
+ embroider_trim_after="True" />
+ <path
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ d="m 62.035343,54.91994 -0.0945,-6.945313 m -3.023805,6.945313 0.09449,-6.992559"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4508"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 60.334448,47.785639 0.04725,-5.811383"
+ id="path4539"
inkscape:connector-curvature="0"
embroider_running_stitch_length_mm="2.5" />
<path
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_spacing_mm=".33"
+ embroider_satin_column="True"
+ d="m 61.988093,41.59628 -0.04725,6.992559 m -2.929312,-7.039808 v 7.65402"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4573"
+ inkscape:connector-curvature="0" />
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 62.366072,48.25811 2.787573,-2.504093 2.787573,-3.638021"
+ id="path4608"
inkscape:connector-curvature="0"
- embroider_fill_underlay_inset_mm=".4"
- embroider_fill_underlay_angle="45"
- embroider_fill_underlay="True"
- embroider_max_stitch_length_mm="4"
- id="path5958"
- transform="scale(0.26458333)"
- d="m 316.91016,184.50195 c -1.66764,0.0725 -2.24805,2.39258 -2.24805,2.39258 l 0.12695,4.04102 c -0.50507,2.14657 -3.15625,2.65039 -3.15625,2.65039 -1.89404,0 -3.41015,-2.27344 -3.41015,-2.27344 l -6.56641,-0.75586 -0.125,70.70898 h 14.64648 c 3.78807,-0.12626 5.17774,-4.92382 5.17774,-4.92382 l 0.125,-66.66992 c -0.12627,-4.16689 -3.78711,-5.05079 -3.78711,-5.05079 -0.28411,-0.0947 -0.54497,-0.12949 -0.7832,-0.11914 z m -6.16211,45.44922 3.41015,0.25391 c 2.90419,0.63134 2.52539,3.15625 2.52539,3.15625 0.12627,1.89403 -2.40039,2.77734 -2.40039,2.77734 l -3.66211,0.25195 c -1.38895,-0.50507 -2.27148,-1.51367 -2.27148,-1.51367 l 0.125,-3.1582 c 0.12626,-1.76778 2.27344,-1.76758 2.27344,-1.76758 z m 1.76757,16.54102 c 0,0 2.65177,0.001 2.9043,3.1582 0,0 4.8e-4,3.15625 -3.15625,3.15625 0,0 -3.02998,-0.12579 -3.15625,-3.15625 0,0 0.25149,-3.03194 3.4082,-3.1582 z"
- style="opacity:1;fill:#003399;fill-opacity:1;stroke:none;stroke-width:1.70078731;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- embroider_angle="180" />
+ embroider_running_stitch_length_mm="2.5" />
+ <path
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ d="m 64.019718,42.257739 7.417781,0.14174 m -11.150298,5.953125 7.654017,-0.33073 m -3.307291,6.283854 7.039808,-0.141739 m -1.511906,-12.473215 -4.960937,6.3311 5.480655,6.992559 m -4.299479,-13.465402 -5.008184,6.898066 5.480653,6.567336"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4652"
+ embroider_trim_after="True"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ d="m 33.072916,68.10186 -0.09449,-3.401788 m -0.921322,3.000188 -1.275667,-2.976563 m 0.944938,3.071056 -3.071056,-1.086681 m 3.638021,1.299292 -3.000184,2.055246 m 3.968749,-1.346538 c -0.0945,0.09449 -2.267857,2.740326 -2.267857,2.740326 m 4.441219,-1.322916 -3.567149,1.677267 m 3.449031,1.417413 -3.09468,-1.063059 m 0.212614,3.260045 -1.252048,-3.472656 m -1.063057,3.449032 -0.188989,-3.96875 m -0.614211,0.637836 c 0,0 1.252045,0.779576 2.173364,0.897692 0,0 1.086681,0.02363 1.393786,-0.566963 0,0 0.4016,-0.496093 -0.614211,-1.228422 0,0 -1.204799,-0.614211 -1.606399,-0.897694 0,0 -1.34654,-0.87407 -1.41741,-1.960751 0,0 -0.259859,-1.937128 1.559151,-2.504092 0,0 1.063058,-0.685082 3.449033,0.188988 m -4.77195,8.409968 c 0,0 2.409598,0.803201 3.96875,-0.02363 0,0 1.441035,-0.637826 1.441035,-2.055237 0,0 0.236235,-1.511905 -0.826823,-2.291481 0,0 -1.559152,-0.968564 -2.102493,-1.228422 0,0 -0.94494,-0.283482 -0.755952,-1.110305 0,0 0.07087,-0.755953 1.630022,-0.354353 0,0 0.826823,0.236235 1.441035,0.685082"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4343" />
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 35.71875,66.849812 3.425409,-0.236233 -0.04725,3.307291 0.07087,3.071056 0.02363,0.944941"
+ id="path4394"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="2.5" />
<path
inkscape:connector-curvature="0"
embroider_zigzag_underlay_spacing_mm="1.2"
@@ -404,20 +176,255 @@
embroider_zigzag_underlay="True"
embroider_zigzag_spacing_mm=".33"
embroider_satin_column="True"
- d="m 75.03592,69.527657 h 10.289876 m -11.893495,6.013564 h 11.225321 m -12.49485,4.476763 9.554885,3.474506 M 69.155989,83.358854 c 0,0.267269 4.34313,7.015824 4.34313,7.015824 m -7.550364,-5.412208 0.334087,7.149459 m 15.167546,-25.524237 0.200451,6.280832 c 0,0 -1.135896,15.902538 -17.105249,17.572972 m 13.898015,-23.786986 0.06682,6.414468 c 0,0 -1.069078,12.762119 -14.165286,14.098466"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#003399;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- id="path6164" />
+ d="m 40.23084,74.503832 0.02363,-7.65402 m -2.078876,7.677642 0.02363,-7.630393"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4448" />
<path
- sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccc"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 39.262277,66.471836 c 0,0 -2.645833,0 -2.763951,-0.02363 -0.118118,-0.02363 -0.73233,0.165364 -0.73233,0.165364"
+ id="path4503"
inkscape:connector-curvature="0"
- id="path6289"
- style="opacity:1;fill:none;fill-opacity:1;stroke:#003399;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
- d="M 74.835466,54.761016 87.597585,54.62738 m -13.563928,-8.084902 11.960312,-4.34313 m -16.771162,-6.882191 8.018084,-7.483546 m -13.898015,5.144939 2.539061,-7.884452 m -20.312483,7.416729 -0.133636,-7.617181 m -10.69078,8.753077 -1.804069,-7.817634 M 27.662396,38.658027 20.713388,30.63994 m 4.409947,14.098468 -10.557146,-2.338609 m 10.891233,16.37026 -12.428033,1.00226 m 13.76438,12.962572 -11.559406,3.073599 m 15.434814,3.541321 -7.617181,9.554884 m 13.831198,-4.81085 c -0.133636,0.267269 -2.00452,8.552625 -2.00452,8.552625 m 29.733734,-7.483547 0.267269,7.550365 m 1.202714,-2.472243 -1.603619,0.200451 -28.865107,-0.06682 h 0.06682 c 0,0 -15.367996,-0.935442 -17.038431,-17.572971 l -0.06682,-28.531018 c 0,0 1.469982,-15.367998 17.572971,-16.83798 h 28.597838 c 0,0 14.833458,1.135895 16.971615,17.506154 l -0.133635,26.593317 m -15.835722,15.501633 -1.937702,0.267268 h -27.32831 c 0,0 -12.895754,-0.334086 -14.76664,-14.633005 V 45.005678 c 0,0 0.935443,-12.962572 14.432554,-14.432554 l 28.664657,-0.06682 c 0,0 12.294398,1.5368 13.697563,14.699824 v 26.259233"
+ embroider_running_stitch_length_mm="2.5" />
+ <path
+ inkscape:connector-curvature="0"
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ d="m 35.435267,67.629388 7.535899,0.02363 m -7.535899,-1.795393 h 7.535899"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4561" />
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 44.624812,66.684447 0.519719,2.291483 c 0,0 0.259858,3.212798 0.212611,3.354538 -0.04725,0.14174 -0.118118,1.748139 -0.118118,1.748139"
+ id="path4620"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="2.5" />
+ <path
+ inkscape:connector-curvature="0"
+ embroider_zigzag_underlay_spacing_mm="1.25"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ d="m 46.278458,74.503832 0.04725,-8.669829 m -2.102494,8.646204 0.02363,-8.575333"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4682" />
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 47.861235,66.778943 3.118303,-0.07087 0.259858,1.228423 0.118117,2.83482 0.02363,3.472657"
+ id="path4745"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc"
+ embroider_running_stitch_length_mm="2.5" />
+ <path
+ inkscape:connector-curvature="0"
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_spacing_mm=".33"
+ embroider_satin_column="True"
+ d="m 52.420572,74.527454 v -7.677642 m -2.078868,7.630395 v -7.724888"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4811" />
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 51.357513,66.613579 -3.378162,0.04725"
+ id="path4878"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="2.5" />
+ <path
+ inkscape:connector-curvature="0"
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_spacing_mm=".33"
embroider_satin_column="True"
+ d="m 47.601375,67.653013 h 7.512277 m -7.535899,-1.771764 7.583146,-0.02363"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4948" />
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 57.357885,67.322284 -0.425222,1.464656 -0.165365,1.984375 0.590587,1.700893 2.220611,1.370166 h 1.653646 l 1.228423,-0.708708"
+ id="path5019"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="2.5" />
+ <path
+ inkscape:connector-curvature="0"
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay="True"
embroider_zigzag_spacing_mm=".33"
+ embroider_satin_column="True"
+ d="m 61.657364,71.031176 0.02363,4.890066 m -1.630029,-4.417597 c 0,0 -0.566962,4.582962 -0.566962,4.51209 m -0.425225,-4.937313 c 0,0 -3.02381,3.543525 -3.000185,3.42541 m 2.409597,-4.181364 -3.874256,0.685083 m 3.945128,-1.913503 -3.28367,-0.661459 m 4.228611,0.02362 -1.795389,-3.165549 m 2.763951,3.047431 -0.212611,-3.992372 m 1.393788,4.370351 0.236233,-4.086868 m 0.803201,9.402156 c 0,0 -1.630024,1.039434 -3.23642,0.708705 0,0 -2.14974,-0.188986 -3.260045,-2.315102 0,0 -0.87407,-1.511905 -0.448847,-3.260045 0,0 0.4016,-2.196986 2.291481,-3.09468 0,0 2.456845,-1.34654 4.724702,0.330729 m 0.02362,5.315289 c 0,0 -1.488282,1.299295 -2.763952,1.063059 0,0 -1.677267,0.188989 -2.267855,-2.078868 0,0 -0.236235,-1.771764 0.921317,-2.740328 0,0 0.897693,-0.779576 2.409598,-0.425223 0,0 0.992187,0.496094 1.488281,1.063058"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path5109" />
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 64.515809,67.275037 0.685083,0.614212 0.04725,3.567149 -0.14174,2.527716"
+ id="path5184"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="2.5" />
+ <path
+ inkscape:connector-curvature="0"
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_spacing_mm=".33"
+ embroider_satin_column="True"
+ d="m 66.193079,74.480207 -0.02363,-4.51209 m -2.007991,4.51209 v -4.630208"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path5262" />
+ <path
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 65.082774,69.613763 0.02363,-3.449031"
+ id="path5341"
+ inkscape:connector-curvature="0"
+ embroider_running_stitch_length_mm="2.4" />
+ <path
+ inkscape:connector-curvature="0"
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_spacing_mm=".33"
+ embroider_satin_column="True"
+ d="m 66.169454,65.857625 0.02363,5.008186 m -2.031626,-5.031808 -10e-7,5.008183"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path5423" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5508"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 66.074961,69.070423 4.03962,-6e-6 m -4.346724,1.748145 4.417597,0.04725"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm=".33"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay_spacing_mm="1.2" />
+ <path
+ embroider_running_stitch_length_mm="2.5"
+ inkscape:connector-curvature="0"
+ id="path5593"
+ d="m 70.256322,70.157104 0.401601,-2.007997 -0.09449,-1.984375"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5681"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 71.50837,65.857625 0.04725,8.646207 m -2.055249,-8.622583 0.04725,8.622583"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm=".33"
+ embroider_trim_after="True"
embroider_zigzag_underlay="True"
embroider_zigzag_underlay_inset_mm=".04"
embroider_zigzag_underlay_spacing_mm="1.2" />
</g>
</g>
+ <g
+ style="display:inline"
+ inkscape:label="Needle - Grey"
+ id="layer3"
+ inkscape:groupmode="layer">
+ <g
+ style="display:inline"
+ id="g4815">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4730"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#4d4f53;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 67.051242,59.672092 -3.274052,0.03341 m 3.240643,-0.56795 c 0,0 -2.271792,-0.267269 -3.240643,-0.03341"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33" />
+ <path
+ embroider_running_stitch_length_mm="2.5"
+ inkscape:connector-curvature="0"
+ id="path4771"
+ d="M 63.576739,59.505048 61.505398,59.97277 57.329313,60.00618 49.945993,60.073 43.297662,60.173227 36.114794,60.073 30.669177,60.00618 h -0.768398"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#4d4f53;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4815"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#4d4f53;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 29.633508,60.874806 0.902036,0.534538 13.898014,-0.06682 c 0,0 2.639287,-0.400903 4.109269,-0.634765 l 12.595078,-0.16704 c 0,0 2.372017,0.334087 3.274051,0.334087 m -34.845264,-1.737254 0.935443,-0.534538 c 0,0 13.129614,-0.200453 13.630745,-0.06682 0,0 3.842,0.60136 4.744035,0.701586 l 12.194172,0.167043 c 0,0 2.639287,-0.400904 3.173826,-0.367496"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm=".33"
+ embroider_center_walk_underlay="True"
+ embroider_center_walk_underlay_stitch_length_mm="2.5" />
+ <path
+ inkscape:connector-curvature="0"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ d="m 63.9016,60.84944 c 0,0 1.842632,0.165365 3.165549,-0.07087 m -3.212796,-0.519717 3.212796,-0.09449"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#4d4f53;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path4862" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4911"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#4d4f53;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 66.26395,59.054055 c 0,0 2.787574,0.283482 4.29948,0.732329 m -4.370351,1.133928 c 0,0 4.015997,-0.614212 4.488468,-0.897694"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_center_walk_underlay="True"
+ embroider_center_walk_underlay_stitch_length_mm="2.5"
+ embroider_trim_after="True" />
+ </g>
+ </g>
+ <g
+ inkscape:label="Hoop - Green"
+ id="layer2"
+ inkscape:groupmode="layer"
+ style="display:inline">
+ <g
+ id="g4828">
+ <path
+ style="opacity:1;fill:#003399;fill-opacity:1;stroke:none;stroke-width:1.70078731;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 62.755859,185.12695 c 0,0 -4.54649,-0.12742 -5.55664,5.55469 v 66.03906 c 0,0 1.263006,5.68223 6.1875,5.42969 l 13.257812,0.12695 -0.125,-77.02539 z M 66.625,229.79688 c 2.370474,-0.0417 3.455078,1.29101 3.455078,1.29101 v 4.16797 c -0.378807,0.88388 -1.894531,1.13476 -1.894531,1.13476 l -3.410156,0.12696 c -2.399112,-0.63135 -2.777344,-3.15625 -2.777344,-3.15625 0.12627,-2.65165 2.777344,-3.2832 2.777344,-3.28321 0.686588,-0.18939 1.302577,-0.27164 1.849609,-0.28124 z m -0.513672,16.79492 c 0.175254,-0.005 0.361299,0.004 0.558594,0.0273 0,0 2.52549,-0.25241 2.904297,2.9043 0,0 0.378699,2.90439 -2.904297,3.2832 0,0 -3.534473,-7.9e-4 -3.408203,-3.03125 0,0 0.220808,-3.10729 2.849609,-3.18359 z"
+ transform="scale(0.26458333)"
+ id="path5770"
+ embroider_max_stitch_length_mm="4"
+ embroider_fill_underlay="True"
+ embroider_fill_underlay_angle="45"
+ embroider_fill_underlay_inset_mm=".3"
+ inkscape:connector-curvature="0" />
+ <path
+ embroider_running_stitch_length_mm="2.5"
+ inkscape:connector-curvature="0"
+ id="path5866"
+ d="m 20.363467,48.919569 0.425223,-6.992559 1.464658,-4.582962 3.685268,-4.204986 4.299478,-2.598587 5.433409,-1.511903 6.66183,-0.188989 10.819569,-0.09449 11.622767,0.236236 5.149924,1.322916 5.149927,3.685268 3.354538,4.819194 1.27567,4.488469 0.614212,4.015996 -0.425225,3.779761"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#003399;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.44999998, 0.44999998;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ embroider_angle="180"
+ style="opacity:1;fill:#003399;fill-opacity:1;stroke:none;stroke-width:1.70078731;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 316.91016,184.50195 c -1.66764,0.0725 -2.24805,2.39258 -2.24805,2.39258 l 0.12695,4.04102 c -0.50507,2.14657 -3.15625,2.65039 -3.15625,2.65039 -1.89404,0 -3.41015,-2.27344 -3.41015,-2.27344 l -6.56641,-0.75586 -0.125,70.70898 h 14.64648 c 3.78807,-0.12626 5.17774,-4.92382 5.17774,-4.92382 l 0.125,-66.66992 c -0.12627,-4.16689 -3.78711,-5.05079 -3.78711,-5.05079 -0.28411,-0.0947 -0.54497,-0.12949 -0.7832,-0.11914 z m -6.16211,45.44922 3.41015,0.25391 c 2.90419,0.63134 2.52539,3.15625 2.52539,3.15625 0.12627,1.89403 -2.40039,2.77734 -2.40039,2.77734 l -3.66211,0.25195 c -1.38895,-0.50507 -2.27148,-1.51367 -2.27148,-1.51367 l 0.125,-3.1582 c 0.12626,-1.76778 2.27344,-1.76758 2.27344,-1.76758 z m 1.76757,16.54102 c 0,0 2.65177,0.001 2.9043,3.1582 0,0 4.8e-4,3.15625 -3.15625,3.15625 0,0 -3.02998,-0.12579 -3.15625,-3.15625 0,0 0.25149,-3.03194 3.4082,-3.1582 z"
+ transform="scale(0.26458333)"
+ id="path5958"
+ embroider_max_stitch_length_mm="4"
+ embroider_fill_underlay="True"
+ embroider_fill_underlay_angle="45"
+ embroider_fill_underlay_inset_mm=".4"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path6164"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#003399;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 75.03592,69.527657 h 10.289876 m -11.893495,6.013564 h 11.225321 m -12.49485,4.476763 9.554885,3.474506 M 69.155989,83.358854 c 0,0.267269 4.34313,7.015824 4.34313,7.015824 m -7.550364,-5.412208 0.334087,7.149459 m 15.167546,-25.524237 0.200451,6.280832 c 0,0 -1.135896,15.902538 -17.105249,17.572972 m 13.898015,-23.786986 0.06682,6.414468 c 0,0 -1.069078,12.762119 -14.165286,14.098466"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm=".33"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ inkscape:connector-curvature="0" />
+ <path
+ embroider_zigzag_underlay_spacing_mm="1.2"
+ embroider_zigzag_underlay_inset_mm=".04"
+ embroider_zigzag_underlay="True"
+ embroider_zigzag_spacing_mm=".33"
+ embroider_satin_column="True"
+ d="M 74.835466,54.761016 87.597585,54.62738 m -13.563928,-8.084902 11.960312,-4.34313 m -16.771162,-6.882191 8.018084,-7.483546 m -13.898015,5.144939 2.539061,-7.884452 m -20.312483,7.416729 -0.133636,-7.617181 m -10.69078,8.753077 -1.804069,-7.817634 M 27.662396,38.658027 20.713388,30.63994 m 4.409947,14.098468 -10.557146,-2.338609 m 10.891233,16.37026 -12.428033,1.00226 m 13.76438,12.962572 -11.559406,3.073599 m 15.434814,3.541321 -7.617181,9.554884 m 13.831198,-4.81085 c -0.133636,0.267269 -2.00452,8.552625 -2.00452,8.552625 m 29.733734,-7.483547 0.267269,7.550365 m 1.202714,-2.472243 -1.603619,0.200451 -28.865107,-0.06682 h 0.06682 c 0,0 -15.367996,-0.935442 -17.038431,-17.572971 l -0.06682,-28.531018 c 0,0 1.469982,-15.367998 17.572971,-16.83798 h 28.597838 c 0,0 14.833458,1.135895 16.971615,17.506154 l -0.133635,26.593317 m -15.835722,15.501633 -1.937702,0.267268 h -27.32831 c 0,0 -12.895754,-0.334086 -14.76664,-14.633005 V 45.005678 c 0,0 0.935443,-12.962572 14.432554,-14.432554 l 28.664657,-0.06682 c 0,0 12.294398,1.5368 13.697563,14.699824 v 26.259233"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#003399;stroke-width:0.44999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="path6289"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccc" />
+ </g>
+ </g>
</svg>
diff --git a/images/examples/Logo Hat Embroidery.svg b/images/examples/Logo Hat Embroidery.svg
new file mode 100644
index 00000000..bddb372f
--- /dev/null
+++ b/images/examples/Logo Hat Embroidery.svg
@@ -0,0 +1,437 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="4in"
+ height="2in"
+ viewBox="0 0 101.6 50.8"
+ version="1.1"
+ id="svg8"
+ inkscape:version="0.92.3 (2405546, 2018-03-11)"
+ sodipodi:docname="Logo Hat Embroidery.svg">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.979899"
+ inkscape:cx="133.52127"
+ inkscape:cy="-241.70604"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer4"
+ showgrid="false"
+ units="in"
+ inkscape:snap-global="false"
+ inkscape:window-width="2560"
+ inkscape:window-height="1409"
+ inkscape:window-x="3840"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ showguides="true"
+ inkscape:guide-bbox="true" />
+ <defs
+ id="defs2">
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="Arrow1Lstart"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Lstart">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(0.8,0,0,0.8,10,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path5343" />
+ </marker>
+ <style
+ type="text/css"
+ id="style5231">
+
+ .fil0 {fill:none}
+ .fil3 {fill:black}
+ .fil1 {fill:#003399}
+ .fil4 {fill:gray}
+ .fil2 {fill:white}
+
+ </style>
+ </defs>
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evan West at Wild West Designs</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:rights>
+ <cc:Agent>
+ <dc:title>License to Use</dc:title>
+ </cc:Agent>
+ </dc:rights>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>Wild West Designs</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:source>www.wildwestdesigns.biz</dc:source>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="Instruction"
+ sodipodi:insensitive="true">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="19.911579"
+ y="60.421703"
+ id="text7491"
+ sodipodi:insensitive="true"><tspan
+ sodipodi:role="line"
+ id="tspan7489"
+ x="19.911579"
+ y="60.421703"
+ style="font-size:7.76111126px;stroke-width:0.26458332px">Hat Embroidery</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:4.93888855px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="-0.13363475"
+ y="68.038887"
+ id="text7501"
+ sodipodi:insensitive="true"><tspan
+ sodipodi:role="line"
+ id="tspan7499"
+ x="-0.13363475"
+ y="68.038887"
+ style="stroke-width:0.26458332px">1. Hats require a very specific sequence.</tspan><tspan
+ sodipodi:role="line"
+ x="-0.13363475"
+ y="74.212494"
+ style="stroke-width:0.26458332px"
+ id="tspan7503">Bottom to top, center out.</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:4.93888855px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="0.13363479"
+ y="85.277763"
+ id="text7507"
+ sodipodi:insensitive="true"><tspan
+ sodipodi:role="line"
+ id="tspan7505"
+ x="0.13363479"
+ y="85.277763"
+ style="stroke-width:0.26458332px">2. It does not matter which way you go</tspan><tspan
+ sodipodi:role="line"
+ x="0.13363479"
+ y="91.45137"
+ style="stroke-width:0.26458332px"
+ id="tspan7509">center out, to the right or to the left first</tspan><tspan
+ sodipodi:role="line"
+ x="0.13363479"
+ y="97.624985"
+ style="stroke-width:0.26458332px"
+ id="tspan7511">just be consistent throughout the design</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:4.93888855px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="-0.4009043"
+ y="109.86658"
+ id="text7515"
+ sodipodi:insensitive="true"><tspan
+ sodipodi:role="line"
+ id="tspan7513"
+ x="-0.4009043"
+ y="109.86658"
+ style="stroke-width:0.26458332px">3. Be careful of the design field for hats</tspan><tspan
+ sodipodi:role="line"
+ x="-0.4009043"
+ y="116.04019"
+ style="stroke-width:0.26458332px"
+ id="tspan7517">on your machine. Some limit the height,</tspan><tspan
+ sodipodi:role="line"
+ x="-0.4009043"
+ y="122.2138"
+ style="stroke-width:0.26458332px"
+ id="tspan7519">some can go as tall as what can</tspan><tspan
+ sodipodi:role="line"
+ x="-0.4009043"
+ y="128.38741"
+ style="stroke-width:0.26458332px"
+ id="tspan7521">physically fit. 50mm to 57mm tall is a </tspan><tspan
+ sodipodi:role="line"
+ x="-0.4009043"
+ y="134.56102"
+ style="stroke-width:0.26458332px"
+ id="tspan7523">good height on average.</tspan></text>
+ </g>
+ <g
+ style="display:inline"
+ transform="translate(0,-50.8)"
+ inkscape:label="Bottom Black Lettering"
+ id="layer2"
+ inkscape:groupmode="layer">
+ <path
+ embroider_center_walk_underlay="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 52.328046,99.741399 0.122985,-10.883511 m -2.951467,10.945003 0.06149,-10.883515"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5283" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34487936;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.34487937, 0.34487937;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 49.438077,88.857888 -2.029131,-0.245953 -1.414241,1.106796"
+ id="path5308"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path5312"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 45.620855,87.732567 10.56543,-0.08696 m -10.56543,2.652229 10.56543,-0.130436"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_center_walk_underlay="True" />
+ <path
+ embroider_manual_stitch="True"
+ inkscape:connector-curvature="0"
+ id="path5637"
+ d="m 56.099326,90.123919 2.956582,0.260873 1.739164,-1.434812 3.087016,-0.39131 1.782644,0.869581 0.608708,0.304356"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.3443371, 0.3443371;stroke-dashoffset:0;stroke-opacity:1"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ id="path5689"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 65.795171,95.384891 0.43479,5.869689 m -2.173954,-5.478375 -0.08696,5.478375 m -1.652203,-5.913165 -1.304376,5.826205 m -0.04348,-6.521873 -4.260951,2.956582 m 4.043555,-4.391394 -5.304454,-0.521749 m 6.304474,-1.086976 -4.000081,-4.434872 m 5.608807,3.869643 -0.608706,-5.347934 m 2.695707,5.956639 0.565228,-5.565329 m 0.826103,2.304395 c 0,0 -1.956561,-1.608726 -5.347934,-0.956538 0,0 -4.434869,1.173935 -4.652265,6.087077 0,0 -0.347832,4.782704 4.608789,6.434911 0,0 2.478309,0.782628 5.304453,-0.869582 m -0.217395,-7.652327 c 0,0 -2.13048,-2.347874 -4.739226,-1.217415 0,0 -1.826123,0.695666 -2.043518,3.347892 0,0 -0.130439,3.260935 3.043538,3.826164 0,0 2.086998,0.347832 4.087038,-1.52177"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_center_walk_underlay="True" />
+ <path
+ embroider_manual_stitch="True"
+ inkscape:connector-curvature="0"
+ id="path5726"
+ d="m 66.925629,95.819685 h 2.565267 l 1.304373,-1.086979"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.3443371, 0.3443371;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.3443371, 0.3443371;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 70.838748,94.689226 0.652189,-1.260893 3.434852,-0.173918 1.869603,0.217397 0.521746,-1.478291"
+ id="path5764"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path5768"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 77.230182,94.732706 -6.130557,-0.08696 m 6.217513,-2.652223 -6.347951,0.08696"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_center_walk_underlay="True" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5830"
+ d="m 70.360477,93.210935 -0.304351,3.087021 -0.260874,2.000037 -0.608709,1.086979"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.3443371, 0.3443371;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ embroider_center_walk_underlay="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 71.621374,99.819764 0.04348,-6.652308 m -2.913104,6.565349 0.04348,-6.434911"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path5834" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.3443371, 0.3443371;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 69.143063,93.037018 0.782624,-1.869599 0.217396,-2.13048 0.04348,-0.869581"
+ id="path5881"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path5885"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 71.664854,87.602128 v 7.130578 m -2.869623,-7.130578 0.04348,7.174057"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_center_walk_underlay="True" />
+ <path
+ embroider_manual_stitch="True"
+ inkscape:connector-curvature="0"
+ id="path5936"
+ d="m 68.795231,94.732706 2.782664,-0.04348 1.304374,-2.652225 0.869581,2.565266 1.478291,-2.521787 0.521751,2.652225 1.173934,-2.782663 0.434792,-1.652208 -0.04348,-1.521768 -0.608706,-0.739147"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.3443371, 0.3443371;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="path5990"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 79.099784,87.645608 0.08695,12.087197 m -2.869612,-12.087197 0.04348,12.174156"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_center_walk_underlay="True"
+ embroider_trim_after="True" />
+ <path
+ embroider_center_walk_underlay="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 40.88163,99.776284 0.130438,-12.087197 m 2.739185,12.130677 0.08696,-12.174156"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path6047" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.3443371, 0.3443371;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 43.881691,87.602128 -2.913102,0.08696 -2.652227,0.608709 -2.217434,0.304353 -1.869603,0.304351 -0.260875,2.304395 -0.130436,2.608749 0.04348,2.565267 -0.130436,1.826123 -0.04348,1.043499"
+ id="path6104"
+ inkscape:connector-curvature="0"
+ embroider_manual_stitch="True" />
+ <path
+ embroider_center_walk_underlay="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="M 35.316302,99.732805 V 89.297817 m -2.9131,10.348029 0.04348,-10.304554"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path6164" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.3443371, 0.3443371;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 32.316243,89.254337 1.347854,-0.782626 2.913102,0.347835 2.043516,0.04348"
+ id="path6225"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path6229"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 39.098986,90.210878 H 28.533559 m 10.652386,-2.56527 H 28.533559"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_center_walk_underlay="True" />
+ <path
+ embroider_manual_stitch="True"
+ inkscape:connector-curvature="0"
+ id="path6294"
+ d="m 28.577039,87.689087 -2.130479,1.56525"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.3443371, 0.3443371;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="path6386"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 20.924711,100.51543 -0.260874,-4.782703 m 1.478291,4.913143 -0.260876,-4.391394 m 2.695705,4.478354 -1.521766,-4.434874 m 5.000097,2.826139 -4.130516,-2.391348 m 5.000099,-1.478291 -4.782705,0.826102 m 2.695708,-3.521807 -3.826163,2.782664 m 1.652205,-3.826165 -3.391369,3.000059 m 2.304393,-3.478328 -4.260955,1.260893 m 4.000079,-1.695685 -4.043559,-1.043499 m 4.391391,0.652188 -1.869603,-4.130521 m 3.173979,4.304435 -0.956541,-4.695745 m 2.260915,5.260975 -0.173918,-4.739226 m 0.782622,4.478353 c 0,0 -3.130495,-2.130479 -4.173996,-0.56523 0,0 -0.652185,1.086979 2.000043,2.173957 0,0 3.217455,1.521769 3.173976,3.521809 0,0 0.304354,1.913081 -1.304374,3.304413 0,0 -1.347853,1.304372 -3.695725,0.956542 0,0 -1.956561,-0.173917 -2.652228,-0.478271 m 6.739263,-11.739364 c 0,0 -3.304413,-1.391332 -5.695762,0.08695 0,0 -1.391333,1.086987 -1.391333,2.826152 0,0 0.173916,2.086998 2.217435,3.173976 0,0 3.47833,1.565249 2.95658,2.695706 0,0 -0.260874,1.304374 -2.521789,0.826103 0,0 -1.608727,-0.434791 -2.47831,-1.086977"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_trim_after="True"
+ embroider_center_walk_underlay="True" />
+ </g>
+ <g
+ style="display:inline"
+ transform="translate(0,-50.8)"
+ inkscape:label="Needle Grey"
+ id="layer3"
+ inkscape:groupmode="layer">
+ <path
+ inkscape:connector-curvature="0"
+ id="path6456"
+ d="M 51.099227,79.51501 21.055149,79.47153 52.664474,79.51501 76.708432,79.384575"
+ style="fill:none;fill-rule:evenodd;stroke:#595a5c;stroke-width:0.34433711;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.3443371, 0.3443371;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ embroider_center_walk_underlay="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="M 20.999518,81.632958 20.876546,76.7446 m 3.289644,5.533991 -0.09223,-6.210368 m 15.341448,6.640789 v -6.517809 m 6.794511,5.503244 0.338188,-5.226545 m 16.263779,4.888358 0.06149,-4.365702 m 7.901303,5.011334 -0.122973,-5.103569 m 5.656963,4.334957 -0.245954,-3.843047 m 1.813916,2.182853 c 0,0 -4.826865,1.106796 -6.978972,1.106796 0,0 -3.50486,-0.03074 -6.517811,-0.49191 0,0 -15.49517,0.153723 -15.956335,0.153723 0,0 -1.598708,0.03074 -2.121363,0.122972 0,0 -5.226546,0.922336 -6.025899,0.860848 l -18.569609,0.06149 -1.229776,-0.707121 m 57.362023,-1.469229 c 0,0 -5.869681,-1.391332 -7.565366,-1.0435 0,0 -3.913121,0.08696 -5.869681,0.434793 l -16.56555,-0.173913 c 0,0 -1.347853,-0.04348 -2.00004,-0.130438 0,0 -3.913121,-0.782625 -5.174016,-0.782625 l -19.000379,-0.04348 -1.173935,0.695666"
+ style="fill:none;fill-rule:evenodd;stroke:#595a5c;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path6475"
+ embroider_trim_after="True" />
+ </g>
+ <g
+ style="display:inline"
+ transform="translate(0,-50.8)"
+ inkscape:groupmode="layer"
+ id="layer4"
+ inkscape:label="Top Black Lettering">
+ <path
+ embroider_center_walk_underlay="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 65.824832,72.409641 v -9.284803 m -4.365703,9.284803 0.03075,-9.438525"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path6627" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.3443371, 0.3443371;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 63.242303,62.755906 0.21521,-4.058258 0.03075,-4.519425"
+ id="path6706"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path6710"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 65.824832,53.778545 V 63.954936 M 61.459129,53.778545 v 10.299371"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_center_walk_underlay="True" />
+ <path
+ embroider_manual_stitch="True"
+ inkscape:connector-curvature="0"
+ id="path6793"
+ d="m 61.428386,64.04717 4.334957,-0.276699 2.275083,-2.551786 1.567968,-1.660194 2.336571,-2.121364 1.783174,-2.029131 0.522655,-1.106796"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.3443371, 0.3443371;stroke-dashoffset:0;stroke-opacity:1" />
+ <path
+ id="path6887"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 78.368544,71.641032 -7.809077,0.03075 m 3.35114,-5.933676 -6.394833,2.367317 m 4.089003,-5.533985 -7.56312,0.338187 M 76.923556,55.37725 69.022249,55.3465 m 8.300984,-1.598698 -7.040466,8.885126 7.563121,9.776713 M 72.0352,53.717056 l -6.948232,9.192572 7.378653,9.500013"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_trim_after="True"
+ embroider_center_walk_underlay="True" />
+ <path
+ embroider_center_walk_underlay="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 53.74229,72.040711 -3.689327,0.03075 m 3.750816,-2.02914 -6.241111,-0.338188 m 6.45632,-14.357628 -6.487066,0.122973 m 5.411014,-1.752425 -0.03075,19.461197 M 48.792444,53.747802 v 15.925592 l 3.689325,3.443371"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path6982" />
+ <path
+ id="path7085"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 35.357147,53.993755 3.996769,-0.307444 m -4.181234,4.611658 6.179618,-2.951461 m -3.166668,6.118133 4.119746,-4.949845 m 4.6424,13.373808 4.519425,-5.749201 m -1.875404,7.317164 4.150491,-3.658582 m -2.398064,4.888358 2.428806,-0.03075 M 52.91219,73.147507 52.881445,67.828728 37.201808,53.132912 M 52.451026,73.116765 36.771387,58.390203 v -5.226544"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_center_walk_underlay="True" />
+ <path
+ embroider_center_walk_underlay="True"
+ embroider_trim_after="True"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 36.033525,65.461411 5.933665,0.09223 m -5.995156,-8.762149 6.548554,0.06149 m -6.241111,-3.41263 2.213596,-0.09223 m -1.291265,-0.184466 3.720072,3.474115 -0.03074,15.802613 m -4.119754,-19.307475 0.03075,19.276729"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ id="path7184" />
+ <path
+ id="path7279"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.34433711px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 23.305348,72.378898 V 53.778545 m 4.42719,18.600353 0.06149,-18.631096"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_trim_after="True"
+ embroider_center_walk_underlay="True" />
+ </g>
+</svg>
diff --git a/images/examples/Monogram Frame Example.svg b/images/examples/Monogram Frame Example.svg
new file mode 100644
index 00000000..ffb21b75
--- /dev/null
+++ b/images/examples/Monogram Frame Example.svg
@@ -0,0 +1,586 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:inkstitch="http://inkstitch.org/namespace"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="100mm"
+ height="100mm"
+ viewBox="0 0 100 100"
+ version="1.1"
+ id="svg8"
+ inkscape:version="0.92.3 (2405546, 2018-03-11)"
+ sodipodi:docname="Monogram Frame Example.svg"
+ inkscape:export-filename="/media/Files/Projects/InkStitch/Embroidery Examples/Monogram Frame Example/Monogram Frame.png"
+ inkscape:export-xdpi="300"
+ inkscape:export-ydpi="300">
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#8c8c8c"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4"
+ inkscape:cx="42.435391"
+ inkscape:cy="77.594112"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer5"
+ showgrid="false"
+ inkscape:snap-global="false"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:window-width="2560"
+ inkscape:window-height="1412"
+ inkscape:window-x="3840"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1" />
+ <defs
+ id="defs2">
+ <inkscape:path-effect
+ effect="powerstroke"
+ id="path-effect966"
+ is_visible="true"
+ offset_points="0,0.60026582"
+ sort_points="true"
+ interpolator_type="CubicBezierJohan"
+ interpolator_beta="0.2"
+ start_linecap_type="zerowidth"
+ linejoin_type="extrp_arc"
+ miter_limit="4"
+ end_linecap_type="zerowidth" />
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect964"
+ is_visible="true" />
+ <inkscape:path-effect
+ end_linecap_type="zerowidth"
+ miter_limit="4"
+ linejoin_type="extrp_arc"
+ start_linecap_type="zerowidth"
+ interpolator_beta="0.2"
+ interpolator_type="CubicBezierJohan"
+ sort_points="true"
+ offset_points="0,0.50799995"
+ is_visible="true"
+ id="path-effect941"
+ effect="powerstroke" />
+ <inkscape:path-effect
+ is_visible="true"
+ id="path-effect939"
+ effect="spiro" />
+ <inkscape:path-effect
+ end_linecap_type="zerowidth"
+ miter_limit="4"
+ linejoin_type="extrp_arc"
+ start_linecap_type="zerowidth"
+ interpolator_beta="0.2"
+ interpolator_type="CubicBezierJohan"
+ sort_points="true"
+ offset_points="0,0.50799995"
+ is_visible="true"
+ id="path-effect935"
+ effect="powerstroke" />
+ <inkscape:path-effect
+ is_visible="true"
+ id="path-effect933"
+ effect="spiro" />
+ <inkscape:path-effect
+ effect="powerstroke"
+ id="path-effect929"
+ is_visible="true"
+ offset_points="0,0.48276678"
+ sort_points="true"
+ interpolator_type="CubicBezierJohan"
+ interpolator_beta="0.2"
+ start_linecap_type="zerowidth"
+ linejoin_type="extrp_arc"
+ miter_limit="4"
+ end_linecap_type="zerowidth" />
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect927"
+ is_visible="true" />
+ <inkscape:path-effect
+ effect="powerstroke"
+ id="path-effect915"
+ is_visible="true"
+ offset_points="0.04647546,0.36953698"
+ sort_points="true"
+ interpolator_type="CubicBezierJohan"
+ interpolator_beta="0.2"
+ start_linecap_type="zerowidth"
+ linejoin_type="extrp_arc"
+ miter_limit="4"
+ end_linecap_type="zerowidth" />
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect913"
+ is_visible="true" />
+ <inkscape:path-effect
+ end_linecap_type="zerowidth"
+ miter_limit="4"
+ linejoin_type="extrp_arc"
+ start_linecap_type="zerowidth"
+ interpolator_beta="0.2"
+ interpolator_type="CubicBezierJohan"
+ sort_points="true"
+ offset_points="0,0.50799995"
+ is_visible="true"
+ id="path-effect890"
+ effect="powerstroke" />
+ <inkscape:path-effect
+ is_visible="true"
+ id="path-effect888"
+ effect="spiro" />
+ <inkscape:path-effect
+ is_visible="true"
+ id="path-effect888-3"
+ effect="spiro" />
+ <inkscape:path-effect
+ end_linecap_type="zerowidth"
+ miter_limit="4"
+ linejoin_type="extrp_arc"
+ start_linecap_type="zerowidth"
+ interpolator_beta="0.2"
+ interpolator_type="CubicBezierJohan"
+ sort_points="true"
+ offset_points="0,1.9199998"
+ is_visible="true"
+ id="path-effect890-6"
+ effect="powerstroke" />
+ <inkscape:path-effect
+ is_visible="true"
+ id="path-effect888-5"
+ effect="spiro" />
+ <inkscape:path-effect
+ end_linecap_type="zerowidth"
+ miter_limit="4"
+ linejoin_type="extrp_arc"
+ start_linecap_type="zerowidth"
+ interpolator_beta="0.2"
+ interpolator_type="CubicBezierJohan"
+ sort_points="true"
+ offset_points="0,1.9199998"
+ is_visible="true"
+ id="path-effect890-3"
+ effect="powerstroke" />
+ <inkscape:path-effect
+ is_visible="true"
+ id="path-effect939-6"
+ effect="spiro" />
+ <inkscape:path-effect
+ end_linecap_type="zerowidth"
+ miter_limit="4"
+ linejoin_type="extrp_arc"
+ start_linecap_type="zerowidth"
+ interpolator_beta="0.2"
+ interpolator_type="CubicBezierJohan"
+ sort_points="true"
+ offset_points="0,1.9199998"
+ is_visible="true"
+ id="path-effect941-2"
+ effect="powerstroke" />
+ </defs>
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ <dc:creator>
+ <cc:Agent>
+ <dc:title>Evan West at Wild West Designs</dc:title>
+ </cc:Agent>
+ </dc:creator>
+ <dc:rights>
+ <cc:Agent>
+ <dc:title>License to Use</dc:title>
+ </cc:Agent>
+ </dc:rights>
+ <dc:publisher>
+ <cc:Agent>
+ <dc:title>Wild West Designs</dc:title>
+ </cc:Agent>
+ </dc:publisher>
+ <dc:source>www.wildwestdesigns.biz</dc:source>
+ </cc:Work>
+ </rdf:RDF>
+ <inkstitch:thread-palette />
+ <inkstitch:color-191D1F>&quot;Black Stallion&quot;</inkstitch:color-191D1F>
+ <inkstitch:client-overview-transform>&quot;matrix(1.53415, 0, 0, 1.53415, -188.975, -188.975)&quot;</inkstitch:client-overview-transform>
+ </metadata>
+ <g
+ inkscape:groupmode="layer"
+ id="layer5"
+ inkscape:label="Instruction">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="36.474705"
+ y="106.80357"
+ id="text2177"><tspan
+ sodipodi:role="line"
+ id="tspan2175"
+ x="36.474705"
+ y="106.80357"
+ style="stroke-width:0.26458332px">Instructions</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:4.93888855px;line-height:1.25;font-family:'DejaVu Sans';-inkscape-font-specification:'DejaVu Sans';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="0.1889881"
+ y="117.19791"
+ id="text2181"><tspan
+ sodipodi:role="line"
+ id="tspan2179"
+ x="0.1889881"
+ y="117.19791"
+ style="stroke-width:0.26458332px">1. Frame intended to have monogram</tspan><tspan
+ sodipodi:role="line"
+ x="0.1889881"
+ y="123.37152"
+ style="stroke-width:0.26458332px"
+ id="tspan2183">letters to be sandwiched between both</tspan><tspan
+ sodipodi:role="line"
+ x="0.1889881"
+ y="129.54514"
+ style="stroke-width:0.26458332px"
+ id="tspan2185">frames. The monogram can be longer </tspan><tspan
+ sodipodi:role="line"
+ x="0.1889881"
+ y="135.71873"
+ style="stroke-width:0.26458332px"
+ id="tspan2187">then the frames if desired.</tspan><tspan
+ sodipodi:role="line"
+ x="0.1889881"
+ y="141.89235"
+ style="stroke-width:0.26458332px"
+ id="tspan2189" /><tspan
+ sodipodi:role="line"
+ x="0.1889881"
+ y="148.06596"
+ style="stroke-width:0.26458332px"
+ id="tspan2191">2. Can use both frames, or delete either</tspan><tspan
+ sodipodi:role="line"
+ x="0.1889881"
+ y="154.23956"
+ style="stroke-width:0.26458332px"
+ id="tspan2193">one and just use it as a top or bottom </tspan><tspan
+ sodipodi:role="line"
+ x="0.1889881"
+ y="160.41318"
+ style="stroke-width:0.26458332px"
+ id="tspan2195">frame</tspan></text>
+ </g>
+ <g
+ inkscape:label="Monogram Frame Top"
+ id="layer2"
+ inkscape:groupmode="layer">
+ <path
+ embroider_zigzag_underlay="False"
+ embroider_contour_underlay="False"
+ embroider_center_walk_underlay_stitch_length_mm="1.5"
+ embroider_center_walk_underlay="True"
+ embroider_pull_compensation_mm="None"
+ embroider_trim_after="False"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_stop_after="False"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 42.04985,19.491072 3.212799,3.401786 m -6.803573,-1.842634 c 0.236236,0.141741 3.732517,4.063244 3.921503,4.204985 m -6.945312,-2.409599 2.173364,3.968752 m -6.047621,-3.921504 0.141743,5.055431 m -4.299479,-5.811384 c 0,0 -0.377976,5.291666 -0.377976,5.102679 m -4.393974,-7.228795 c 0,0 -2.22061,5.811384 -2.078869,5.480655 M 20.31622,17.45945 c 0,0 -4.346726,3.827009 -4.204985,3.63802 m 3.921503,-6.472842 h -4.535714 m 6.425595,-1.842634 -2.315104,-3.1655502 m 4.252232,3.1183042 0.236235,-4.4412208 m 1.511905,4.4412208 1.606398,-2.787575 m 0.04725,2.551339 c 0,0 -2.126115,-2.551339 -5.480653,-1.133928 0,0 -4.015997,0.850446 -3.49628,6.520089 0,0 2.078869,6.709078 13.559896,7.181548 0,0 4.157738,0.803199 12.614955,-4.913691 M 27.63951,12.309524 c 0,0 -3.35454,-3.4962795 -7.465031,-0.897693 0,0 -4.724702,2.976562 -1.937128,8.693452 0,0 1.937128,4.866444 13.323661,6.425596 0,0 3.49628,0.519717 9.402158,-2.55134 0,0 3.307291,-2.22061 4.252232,-3.118303"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path1034" />
+ <path
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07, 0.07;stroke-dashoffset:0"
+ d="m 44.648437,20.625 1.086681,0.708706 2.267857,2.126116 1.653646,1.700892 1.559153,-1.275669 2.409597,-2.267857 1.370163,-1.322917 2.4096,1.74814 2.645834,1.606399 3.96875,1.370163 3.63802,0.614212 3.401785,-0.377976 3.354539,-0.897694 3.590774,-1.511905 2.787573,-2.362351 0.944941,-1.370164 0.425222,-1.559151 0.188989,-1.795387 -0.850447,-2.173363 -1.322917,-1.74814 -1.55915,-0.850446 -1.181176,-0.330729 -1.370164,-0.141742 -1.511906,0.236236 -0.472469,0.236235"
+ id="path1089"
+ inkscape:connector-curvature="0"
+ embroider_manual_stitch="False"
+ embroider_zigzag_spacing_mm="0.4"
+ embroider_stop_after="False"
+ embroider_repeats="1"
+ embroider_running_stitch_length_mm="1.6"
+ embroider_trim_after="False" />
+ <path
+ embroider_zigzag_underlay="False"
+ embroider_contour_underlay="False"
+ embroider_center_walk_underlay_stitch_length_mm="1.5"
+ embroider_center_walk_underlay="False"
+ embroider_pull_compensation_mm="None"
+ embroider_trim_after="False"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_stop_after="False"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 56.271205,19.372954 -1.842633,1.866258 m 3.212796,-1.299294 -2.102493,2.62221 m 4.346728,-1.630022 -2.267857,2.858445 m 5.19717,-1.181176 -2.244233,3.307292 m 5.149927,-2.740327 -1.346541,3.827008 m 4.913691,-3.519903 c 0.02363,0.141741 -0.425223,4.134115 -0.425223,4.134115 m 3.756139,-4.701079 0.259858,3.49628 m 3.260045,-5.055432 c 0.07087,0.09449 0.732329,3.921503 0.732329,4.039621 m 1.937126,-5.787761 c 0.118118,0.04725 2.527718,2.551339 2.527718,2.551339 m -1.015812,-5.527901 3.141927,2.362351 m -3.000187,-4.275856 3.354541,0.755953 m -4.110493,-2.22061 3.732514,-0.590588 m -5.598771,-0.637835 c 0,0 3.283667,-1.771763 3.189174,-1.724516 m -4.724702,1.252046 c 0,0 1.157552,-2.3387278 1.086681,-2.2442337 M 74.626673,11.74256 74.39044,9.7109379 M 73.776228,11.34096 c 0,0 2.763951,-1.393787 5.504278,0.47247 0,0 2.126116,0.944941 2.338728,4.228609 0,0 0.377976,2.976563 -3.118304,5.622396 0,0 -5.71689,3.661644 -10.937686,3.047433 0,0 -6.803571,-0.141741 -11.292038,-4.724702 l -0.944941,-0.04725 m 18.30822,-9.071426 c 0,0 4.252233,-2.1497396 7.654018,1.630022 0,0 3.236423,3.614398 -0.141739,8.3391 0,0 -1.67727,2.645834 -6.685454,4.346726 0,0 -3.992374,1.252046 -7.016183,1.204799 0,0 -2.811198,-0.02362 -4.795573,-0.992187 0,0 -5.598773,-1.582775 -8.008371,-4.819196"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path1192" />
+ <path
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07, 0.07;stroke-dashoffset:0"
+ d="m 55.042781,20.199777 -1.653646,-1.74814 -2.740326,-2.504092 h 1.889881 l 1.724517,0.07087 1.346539,-0.283483 1.393788,-0.54334 1.228423,-0.944941 1.110303,-1.34654 L 59.909225,11.41183 60.169083,9.805432 59.909225,8.4116449 59.507625,7.3249633 58.846166,6.5217637 58.019343,5.883929 56.814545,5.5059529 55.893228,5.5295775 54.995534,5.7894362 54.286829,6.238283 53.81436,6.7343768"
+ id="path1251"
+ inkscape:connector-curvature="0"
+ embroider_manual_stitch="False"
+ embroider_zigzag_spacing_mm="0.4"
+ embroider_running_stitch_length_mm="1.6"
+ embroider_trim_after="False"
+ embroider_stop_after="False"
+ embroider_repeats="1" />
+ <path
+ embroider_zigzag_underlay="False"
+ embroider_contour_underlay="False"
+ embroider_center_walk_underlay_stitch_length_mm="1.5"
+ embroider_center_walk_underlay="False"
+ embroider_pull_compensation_mm="None"
+ embroider_trim_after="False"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_stop_after="False"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 50.380304,14.306708 -0.0167,2.255087 m 0.968848,-2.238382 0.400905,2.488947 m 1.085784,-2.004522 0.183747,2.104748 m 1.703843,-2.221678 0.133636,2.004522 m 1.88759,-2.923261 c 0.06682,0.03341 0.868625,1.904295 0.868625,1.904295 m 0.684879,-3.925521 c 0.100227,0.08352 1.937705,1.80407 1.937705,1.80407 M 58.983043,9.7130131 c 0.08352,0 2.388722,0.8018089 2.388722,0.8018089 M 58.54873,7.9590568 c 0.08352,-0.050113 2.388721,-0.1670433 2.388721,-0.1670433 M 57.763626,6.5558918 c 0.06682,-0.016703 1.653731,-0.7182869 1.653731,-0.7182869 m -3.090304,0.233861 c 0.01669,-0.066817 1.018965,-1.3363477 1.018965,-1.3363477 M 55.207862,6.3387353 54.957297,5.0023879 m -0.68488,1.9209996 -0.751694,-0.8185129 m 0.217157,0.9187389 c 0,0 1.035669,-1.4699824 2.873147,-1.3363475 0,0 1.553504,0.1503391 2.438834,1.4699824 0,0 0.835218,1.2194172 0.734992,2.4889475 0,0 0.183747,1.8541821 -1.302939,3.6916601 0,0 -1.436574,1.770661 -3.908817,2.154861 0,0 -2.071339,0.200452 -4.042452,-0.701583 l -0.400904,-0.0167 m 3.441094,-7.9178639 c 0,0 0.968851,-1.6203215 3.173825,-1.5033911 0,0 2.572471,0.1169305 3.49121,2.9900779 0,0 1.069078,3.3241651 -1.620322,6.0135641 0,0 -1.737252,1.820774 -4.059156,2.004522 0,0 -2.572468,0.217156 -4.343129,-0.501131"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path1337" />
+ <path
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07, 0.07;stroke-dashoffset:0"
+ d="m 50.199961,15.356957 -1.204798,0.637835 -1.819011,0.4016 h -2.102493 l -1.96075,-0.47247 -1.441035,-0.779576 -1.015812,-0.897694 -0.850445,-1.724516 -0.496093,-1.582776 0.07087,-1.7008922 0.54334,-1.2047993 0.590587,-0.921317 0.708707,-0.5315289 0.696894,-0.3779762 0.956752,-0.2126116 1.004,0.059059 0.791387,0.2952939 0.519717,0.3661645 0.12993,0.141741"
+ id="path1400"
+ inkscape:connector-curvature="0"
+ embroider_manual_stitch="False"
+ embroider_zigzag_spacing_mm="0.4"
+ embroider_stop_after="False"
+ embroider_repeats="1"
+ embroider_running_stitch_length_mm="1.6"
+ embroider_trim_after="False" />
+ <path
+ embroider_zigzag_underlay="False"
+ embroider_contour_underlay="False"
+ embroider_center_walk_underlay_stitch_length_mm="1.5"
+ embroider_center_walk_underlay="False"
+ embroider_pull_compensation_mm="None"
+ embroider_trim_after="False"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_stop_after="False"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 49.680246,14.305711 0.07087,2.067057 m -1.381976,-1.700893 0.685083,2.279669 M 46.656437,14.83724 c 0.02363,0.04725 0.566962,2.634021 0.566962,2.634021 m -2.988374,-2.574962 c 0,0.04725 0.0118,2.704892 0.0118,2.704892 m -1.228409,-3.519903 c -0.01183,0.08268 -0.496094,3.082868 -0.496094,3.082868 m -0.614212,-3.933315 -1.063058,2.846633 m 0.118118,-4.264044 -1.559153,2.185175 m 1.015812,-3.106492 -2.078871,0.826823 m 2.267858,-2.1497393 c -0.04725,-0.011811 -2.539527,0.295294 -2.539527,0.295294 m 3.023809,-1.7245163 c -0.04725,0 -1.972564,-0.9331288 -1.972564,-0.9331288 m 2.988377,-0.059059 -0.862259,-1.6536458 m 2.49228,1.5237164 0.0118,-1.8898809 m 0.956763,2.0079985 0.649647,-1.358352 m 0.188989,1.063058 c 0,0 -1.641835,-1.8071986 -4.02781,-0.7795757 0,0 -1.88988,0.6850818 -2.504091,3.1301153 0,0 -0.755952,2.6812686 1.27567,5.2680436 0,0 1.925316,2.350539 4.71289,2.586774 0,0 2.232422,0.259859 3.756139,-0.47247 0,0 0.342541,-0.177176 0.649646,-0.437035 l 0.531529,-0.165364 M 45.357142,7.088728 c 0,0 -1.700893,-1.6654574 -3.732514,-0.4488466 0,0 -1.736328,0.921317 -1.81901,3.4372206 0,0 -0.12993,1.67727 1.027622,3.283669 0,0 1.523717,1.972563 3.767951,2.385974 0,0 2.315104,0.566965 4.84282,-0.980375 l 0.496093,0.01181"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path1494" />
+ <path
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07, 0.07;stroke-dashoffset:0"
+ d="m 50.034597,15.380581 1.228423,1.228422 2.008,1.74814 1.55915,1.322917 0.0945,0.850446 -1.27567,1.322917 -1.960753,1.937128 -1.748139,1.34654"
+ id="path1563"
+ inkscape:connector-curvature="0"
+ embroider_manual_stitch="False"
+ embroider_zigzag_spacing_mm="0.4"
+ embroider_stop_after="False"
+ embroider_repeats="1"
+ embroider_running_stitch_length_mm="1.6"
+ embroider_trim_after="False" />
+ <path
+ embroider_zigzag_underlay="False"
+ embroider_contour_underlay="False"
+ embroider_center_walk_underlay_stitch_length_mm="1.5"
+ embroider_center_walk_underlay="False"
+ embroider_pull_compensation_mm="None"
+ embroider_trim_after="False"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_stop_after="False"
+ embroider_satin_column="True"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccc"
+ inkscape:connector-curvature="0"
+ d="m 49.24321,22.762928 -0.909506,2.586775 M 48.203775,21.69987 c -0.05906,0.03543 -1.807199,2.303292 -1.807199,2.303292 m 1.216613,-3.200986 -2.917506,1.441035 m 1.46466,-1.94894 -3.413599,0.03544 m 4.299479,-0.744145 c -0.04725,-0.01181 -2.634022,-1.228423 -2.634022,-1.228423 m 3.886068,0.09449 -1.771764,-1.937128 m 2.681269,0.815011 -0.555151,-2.787574 m 1.370163,2.303293 -0.03544,-3.260045 m 0.968566,4.03962 c 0.0118,-0.04725 0.68508,-2.763951 0.68508,-2.763951 m 0.354354,4.015997 2.137926,-2.149739 m -1.181174,2.929315 2.291479,-1.488281 m -2.30329,2.185175 c 0.05906,0 4.086865,-0.661458 4.086865,-0.661458 m -4.98456,1.34654 c 0.07087,0.05906 3.378163,1.523716 3.378163,1.523716 M 50.873229,22.39676 c 0.05906,0.04725 1.736328,2.326915 1.736328,2.326915 m -2.397786,-1.228422 0.330729,2.704892 m -0.519718,-0.165365 6.272043,-6.035807 -6.31929,-5.764137 -6.354725,6.106678 6.295665,5.78776 m 0.02362,-1.901692 4.275854,-4.181362 -4.228608,-3.909691 -4.358537,4.252232 4.228608,3.862444"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path1665" />
+ <path
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07, 0.07;stroke-dashoffset:0"
+ d="m 49.892857,24.227586 0.08268,1.866257 -0.0118,0.850448"
+ id="path1736"
+ inkscape:connector-curvature="0"
+ embroider_manual_stitch="True" />
+ <path
+ embroider_trim_after="False"
+ embroider_running_stitch_length_mm="1.6"
+ embroider_repeats="1"
+ embroider_stop_after="False"
+ embroider_zigzag_spacing_mm="0.4"
+ embroider_manual_stitch="False"
+ inkscape:connector-curvature="0"
+ id="path1808"
+ d="M 49.979402,27.035418 31.136899,27.002009 14.566189,26.801558"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07, 0.07;stroke-dashoffset:0" />
+ <path
+ id="path1882-7"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 14.322543,27.605144 71.427782,0.03341 m -71.451405,-1.73903 71.42778,0.03341"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_stop_after="False"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_trim_after="True"
+ embroider_pull_compensation_mm="None"
+ embroider_center_walk_underlay="True"
+ embroider_center_walk_underlay_stitch_length_mm="1.5"
+ embroider_contour_underlay="False"
+ embroider_zigzag_underlay="False" />
+ </g>
+ <g
+ inkscape:label="Monogram Frame Bottom"
+ id="layer4"
+ inkscape:groupmode="layer">
+ <path
+ embroider_zigzag_underlay="False"
+ embroider_contour_underlay="False"
+ embroider_center_walk_underlay_stitch_length_mm="1.5"
+ embroider_center_walk_underlay="True"
+ embroider_pull_compensation_mm="None"
+ embroider_trim_after="False"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_stop_after="False"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 42.049851,83.55084 3.212799,-3.401787 m -6.803573,1.842635 c 0.236236,-0.141741 3.732517,-4.063246 3.921503,-4.204987 m -6.945312,2.4096 2.173364,-3.968754 m -6.047622,3.921506 0.141744,-5.055433 m -4.29948,5.811387 c 0,0 -0.377975,-5.291669 -0.377975,-5.102682 m -4.393975,7.228798 c 0,0 -2.22061,-5.811386 -2.078869,-5.480657 m -0.236235,8.031996 c 0,0 -4.346726,-3.827009 -4.204985,-3.63802 m 3.921503,6.472842 h -4.535714 m 6.425595,1.842634 -2.315104,3.16555 m 4.252232,-3.118304 0.236235,4.441221 m 1.511906,-4.441221 1.606397,2.787575 m 0.04725,-2.551339 c 0,0 -2.126115,2.551339 -5.480654,1.133928 0,0 -4.015997,-0.850446 -3.49628,-6.520089 0,0 2.078869,-6.709079 13.559897,-7.18155 0,0 4.157738,-0.803199 12.614955,4.913693 m -16.819942,7.843006 c 0,0 -3.354541,3.49628 -7.465032,0.897693 0,0 -4.724702,-2.976562 -1.937128,-8.693452 0,0 1.937128,-4.866446 13.323662,-6.425599 0,0 3.49628,-0.519717 9.402157,2.551342 0,0 3.307292,2.220611 4.252233,3.118304"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path1034-2" />
+ <path
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07, 0.07;stroke-dashoffset:0"
+ d="m 44.648438,82.416912 1.086681,-0.708706 2.267857,-2.126117 1.653646,-1.700893 1.559153,1.27567 2.409597,2.267858 1.370163,1.322917 2.409601,-1.74814 2.645833,-1.6064 3.96875,-1.370164 3.638021,-0.614212 3.401785,0.377976 3.354538,0.897695 3.590774,1.511905 2.787573,2.362352 0.944941,1.370164 0.425223,1.559151 0.188989,1.795387 -0.850448,2.173363 -1.322916,1.74814 -1.55915,0.850446 -1.181177,0.330729 -1.370163,0.141742 -1.511906,-0.236236 -0.472469,-0.236235"
+ id="path1089-0"
+ inkscape:connector-curvature="0"
+ embroider_manual_stitch="False"
+ embroider_zigzag_spacing_mm="0.4"
+ embroider_stop_after="False"
+ embroider_repeats="1"
+ embroider_running_stitch_length_mm="1.6"
+ embroider_trim_after="False" />
+ <path
+ embroider_zigzag_underlay="False"
+ embroider_contour_underlay="False"
+ embroider_center_walk_underlay_stitch_length_mm="1.5"
+ embroider_center_walk_underlay="False"
+ embroider_pull_compensation_mm="None"
+ embroider_trim_after="False"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_stop_after="False"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="M 56.271205,83.668958 54.428573,81.8027 m 3.212796,1.299294 -2.102493,-2.62221 m 4.346728,1.630022 -2.267857,-2.858446 m 5.19717,1.181177 -2.244232,-3.307294 m 5.149926,2.740328 -1.346541,-3.82701 m 4.913691,3.519905 c 0.02363,-0.141741 -0.425223,-4.134117 -0.425223,-4.134117 m 3.756139,4.701081 0.259858,-3.496282 m 3.260045,5.055435 c 0.07087,-0.09449 0.73233,-3.921505 0.73233,-4.039623 m 1.937125,5.787763 c 0.118118,-0.04725 2.527718,-2.551339 2.527718,-2.551339 m -1.015812,5.527901 3.141927,-2.362351 m -3.000187,4.275856 3.354541,-0.755953 m -4.110492,2.22061 3.732514,0.590588 m -5.598771,0.637835 c 0,0 3.283667,1.771763 3.189173,1.724516 M 76.303945,91.48834 c 0,0 1.157552,2.338728 1.08668,2.244234 m -2.763951,-2.433222 -0.236233,2.031622 m -0.614212,-1.630022 c 0,0 2.763952,1.393787 5.504278,-0.47247 0,0 2.126115,-0.944941 2.338729,-4.228609 0,0 0.377976,-2.976563 -3.118305,-5.622396 0,0 -5.716889,-3.661646 -10.937687,-3.047434 0,0 -6.80357,0.141741 -11.292036,4.724703 l -0.944943,0.04725 m 18.308222,9.071426 c 0,0 4.252232,2.14974 7.654017,-1.630022 0,0 3.236423,-3.614398 -0.14174,-8.3391 0,0 -1.677268,-2.645835 -6.685452,-4.346728 0,0 -3.992374,-1.252047 -7.016184,-1.2048 0,0 -2.811197,0.02362 -4.795572,0.992188 0,0 -5.598774,1.582776 -8.008372,4.819198"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path1192-2" />
+ <path
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07, 0.07;stroke-dashoffset:0"
+ d="m 55.042782,82.842135 -1.653646,1.74814 -2.740326,2.504092 h 1.889881 l 1.724517,-0.07087 1.346539,0.283483 1.393788,0.54334 1.228423,0.944941 1.110303,1.34654 0.566965,1.488281 0.259858,1.606398 -0.259858,1.393787 -0.4016,1.086682 -0.661459,0.803199 -0.826822,0.637835 -1.204799,0.377976 -0.921316,-0.02362 -0.897695,-0.259859 -0.708705,-0.448847 -0.472469,-0.496094"
+ id="path1251-3"
+ inkscape:connector-curvature="0"
+ embroider_manual_stitch="False"
+ embroider_zigzag_spacing_mm="0.4"
+ embroider_running_stitch_length_mm="1.6"
+ embroider_trim_after="False"
+ embroider_stop_after="False"
+ embroider_repeats="1" />
+ <path
+ embroider_zigzag_underlay="False"
+ embroider_contour_underlay="False"
+ embroider_center_walk_underlay_stitch_length_mm="1.5"
+ embroider_center_walk_underlay="False"
+ embroider_pull_compensation_mm="None"
+ embroider_trim_after="False"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_stop_after="False"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 50.380305,88.735204 -0.01669,-2.255087 m 0.968849,2.238382 0.400904,-2.488947 m 1.085784,2.004522 0.183748,-2.104748 m 1.703837,2.221678 0.133636,-2.004522 m 1.887591,2.923261 c 0.06682,-0.03341 0.868624,-1.904295 0.868624,-1.904295 m 0.684879,3.925521 c 0.100227,-0.08352 1.937705,-1.80407 1.937705,-1.80407 m -1.236122,3.842 c 0.08352,0 2.388721,-0.801809 2.388721,-0.801809 m -2.823035,2.555765 c 0.08352,0.05011 2.388722,0.167043 2.388722,0.167043 m -3.173831,1.236122 c 0.06682,0.0167 1.653731,0.718287 1.653731,0.718287 m -3.090304,-0.233861 c 0.0167,0.06682 1.018966,1.336348 1.018966,1.336348 m -2.138156,-1.603617 -0.250566,1.336347 m -0.684879,-1.921 -0.751695,0.818513 m 0.217157,-0.918738 c 0,0 1.035669,1.469982 2.873147,1.336347 0,0 1.553504,-0.150339 2.438834,-1.469982 0,0 0.835218,-1.219418 0.734992,-2.488948 0,0 0.183747,-1.854182 -1.302938,-3.69166 0,0 -1.436574,-1.770661 -3.908817,-2.154861 0,0 -2.071341,-0.200452 -4.042452,0.701583 l -0.400905,0.0167 m 3.441094,7.917863 c 0,0 0.968851,1.620321 3.173825,1.503391 0,0 2.57247,-0.11693 3.491209,-2.990078 0,0 1.069078,-3.324165 -1.620321,-6.013564 0,0 -1.737252,-1.820774 -4.059156,-2.004522 0,0 -2.572469,-0.217156 -4.34313,0.501131"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path1337-7" />
+ <path
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07, 0.07;stroke-dashoffset:0"
+ d="M 50.199962,87.684955 48.995164,87.04712 47.176153,86.64552 H 45.07366 l -1.96075,0.47247 -1.441035,0.779576 -1.015812,0.897694 -0.850445,1.724516 -0.496093,1.582776 0.07087,1.700892 0.54334,1.2048 0.590587,0.921316 0.708706,0.531529 0.696894,0.377977 0.956752,0.212611 1.004001,-0.05906 0.791388,-0.295294 0.519715,-0.366164 0.129932,-0.141741"
+ id="path1400-5"
+ inkscape:connector-curvature="0"
+ embroider_manual_stitch="False"
+ embroider_zigzag_spacing_mm="0.4"
+ embroider_stop_after="False"
+ embroider_repeats="1"
+ embroider_running_stitch_length_mm="1.6"
+ embroider_trim_after="False" />
+ <path
+ embroider_zigzag_underlay="False"
+ embroider_contour_underlay="False"
+ embroider_center_walk_underlay_stitch_length_mm="1.5"
+ embroider_center_walk_underlay="False"
+ embroider_pull_compensation_mm="None"
+ embroider_trim_after="False"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_stop_after="False"
+ embroider_satin_column="True"
+ inkscape:connector-curvature="0"
+ d="m 49.680247,88.736201 0.07087,-2.067057 m -1.381976,1.700893 0.685083,-2.279669 m -2.397786,2.114304 c 0.02363,-0.04725 0.566962,-2.634021 0.566962,-2.634021 m -2.988374,2.574962 c 0,-0.04725 0.0118,-2.704892 0.0118,-2.704892 m -1.22841,3.519903 c -0.01183,-0.08268 -0.496094,-3.082868 -0.496094,-3.082868 m -0.614211,3.933315 -1.063058,-2.846633 m 0.118117,4.264044 -1.559152,-2.185175 m 1.015812,3.106492 -2.078871,-0.826823 m 2.267858,2.149739 c -0.04725,0.01181 -2.539527,-0.295294 -2.539527,-0.295294 m 3.023809,1.724517 c -0.04725,0 -1.972564,0.933128 -1.972564,0.933128 m 2.988377,0.05906 -0.862259,1.653646 m 2.49228,-1.523716 0.0118,1.889881 m 0.956763,-2.007999 0.649647,1.358352 m 0.188989,-1.063058 c 0,0 -1.641835,1.807199 -4.02781,0.779576 0,0 -1.88988,-0.685082 -2.504091,-3.130116 0,0 -0.755952,-2.681268 1.27567,-5.268043 0,0 1.925315,-2.350539 4.712891,-2.586774 0,0 2.232422,-0.259859 3.756139,0.47247 0,0 0.34254,0.177176 0.649644,0.437035 l 0.53153,0.165364 m -4.582962,8.882441 c 0,0 -1.700893,1.665457 -3.732514,0.448847 0,0 -1.736328,-0.921318 -1.81901,-3.437221 0,0 -0.12993,-1.67727 1.027623,-3.283669 0,0 1.523716,-1.972563 3.767949,-2.385974 0,0 2.315104,-0.566965 4.84282,0.980375 l 0.496094,-0.01181"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path1494-9" />
+ <path
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07, 0.07;stroke-dashoffset:0"
+ d="m 50.034598,87.661331 1.228423,-1.228422 2.008,-1.74814 1.55915,-1.322917 0.0945,-0.850446 -1.27567,-1.322917 -1.960753,-1.937129 -1.748139,-1.346541"
+ id="path1563-2"
+ inkscape:connector-curvature="0"
+ embroider_manual_stitch="False"
+ embroider_zigzag_spacing_mm="0.4"
+ embroider_stop_after="False"
+ embroider_repeats="1"
+ embroider_running_stitch_length_mm="1.6"
+ embroider_trim_after="False" />
+ <path
+ embroider_zigzag_underlay="False"
+ embroider_contour_underlay="False"
+ embroider_center_walk_underlay_stitch_length_mm="1.5"
+ embroider_center_walk_underlay="False"
+ embroider_pull_compensation_mm="None"
+ embroider_trim_after="False"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_stop_after="False"
+ embroider_satin_column="True"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccc"
+ inkscape:connector-curvature="0"
+ d="m 49.243211,80.278983 -0.909506,-2.586776 m -0.129929,3.649835 c -0.05906,-0.03543 -1.807199,-2.303293 -1.807199,-2.303293 m 1.216612,3.200987 -2.917504,-1.441035 m 1.464659,1.94894 -3.413599,-0.03544 m 4.299479,0.744145 c -0.04725,0.01181 -2.634022,1.228423 -2.634022,1.228423 m 3.886068,-0.09449 -1.771764,1.937128 m 2.681269,-0.815011 -0.555151,2.787574 m 1.370163,-2.303293 -0.03544,3.260045 m 0.968565,-4.03962 c 0.0118,0.04725 0.685081,2.763951 0.685081,2.763951 m 0.354354,-4.015997 2.137926,2.149739 m -1.181175,-2.929315 2.29148,1.488281 m -2.303291,-2.185175 c 0.05906,0 4.086866,0.661458 4.086866,0.661458 m -4.98456,-1.34654 c 0.07087,-0.05906 3.378163,-1.523716 3.378163,-1.523716 m -4.547527,0.165364 c 0.05906,-0.04725 1.736328,-2.326916 1.736328,-2.326916 m -2.397786,1.228422 0.330729,-2.704893 m -0.519718,0.165365 6.272043,6.035809 -6.31929,5.764137 -6.354725,-6.106678 6.295665,-5.787762 m 0.02363,1.901693 4.275852,4.181363 -4.228608,3.909691 -4.358537,-4.252232 4.228608,-3.862445"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path1665-2" />
+ <path
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07, 0.07;stroke-dashoffset:0"
+ d="m 49.892858,78.814325 0.08268,-1.866258 -0.0118,-0.850449"
+ id="path1736-8"
+ inkscape:connector-curvature="0"
+ embroider_manual_stitch="True" />
+ <path
+ embroider_trim_after="False"
+ embroider_running_stitch_length_mm="1.6"
+ embroider_repeats="1"
+ embroider_stop_after="False"
+ embroider_zigzag_spacing_mm="0.4"
+ embroider_manual_stitch="False"
+ inkscape:connector-curvature="0"
+ id="path1808-9"
+ d="m 49.979403,76.006491 -18.842504,0.03341 -16.57071,0.200451"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:0.07, 0.07;stroke-dashoffset:0" />
+ <path
+ id="path1882-7-7"
+ style="fill:none;stroke:#191d1f;stroke-width:0.07;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 14.322543,75.436765 71.427783,-0.03341 m -71.451406,1.739031 71.427782,-0.03341"
+ inkscape:connector-curvature="0"
+ embroider_satin_column="True"
+ embroider_stop_after="False"
+ embroider_zigzag_spacing_mm="0.33"
+ embroider_trim_after="True"
+ embroider_pull_compensation_mm="None"
+ embroider_center_walk_underlay="True"
+ embroider_center_walk_underlay_stitch_length_mm="1.5"
+ embroider_contour_underlay="False"
+ embroider_zigzag_underlay="False" />
+ </g>
+</svg>
diff --git a/images/examples/inkstitch_logo_screenshot.png b/images/examples/inkstitch_logo_screenshot.png
new file mode 100644
index 00000000..6c77a855
--- /dev/null
+++ b/images/examples/inkstitch_logo_screenshot.png
Binary files differ
diff --git a/images/patches/Monogram Example.jpg b/images/patches/Monogram Example.jpg
new file mode 100644
index 00000000..021195dd
--- /dev/null
+++ b/images/patches/Monogram Example.jpg
Binary files differ
diff --git a/inkstitch.py b/inkstitch.py
new file mode 100644
index 00000000..a9ce829e
--- /dev/null
+++ b/inkstitch.py
@@ -0,0 +1,32 @@
+import sys
+import traceback
+from argparse import ArgumentParser
+from lib.utils import save_stderr, restore_stderr
+from lib import extensions
+
+
+parser = ArgumentParser()
+parser.add_argument("--extension")
+my_args, remaining_args = parser.parse_known_args()
+
+extension_name = my_args.extension
+extension_class = getattr(extensions, extension_name.capitalize())
+extension = extension_class()
+
+exception = None
+
+save_stderr()
+try:
+ extension.affect(args=remaining_args)
+except (SystemExit, KeyboardInterrupt):
+ raise
+except Exception:
+ exception = traceback.format_exc()
+finally:
+ restore_stderr()
+
+if exception:
+ print >> sys.stderr, exception
+ sys.exit(1)
+else:
+ sys.exit(0)
diff --git a/inkstitch/__init__.py b/inkstitch/__init__.py
deleted file mode 100644
index 45eed3a6..00000000
--- a/inkstitch/__init__.py
+++ /dev/null
@@ -1,298 +0,0 @@
-#!/usr/bin/env python
-# http://www.achatina.de/sewing/main/TECHNICL.HTM
-
-import os
-import sys
-import gettext
-from copy import deepcopy
-import math
-import libembroidery
-from inkstitch.utils import cache
-from inkstitch.utils.geometry import Point
-
-import inkex
-import simplepath
-import simplestyle
-import simpletransform
-from bezmisc import bezierlength, beziertatlength, bezierpointatt
-from cspsubdiv import cspsubdiv
-import cubicsuperpath
-from shapely import geometry as shgeo
-
-
-# modern versions of Inkscape use 96 pixels per inch as per the CSS standard
-PIXELS_PER_MM = 96 / 25.4
-
-SVG_PATH_TAG = inkex.addNS('path', 'svg')
-SVG_POLYLINE_TAG = inkex.addNS('polyline', 'svg')
-SVG_DEFS_TAG = inkex.addNS('defs', 'svg')
-SVG_GROUP_TAG = inkex.addNS('g', 'svg')
-INKSCAPE_LABEL = inkex.addNS('label', 'inkscape')
-INKSCAPE_GROUPMODE = inkex.addNS('groupmode', 'inkscape')
-
-EMBROIDERABLE_TAGS = (SVG_PATH_TAG, SVG_POLYLINE_TAG)
-
-dbg = open(os.devnull, "w")
-
-translation = None
-_ = lambda message: message
-
-
-def localize():
- if getattr(sys, 'frozen', False):
- # we are in a pyinstaller installation
- locale_dir = sys._MEIPASS
- else:
- locale_dir = os.path.dirname(__file__)
-
- locale_dir = os.path.join(locale_dir, 'locales')
-
- global translation, _
-
- translation = gettext.translation("inkstitch", locale_dir, fallback=True)
- _ = translation.gettext
-
-localize()
-
-# cribbed from inkscape-silhouette
-def parse_length_with_units( str ):
-
- '''
- Parse an SVG value which may or may not have units attached
- This version is greatly simplified in that it only allows: no units,
- units of px, mm, and %. Everything else, it returns None for.
- There is a more general routine to consider in scour.py if more
- generality is ever needed.
- '''
-
- u = 'px'
- s = str.strip()
- if s[-2:] == 'px':
- s = s[:-2]
- elif s[-2:] == 'mm':
- u = 'mm'
- s = s[:-2]
- elif s[-2:] == 'pt':
- u = 'pt'
- s = s[:-2]
- elif s[-2:] == 'pc':
- u = 'pc'
- s = s[:-2]
- elif s[-2:] == 'cm':
- u = 'cm'
- s = s[:-2]
- elif s[-2:] == 'in':
- u = 'in'
- s = s[:-2]
- elif s[-1:] == '%':
- u = '%'
- s = s[:-1]
- try:
- v = float( s )
- except:
- raise ValueError(_("parseLengthWithUnits: unknown unit %s") % s)
-
- return v, u
-
-
-def convert_length(length):
- value, units = parse_length_with_units(length)
-
- if not units or units == "px":
- return value
-
- if units == 'pt':
- value /= 72
- units = 'in'
-
- if units == 'pc':
- value /= 6
- units = 'in'
-
- if units == 'cm':
- value *= 10
- units = 'mm'
-
- if units == 'mm':
- value = value / 25.4
- units = 'in'
-
- if units == 'in':
- # modern versions of Inkscape use CSS's 96 pixels per inch. When you
- # open an old document, inkscape will add a viewbox for you.
- return value * 96
-
- raise ValueError(_("Unknown unit: %s") % units)
-
-
-@cache
-def get_doc_size(svg):
- doc_width = convert_length(svg.get('width'))
- doc_height = convert_length(svg.get('height'))
-
- return doc_width, doc_height
-
-@cache
-def get_viewbox_transform(node):
- # somewhat cribbed from inkscape-silhouette
- doc_width, doc_height = get_doc_size(node)
-
- viewbox = node.get('viewBox').strip().replace(',', ' ').split()
-
- dx = -float(viewbox[0])
- dy = -float(viewbox[1])
- transform = simpletransform.parseTransform("translate(%f, %f)" % (dx, dy))
-
- try:
- sx = doc_width / float(viewbox[2])
- sy = doc_height / float(viewbox[3])
- scale_transform = simpletransform.parseTransform("scale(%f, %f)" % (sx, sy))
- transform = simpletransform.composeTransform(transform, scale_transform)
- except ZeroDivisionError:
- pass
-
- return transform
-
-@cache
-def get_stroke_scale(node):
- doc_width, doc_height = get_doc_size(node)
- viewbox = node.get('viewBox').strip().replace(',', ' ').split()
- return doc_width / float(viewbox[2])
-
-
-class Stitch(Point):
- def __init__(self, x, y, color=None, jump=False, stop=False, trim=False, no_ties=False):
- self.x = x
- self.y = y
- self.color = color
- self.jump = jump
- self.trim = trim
- self.stop = stop
- self.no_ties = no_ties
-
- def __repr__(self):
- return "Stitch(%s, %s, %s, %s, %s, %s, %s)" % (self.x, self.y, self.color, "JUMP" if self.jump else " ", "TRIM" if self.trim else " ", "STOP" if self.stop else " ", "NO TIES" if self.no_ties else " ")
-
-
-def make_thread(color):
- thread = libembroidery.EmbThread()
- thread.color = libembroidery.embColor_make(*color.rgb)
-
- thread.description = color.name
- thread.catalogNumber = ""
-
- return thread
-
-def add_thread(pattern, thread):
- """Add a thread to a pattern and return the thread's index"""
-
- libembroidery.embPattern_addThread(pattern, thread)
-
- return libembroidery.embThreadList_count(pattern.threadList) - 1
-
-def get_flags(stitch):
- flags = 0
-
- if stitch.jump:
- flags |= libembroidery.JUMP
-
- if stitch.trim:
- flags |= libembroidery.TRIM
-
- if stitch.stop:
- flags |= libembroidery.STOP
-
- return flags
-
-
-def _string_to_floats(string):
- floats = string.split(',')
- return [float(num) for num in floats]
-
-
-def get_origin(svg):
- # The user can specify the embroidery origin by defining two guides
- # named "embroidery origin" that intersect.
-
- namedview = svg.find(inkex.addNS('namedview', 'sodipodi'))
- all_guides = namedview.findall(inkex.addNS('guide', 'sodipodi'))
- label_attribute = inkex.addNS('label', 'inkscape')
- guides = [guide for guide in all_guides
- if guide.get(label_attribute, "").startswith("embroidery origin")]
-
- # document size used below
- doc_size = list(get_doc_size(svg))
-
- # convert the size from viewbox-relative to real-world pixels
- viewbox_transform = get_viewbox_transform(svg)
- simpletransform.applyTransformToPoint(simpletransform.invertTransform(viewbox_transform), doc_size)
-
- default = [doc_size[0] / 2.0, doc_size[1] / 2.0]
- simpletransform.applyTransformToPoint(viewbox_transform, default)
- default = Point(*default)
-
- if len(guides) < 2:
- return default
-
- # Find out where the guides intersect. Only pay attention to the first two.
- guides = guides[:2]
-
- lines = []
- for guide in guides:
- # inkscape's Y axis is reversed from SVG's, and the guide is in inkscape coordinates
- position = Point(*_string_to_floats(guide.get('position')))
- position.y = doc_size[1] - position.y
-
-
- # This one baffles me. I think inkscape might have gotten the order of
- # their vector wrong?
- parts = _string_to_floats(guide.get('orientation'))
- direction = Point(parts[1], parts[0])
-
- # We have a theoretically infinite line defined by a point on the line
- # and a vector direction. Shapely can only deal in concrete line
- # segments, so we'll pick points really far in either direction on the
- # line and call it good enough.
- lines.append(shgeo.LineString((position + 100000 * direction, position - 100000 * direction)))
-
- intersection = lines[0].intersection(lines[1])
-
- if isinstance(intersection, shgeo.Point):
- origin = [intersection.x, intersection.y]
- simpletransform.applyTransformToPoint(viewbox_transform, origin)
- return Point(*origin)
- else:
- # Either the two guides are the same line, or they're parallel.
- return default
-
-
-def write_embroidery_file(file_path, stitch_plan, svg):
- origin = get_origin(svg)
-
- pattern = libembroidery.embPattern_create()
-
- for color_block in stitch_plan:
- add_thread(pattern, make_thread(color_block.color))
-
- for stitch in color_block:
- if stitch.stop and stitch is not color_block.last_stitch:
- # A STOP stitch that is not at the end of a color block
- # occurs when the user specified "STOP after". "STOP" is the
- # same thing as a color change, and the user will assign a
- # special color at the machine that tells it to pause after.
- # We need to add another copy of the same color here so that
- # the stitches after the STOP are still the same color.
- add_thread(pattern, make_thread(color_block.color))
-
- flags = get_flags(stitch)
- libembroidery.embPattern_addStitchAbs(pattern, stitch.x - origin.x, stitch.y - origin.y, flags, 1)
-
- libembroidery.embPattern_addStitchAbs(pattern, stitch.x - origin.x, stitch.y - origin.y, libembroidery.END, 1)
-
- # convert from pixels to millimeters
- libembroidery.embPattern_scale(pattern, 1/PIXELS_PER_MM)
-
- # SVG and embroidery disagree on the direction of the Y axis
- libembroidery.embPattern_flipVertical(pattern)
-
- libembroidery.embPattern_write(pattern, file_path)
diff --git a/inkstitch/stitch_plan/stop.py b/inkstitch/stitch_plan/stop.py
deleted file mode 100644
index c5e9f7e4..00000000
--- a/inkstitch/stitch_plan/stop.py
+++ /dev/null
@@ -1,27 +0,0 @@
-def process_stop(color_block):
- """Handle the "stop after" checkbox.
-
- The user wants the machine to pause after this patch. This can
- be useful for applique and similar on multi-needle machines that
- normally would not stop between colors.
-
- On such machines, the user assigns needles to the colors in the
- design before starting stitching. C01, C02, etc are normal
- needles, but C00 is special. For a block of stitches assigned
- to C00, the machine will continue sewing with the last color it
- had and pause after it completes the C00 block.
-
- That means we need to introduce an artificial color change
- shortly before the current stitch so that the user can set that
- to C00. We'll go back 3 stitches and do that:
- """
-
- if len(color_block.stitches) >= 3:
- color_block.stitches[-3].stop = True
-
- # and also add a color change on this stitch, completing the C00
- # block:
-
- color_block.stitches[-1].stop = True
-
- # reference for the above: https://github.com/lexelby/inkstitch/pull/29#issuecomment-359175447
diff --git a/inkstitch/utils/io.py b/inkstitch/utils/io.py
deleted file mode 100644
index e87b9881..00000000
--- a/inkstitch/utils/io.py
+++ /dev/null
@@ -1,17 +0,0 @@
-import os
-import sys
-from cStringIO import StringIO
-
-def save_stderr():
- # GTK likes to spam stderr, which inkscape will show in a dialog.
- null = open(os.devnull, 'w')
- sys.stderr_dup = os.dup(sys.stderr.fileno())
- os.dup2(null.fileno(), 2)
- sys.stderr_backup = sys.stderr
- sys.stderr = StringIO()
-
-
-def restore_stderr():
- os.dup2(sys.stderr_dup, 2)
- sys.stderr_backup.write(sys.stderr.getvalue())
- sys.stderr = sys.stderr_backup
diff --git a/inx/embroider_input_T01.inx b/inx/embroider_input_T01.inx
deleted file mode 100644
index 5090310e..00000000
--- a/inx/embroider_input_T01.inx
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
- <_name>T01 file input</_name>
- <id>org.inkstitch.input.t01</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
- <dependency type="executable" location="extensions">inkex.py</dependency>
- <input>
- <extension>.t01</extension>
- <mimetype>application/x-embroidery-t01</mimetype>
- <_filetypename>Ink/Stitch: Pfaff Embroidery Format (.t01)</_filetypename>
- <_filetypetooltip>convert T01 file to Ink/Stitch manual-stitch paths</_filetypetooltip>
- </input>
- <script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
- </script>
-</inkscape-extension>
diff --git a/inx/embroider.inx b/inx/inkstitch_embroider.inx
index 74217b73..1f5619a3 100644
--- a/inx/embroider.inx
+++ b/inx/inkstitch_embroider.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>Embroider</_name>
<id>jonh.embroider</id>
- <dependency type="executable" location="extensions">embroider.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<param name="collapse_len_mm" type="float" min="0.0" max="10.0" _gui-text="Collapse length (mm)"> _gui-description="Jump stitches smaller than this will be treated as normal stitches.">3.0</param>
<param name="hide_layers" type="boolean" _gui-text="Hide other layers" description="Hide all other top-level layers when the embroidery layer is generated, in order to make stitching discernable.">true</param>
@@ -32,6 +32,7 @@
<_option value="xxx">Singer Embroidery Format(.XXX)</_option>
</param>
<param name="path" type="string" _gui-text="Directory"></param>
+ <param name="extension" type="string" gui-hidden="true">embroider</param>
<effect>
<object-type>all</object-type>
<effects-menu>
@@ -39,6 +40,6 @@
</effects-menu>
</effect>
<script>
- <command reldir="extensions" interpreter="python">embroider.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_100.inx b/inx/inkstitch_input_100.inx
index 9bbad780..def2011d 100644
--- a/inx/embroider_input_100.inx
+++ b/inx/inkstitch_input_100.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>100 file input</_name>
<id>org.inkstitch.input.100</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.100</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Toyota Embroidery Format (.100)</_filetypename>
<_filetypetooltip>convert 100 file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_10O.inx b/inx/inkstitch_input_10O.inx
index 42f1850e..29b14397 100644
--- a/inx/embroider_input_10O.inx
+++ b/inx/inkstitch_input_10O.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>10O file input</_name>
<id>org.inkstitch.input.10o</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.10o</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Toyota Embroidery Format (.10o)</_filetypename>
<_filetypetooltip>convert 10O file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_BRO.inx b/inx/inkstitch_input_BRO.inx
index 0dc576bf..928195a6 100644
--- a/inx/embroider_input_BRO.inx
+++ b/inx/inkstitch_input_BRO.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>BRO file input</_name>
<id>org.inkstitch.input.bro</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.bro</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Bits &amp; Volts Embroidery Format (.bro)</_filetypename>
<_filetypetooltip>convert BRO file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_COL.inx b/inx/inkstitch_input_COL.inx
index 81002dd7..38ebe7bd 100644
--- a/inx/embroider_input_COL.inx
+++ b/inx/inkstitch_input_COL.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>COL file input</_name>
<id>org.inkstitch.input.col</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.col</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Embroidery Thread Color Format (.col)</_filetypename>
<_filetypetooltip>convert COL file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_CSD.inx b/inx/inkstitch_input_CSD.inx
index 8ebb94b9..444270f0 100644
--- a/inx/embroider_input_CSD.inx
+++ b/inx/inkstitch_input_CSD.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>CSD file input</_name>
<id>org.inkstitch.input.csd</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.csd</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Singer Embroidery Format (.csd)</_filetypename>
<_filetypetooltip>convert CSD file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_CSV.inx b/inx/inkstitch_input_CSV.inx
index c3f972d9..0c3e2096 100644
--- a/inx/embroider_input_CSV.inx
+++ b/inx/inkstitch_input_CSV.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>CSV file input</_name>
<id>org.inkstitch.input.csv</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.csv</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Comma Separated Values Format (.csv)</_filetypename>
<_filetypetooltip>convert CSV file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_DAT.inx b/inx/inkstitch_input_DAT.inx
index 1045153a..e82694b8 100644
--- a/inx/embroider_input_DAT.inx
+++ b/inx/inkstitch_input_DAT.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>DAT file input</_name>
<id>org.inkstitch.input.dat</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.dat</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Barudan Embroidery Format (.dat)</_filetypename>
<_filetypetooltip>convert DAT file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_DSB.inx b/inx/inkstitch_input_DSB.inx
index f81c7ca2..8b7c6b02 100644
--- a/inx/embroider_input_DSB.inx
+++ b/inx/inkstitch_input_DSB.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>DSB file input</_name>
<id>org.inkstitch.input.dsb</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.dsb</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Barudan Embroidery Format (.dsb)</_filetypename>
<_filetypetooltip>convert DSB file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_DST.inx b/inx/inkstitch_input_DST.inx
index 414b7470..b3eee601 100644
--- a/inx/embroider_input_DST.inx
+++ b/inx/inkstitch_input_DST.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>DST file input</_name>
<id>org.inkstitch.input.dst</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.dst</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Tajima Embroidery Format (.dst)</_filetypename>
<_filetypetooltip>convert DST file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_DSZ.inx b/inx/inkstitch_input_DSZ.inx
index 9c81a0ad..388aeda0 100644
--- a/inx/embroider_input_DSZ.inx
+++ b/inx/inkstitch_input_DSZ.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>DSZ file input</_name>
<id>org.inkstitch.input.dsz</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.dsz</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: ZSK USA Embroidery Format (.dsz)</_filetypename>
<_filetypetooltip>convert DSZ file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_EDR.inx b/inx/inkstitch_input_EDR.inx
index 9276fd17..92cf7d14 100644
--- a/inx/embroider_input_EDR.inx
+++ b/inx/inkstitch_input_EDR.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>EDR file input</_name>
<id>org.inkstitch.input.edr</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.edr</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Embird Embroidery Format (.edr)</_filetypename>
<_filetypetooltip>convert EDR file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_EMD.inx b/inx/inkstitch_input_EMD.inx
index bb20f977..c05da24f 100644
--- a/inx/embroider_input_EMD.inx
+++ b/inx/inkstitch_input_EMD.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>EMD file input</_name>
<id>org.inkstitch.input.emd</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.emd</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Elna Embroidery Format (.emd)</_filetypename>
<_filetypetooltip>convert EMD file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_EXP.inx b/inx/inkstitch_input_EXP.inx
index 41bae8ce..2c5997d5 100644
--- a/inx/embroider_input_EXP.inx
+++ b/inx/inkstitch_input_EXP.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>EXP file input</_name>
<id>org.inkstitch.input.exp</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.exp</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Melco Embroidery Format (.exp)</_filetypename>
<_filetypetooltip>convert EXP file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_EXY.inx b/inx/inkstitch_input_EXY.inx
index a2e792c4..78de68d8 100644
--- a/inx/embroider_input_EXY.inx
+++ b/inx/inkstitch_input_EXY.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>EXY file input</_name>
<id>org.inkstitch.input.exy</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.exy</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Eltac Embroidery Format (.exy)</_filetypename>
<_filetypetooltip>convert EXY file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_FXY.inx b/inx/inkstitch_input_FXY.inx
index 4d77022e..c2be8c60 100644
--- a/inx/embroider_input_FXY.inx
+++ b/inx/inkstitch_input_FXY.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>FXY file input</_name>
<id>org.inkstitch.input.fxy</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.fxy</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Fortron Embroidery Format (.fxy)</_filetypename>
<_filetypetooltip>convert FXY file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_GT.inx b/inx/inkstitch_input_GT.inx
index 3b482244..20a9fda0 100644
--- a/inx/embroider_input_GT.inx
+++ b/inx/inkstitch_input_GT.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>GT file input</_name>
<id>org.inkstitch.input.gt</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.gt</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Gold Thread Embroidery Format (.gt)</_filetypename>
<_filetypetooltip>convert GT file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_HUS.inx b/inx/inkstitch_input_HUS.inx
index 3b19ee87..bbac96a2 100644
--- a/inx/embroider_input_HUS.inx
+++ b/inx/inkstitch_input_HUS.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>HUS file input</_name>
<id>org.inkstitch.input.hus</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.hus</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Husqvarna Viking Embroidery Format (.hus)</_filetypename>
<_filetypetooltip>convert HUS file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_INB.inx b/inx/inkstitch_input_INB.inx
index 24c6535d..7409a853 100644
--- a/inx/embroider_input_INB.inx
+++ b/inx/inkstitch_input_INB.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>INB file input</_name>
<id>org.inkstitch.input.inb</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.inb</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Inbro Embroidery Format (.inb)</_filetypename>
<_filetypetooltip>convert INB file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_INF.inx b/inx/inkstitch_input_INF.inx
index db7e5d57..9c07ed7f 100644
--- a/inx/embroider_input_INF.inx
+++ b/inx/inkstitch_input_INF.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>INF file input</_name>
<id>org.inkstitch.input.inf</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.inf</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Embroidery Color Format (.inf)</_filetypename>
<_filetypetooltip>convert INF file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_JEF.inx b/inx/inkstitch_input_JEF.inx
index c2030622..364e969f 100644
--- a/inx/embroider_input_JEF.inx
+++ b/inx/inkstitch_input_JEF.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>JEF file input</_name>
<id>org.inkstitch.input.jef</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.jef</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Janome Embroidery Format (.jef)</_filetypename>
<_filetypetooltip>convert JEF file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_KSM.inx b/inx/inkstitch_input_KSM.inx
index 2869ea07..b01eb195 100644
--- a/inx/embroider_input_KSM.inx
+++ b/inx/inkstitch_input_KSM.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>KSM file input</_name>
<id>org.inkstitch.input.ksm</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.ksm</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Pfaff Embroidery Format (.ksm)</_filetypename>
<_filetypetooltip>convert KSM file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_MAX.inx b/inx/inkstitch_input_MAX.inx
index 2dbbe2cc..0f5ed952 100644
--- a/inx/embroider_input_MAX.inx
+++ b/inx/inkstitch_input_MAX.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>MAX file input</_name>
<id>org.inkstitch.input.max</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.max</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Pfaff Embroidery Format (.max)</_filetypename>
<_filetypetooltip>convert MAX file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_MIT.inx b/inx/inkstitch_input_MIT.inx
index 10f5dfd3..a0181182 100644
--- a/inx/embroider_input_MIT.inx
+++ b/inx/inkstitch_input_MIT.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>MIT file input</_name>
<id>org.inkstitch.input.mit</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.mit</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Mitsubishi Embroidery Format (.mit)</_filetypename>
<_filetypetooltip>convert MIT file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_NEW.inx b/inx/inkstitch_input_NEW.inx
index f13a7009..15d877d8 100644
--- a/inx/embroider_input_NEW.inx
+++ b/inx/inkstitch_input_NEW.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>NEW file input</_name>
<id>org.inkstitch.input.new</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.new</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Ameco Embroidery Format (.new)</_filetypename>
<_filetypetooltip>convert NEW file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_OFM.inx b/inx/inkstitch_input_OFM.inx
index 9086900d..3e162355 100644
--- a/inx/embroider_input_OFM.inx
+++ b/inx/inkstitch_input_OFM.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>OFM file input</_name>
<id>org.inkstitch.input.ofm</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.ofm</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Melco Embroidery Format (.ofm)</_filetypename>
<_filetypetooltip>convert OFM file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_PCD.inx b/inx/inkstitch_input_PCD.inx
index fc9c7362..eff3c2f7 100644
--- a/inx/embroider_input_PCD.inx
+++ b/inx/inkstitch_input_PCD.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>PCD file input</_name>
<id>org.inkstitch.input.pcd</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.pcd</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Pfaff Embroidery Format (.pcd)</_filetypename>
<_filetypetooltip>convert PCD file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_PCM.inx b/inx/inkstitch_input_PCM.inx
index fe6c3e22..684b7e20 100644
--- a/inx/embroider_input_PCM.inx
+++ b/inx/inkstitch_input_PCM.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>PCM file input</_name>
<id>org.inkstitch.input.pcm</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.pcm</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Pfaff Embroidery Format (.pcm)</_filetypename>
<_filetypetooltip>convert PCM file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_PCQ.inx b/inx/inkstitch_input_PCQ.inx
index 932a9568..44d2d6df 100644
--- a/inx/embroider_input_PCQ.inx
+++ b/inx/inkstitch_input_PCQ.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>PCQ file input</_name>
<id>org.inkstitch.input.pcq</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.pcq</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Pfaff Embroidery Format (.pcq)</_filetypename>
<_filetypetooltip>convert PCQ file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_PCS.inx b/inx/inkstitch_input_PCS.inx
index d9d058c0..1a030e53 100644
--- a/inx/embroider_input_PCS.inx
+++ b/inx/inkstitch_input_PCS.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>PCS file input</_name>
<id>org.inkstitch.input.pcs</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.pcs</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Pfaff Embroidery Format (.pcs)</_filetypename>
<_filetypetooltip>convert PCS file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_PEC.inx b/inx/inkstitch_input_PEC.inx
index 382dedff..885c0125 100644
--- a/inx/embroider_input_PEC.inx
+++ b/inx/inkstitch_input_PEC.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>PEC file input</_name>
<id>org.inkstitch.input.pec</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.pec</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Brother Embroidery Format (.pec)</_filetypename>
<_filetypetooltip>convert PEC file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_PES.inx b/inx/inkstitch_input_PES.inx
index 451a4da6..6faa06be 100644
--- a/inx/embroider_input_PES.inx
+++ b/inx/inkstitch_input_PES.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>PES file input</_name>
<id>org.inkstitch.input.pes</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.pes</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Brother Embroidery Format (.pes)</_filetypename>
<_filetypetooltip>convert PES file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_PHB.inx b/inx/inkstitch_input_PHB.inx
index ab4daf67..0e14f097 100644
--- a/inx/embroider_input_PHB.inx
+++ b/inx/inkstitch_input_PHB.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>PHB file input</_name>
<id>org.inkstitch.input.phb</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.phb</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Brother Embroidery Format (.phb)</_filetypename>
<_filetypetooltip>convert PHB file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_PHC.inx b/inx/inkstitch_input_PHC.inx
index e36739af..3c2d10f5 100644
--- a/inx/embroider_input_PHC.inx
+++ b/inx/inkstitch_input_PHC.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>PHC file input</_name>
<id>org.inkstitch.input.phc</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.phc</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Brother Embroidery Format (.phc)</_filetypename>
<_filetypetooltip>convert PHC file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_PLT.inx b/inx/inkstitch_input_PLT.inx
index ec2374da..d811ff02 100644
--- a/inx/embroider_input_PLT.inx
+++ b/inx/inkstitch_input_PLT.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>PLT file input</_name>
<id>org.inkstitch.input.plt</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.plt</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: AutoCAD Plot Drawing Format (.plt)</_filetypename>
<_filetypetooltip>convert PLT file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_RGB.inx b/inx/inkstitch_input_RGB.inx
index a73955c1..b64e285b 100644
--- a/inx/embroider_input_RGB.inx
+++ b/inx/inkstitch_input_RGB.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>RGB file input</_name>
<id>org.inkstitch.input.rgb</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.rgb</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: RGB Embroidery Format (.rgb)</_filetypename>
<_filetypetooltip>convert RGB file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_SEW.inx b/inx/inkstitch_input_SEW.inx
index 8cb41136..a7661c97 100644
--- a/inx/embroider_input_SEW.inx
+++ b/inx/inkstitch_input_SEW.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>SEW file input</_name>
<id>org.inkstitch.input.sew</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.sew</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Janome Embroidery Format (.sew)</_filetypename>
<_filetypetooltip>convert SEW file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_SHV.inx b/inx/inkstitch_input_SHV.inx
index 20735cc8..7aad470c 100644
--- a/inx/embroider_input_SHV.inx
+++ b/inx/inkstitch_input_SHV.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>SHV file input</_name>
<id>org.inkstitch.input.shv</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.shv</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Husqvarna Viking Embroidery Format (.shv)</_filetypename>
<_filetypetooltip>convert SHV file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_SST.inx b/inx/inkstitch_input_SST.inx
index 61f7c782..85533659 100644
--- a/inx/embroider_input_SST.inx
+++ b/inx/inkstitch_input_SST.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>SST file input</_name>
<id>org.inkstitch.input.sst</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.sst</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Sunstar Embroidery Format (.sst)</_filetypename>
<_filetypetooltip>convert SST file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_STX.inx b/inx/inkstitch_input_STX.inx
index 5043d6f2..3f1a3065 100644
--- a/inx/embroider_input_STX.inx
+++ b/inx/inkstitch_input_STX.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>STX file input</_name>
<id>org.inkstitch.input.stx</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.stx</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Data Stitch Embroidery Format (.stx)</_filetypename>
<_filetypetooltip>convert STX file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_T09.inx b/inx/inkstitch_input_T09.inx
index 5c64541d..eb6ab6d9 100644
--- a/inx/embroider_input_T09.inx
+++ b/inx/inkstitch_input_T09.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>T09 file input</_name>
<id>org.inkstitch.input.t09</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.t09</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Pfaff Embroidery Format (.t09)</_filetypename>
<_filetypetooltip>convert T09 file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_TAP.inx b/inx/inkstitch_input_TAP.inx
index 496105e2..bf299130 100644
--- a/inx/embroider_input_TAP.inx
+++ b/inx/inkstitch_input_TAP.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>TAP file input</_name>
<id>org.inkstitch.input.tap</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.tap</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Happy Embroidery Format (.tap)</_filetypename>
<_filetypetooltip>convert TAP file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_THR.inx b/inx/inkstitch_input_THR.inx
index d01d6184..e6a6e09e 100644
--- a/inx/embroider_input_THR.inx
+++ b/inx/inkstitch_input_THR.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>THR file input</_name>
<id>org.inkstitch.input.thr</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.thr</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: ThredWorks Embroidery Format (.thr)</_filetypename>
<_filetypetooltip>convert THR file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_U00.inx b/inx/inkstitch_input_U00.inx
index a98ddaa1..b28da66d 100644
--- a/inx/embroider_input_U00.inx
+++ b/inx/inkstitch_input_U00.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>U00 file input</_name>
<id>org.inkstitch.input.u00</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.u00</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Barudan Embroidery Format (.u00)</_filetypename>
<_filetypetooltip>convert U00 file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_VIP.inx b/inx/inkstitch_input_VIP.inx
index f607bfd7..3723285c 100644
--- a/inx/embroider_input_VIP.inx
+++ b/inx/inkstitch_input_VIP.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>VIP file input</_name>
<id>org.inkstitch.input.vip</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.vip</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Pfaff Embroidery Format (.vip)</_filetypename>
<_filetypetooltip>convert VIP file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_VP3.inx b/inx/inkstitch_input_VP3.inx
index cb24f60a..b39f630a 100644
--- a/inx/embroider_input_VP3.inx
+++ b/inx/inkstitch_input_VP3.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>VP3 file input</_name>
<id>org.inkstitch.input.vp3</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.vp3</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Pfaff Embroidery Format (.vp3)</_filetypename>
<_filetypetooltip>convert VP3 file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_XXX.inx b/inx/inkstitch_input_XXX.inx
index 64093628..6e8e501e 100644
--- a/inx/embroider_input_XXX.inx
+++ b/inx/inkstitch_input_XXX.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>XXX file input</_name>
<id>org.inkstitch.input.xxx</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.xxx</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: Singer Embroidery Format (.xxx)</_filetypename>
<_filetypetooltip>convert XXX file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_input_ZSK.inx b/inx/inkstitch_input_ZSK.inx
index badb36da..4178126f 100644
--- a/inx/embroider_input_ZSK.inx
+++ b/inx/inkstitch_input_ZSK.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>ZSK file input</_name>
<id>org.inkstitch.input.zsk</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.zsk</extension>
@@ -10,7 +10,8 @@
<_filetypename>Ink/Stitch: ZSK USA Embroidery Format (.zsk)</_filetypename>
<_filetypetooltip>convert ZSK file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/inkstitch_output_COL.inx b/inx/inkstitch_output_COL.inx
new file mode 100644
index 00000000..8a240a38
--- /dev/null
+++ b/inx/inkstitch_output_COL.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>COL file output</_name>
+ <id>org.inkstitch.output.col</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.col</extension>
+ <mimetype>application/x-embroidery-col</mimetype>
+ <_filetypename>Ink/Stitch: Embroidery Thread Color Format (.col)</_filetypename>
+ <_filetypetooltip>Save design in COL format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">col</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_CSV.inx b/inx/inkstitch_output_CSV.inx
new file mode 100644
index 00000000..d2f340cd
--- /dev/null
+++ b/inx/inkstitch_output_CSV.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>CSV file output</_name>
+ <id>org.inkstitch.output.csv</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.csv</extension>
+ <mimetype>application/x-embroidery-csv</mimetype>
+ <_filetypename>Ink/Stitch: Comma Separated Values Format (.csv)</_filetypename>
+ <_filetypetooltip>Save design in CSV format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">csv</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_DST.inx b/inx/inkstitch_output_DST.inx
new file mode 100644
index 00000000..2230600a
--- /dev/null
+++ b/inx/inkstitch_output_DST.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>DST file output</_name>
+ <id>org.inkstitch.output.dst</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.dst</extension>
+ <mimetype>application/x-embroidery-dst</mimetype>
+ <_filetypename>Ink/Stitch: Tajima Embroidery Format (.dst)</_filetypename>
+ <_filetypetooltip>Save design in DST format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">dst</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_EDR.inx b/inx/inkstitch_output_EDR.inx
new file mode 100644
index 00000000..0756b37a
--- /dev/null
+++ b/inx/inkstitch_output_EDR.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>EDR file output</_name>
+ <id>org.inkstitch.output.edr</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.edr</extension>
+ <mimetype>application/x-embroidery-edr</mimetype>
+ <_filetypename>Ink/Stitch: Embird Embroidery Format (.edr)</_filetypename>
+ <_filetypetooltip>Save design in EDR format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">edr</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_EXP.inx b/inx/inkstitch_output_EXP.inx
new file mode 100644
index 00000000..ce98dbc0
--- /dev/null
+++ b/inx/inkstitch_output_EXP.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>EXP file output</_name>
+ <id>org.inkstitch.output.exp</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.exp</extension>
+ <mimetype>application/x-embroidery-exp</mimetype>
+ <_filetypename>Ink/Stitch: Melco Embroidery Format (.exp)</_filetypename>
+ <_filetypetooltip>Save design in EXP format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">exp</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_HUS.inx b/inx/inkstitch_output_HUS.inx
new file mode 100644
index 00000000..44536f2a
--- /dev/null
+++ b/inx/inkstitch_output_HUS.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>HUS file output</_name>
+ <id>org.inkstitch.output.hus</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.hus</extension>
+ <mimetype>application/x-embroidery-hus</mimetype>
+ <_filetypename>Ink/Stitch: Husqvarna Viking Embroidery Format (.hus)</_filetypename>
+ <_filetypetooltip>Save design in HUS format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">hus</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_INF.inx b/inx/inkstitch_output_INF.inx
new file mode 100644
index 00000000..47c2b63e
--- /dev/null
+++ b/inx/inkstitch_output_INF.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>INF file output</_name>
+ <id>org.inkstitch.output.inf</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.inf</extension>
+ <mimetype>application/x-embroidery-inf</mimetype>
+ <_filetypename>Ink/Stitch: Embroidery Color Format (.inf)</_filetypename>
+ <_filetypetooltip>Save design in INF format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">inf</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_JEF.inx b/inx/inkstitch_output_JEF.inx
new file mode 100644
index 00000000..af92a836
--- /dev/null
+++ b/inx/inkstitch_output_JEF.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>JEF file output</_name>
+ <id>org.inkstitch.output.jef</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.jef</extension>
+ <mimetype>application/x-embroidery-jef</mimetype>
+ <_filetypename>Ink/Stitch: Janome Embroidery Format (.jef)</_filetypename>
+ <_filetypetooltip>Save design in JEF format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">jef</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_KSM.inx b/inx/inkstitch_output_KSM.inx
new file mode 100644
index 00000000..ad5ae4dd
--- /dev/null
+++ b/inx/inkstitch_output_KSM.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>KSM file output</_name>
+ <id>org.inkstitch.output.ksm</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.ksm</extension>
+ <mimetype>application/x-embroidery-ksm</mimetype>
+ <_filetypename>Ink/Stitch: Pfaff Embroidery Format (.ksm)</_filetypename>
+ <_filetypetooltip>Save design in KSM format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">ksm</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_MAX.inx b/inx/inkstitch_output_MAX.inx
new file mode 100644
index 00000000..45a5ba01
--- /dev/null
+++ b/inx/inkstitch_output_MAX.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>MAX file output</_name>
+ <id>org.inkstitch.output.max</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.max</extension>
+ <mimetype>application/x-embroidery-max</mimetype>
+ <_filetypename>Ink/Stitch: Pfaff Embroidery Format (.max)</_filetypename>
+ <_filetypetooltip>Save design in MAX format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">max</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_PCD.inx b/inx/inkstitch_output_PCD.inx
new file mode 100644
index 00000000..b42f79de
--- /dev/null
+++ b/inx/inkstitch_output_PCD.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>PCD file output</_name>
+ <id>org.inkstitch.output.pcd</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.pcd</extension>
+ <mimetype>application/x-embroidery-pcd</mimetype>
+ <_filetypename>Ink/Stitch: Pfaff Embroidery Format (.pcd)</_filetypename>
+ <_filetypetooltip>Save design in PCD format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">pcd</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_PCQ.inx b/inx/inkstitch_output_PCQ.inx
new file mode 100644
index 00000000..1764f670
--- /dev/null
+++ b/inx/inkstitch_output_PCQ.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>PCQ file output</_name>
+ <id>org.inkstitch.output.pcq</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.pcq</extension>
+ <mimetype>application/x-embroidery-pcq</mimetype>
+ <_filetypename>Ink/Stitch: Pfaff Embroidery Format (.pcq)</_filetypename>
+ <_filetypetooltip>Save design in PCQ format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">pcq</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_PCS.inx b/inx/inkstitch_output_PCS.inx
new file mode 100644
index 00000000..ef07c4bd
--- /dev/null
+++ b/inx/inkstitch_output_PCS.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>PCS file output</_name>
+ <id>org.inkstitch.output.pcs</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.pcs</extension>
+ <mimetype>application/x-embroidery-pcs</mimetype>
+ <_filetypename>Ink/Stitch: Pfaff Embroidery Format (.pcs)</_filetypename>
+ <_filetypetooltip>Save design in PCS format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">pcs</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_PEC.inx b/inx/inkstitch_output_PEC.inx
new file mode 100644
index 00000000..15880ce6
--- /dev/null
+++ b/inx/inkstitch_output_PEC.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>PEC file output</_name>
+ <id>org.inkstitch.output.pec</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.pec</extension>
+ <mimetype>application/x-embroidery-pec</mimetype>
+ <_filetypename>Ink/Stitch: Brother Embroidery Format (.pec)</_filetypename>
+ <_filetypetooltip>Save design in PEC format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">pec</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_PES.inx b/inx/inkstitch_output_PES.inx
new file mode 100644
index 00000000..cd7e7369
--- /dev/null
+++ b/inx/inkstitch_output_PES.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>PES file output</_name>
+ <id>org.inkstitch.output.pes</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.pes</extension>
+ <mimetype>application/x-embroidery-pes</mimetype>
+ <_filetypename>Ink/Stitch: Brother Embroidery Format (.pes)</_filetypename>
+ <_filetypetooltip>Save design in PES format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">pes</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_PLT.inx b/inx/inkstitch_output_PLT.inx
new file mode 100644
index 00000000..649ef76b
--- /dev/null
+++ b/inx/inkstitch_output_PLT.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>PLT file output</_name>
+ <id>org.inkstitch.output.plt</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.plt</extension>
+ <mimetype>application/x-embroidery-plt</mimetype>
+ <_filetypename>Ink/Stitch: AutoCAD Plot Drawing Format (.plt)</_filetypename>
+ <_filetypetooltip>Save design in PLT format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">plt</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_RGB.inx b/inx/inkstitch_output_RGB.inx
new file mode 100644
index 00000000..e60d729e
--- /dev/null
+++ b/inx/inkstitch_output_RGB.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>RGB file output</_name>
+ <id>org.inkstitch.output.rgb</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.rgb</extension>
+ <mimetype>application/x-embroidery-rgb</mimetype>
+ <_filetypename>Ink/Stitch: RGB Embroidery Format (.rgb)</_filetypename>
+ <_filetypetooltip>Save design in RGB format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">rgb</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_THR.inx b/inx/inkstitch_output_THR.inx
new file mode 100644
index 00000000..c460bdfc
--- /dev/null
+++ b/inx/inkstitch_output_THR.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>THR file output</_name>
+ <id>org.inkstitch.output.thr</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.thr</extension>
+ <mimetype>application/x-embroidery-thr</mimetype>
+ <_filetypename>Ink/Stitch: ThredWorks Embroidery Format (.thr)</_filetypename>
+ <_filetypetooltip>Save design in THR format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">thr</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_TXT.inx b/inx/inkstitch_output_TXT.inx
new file mode 100644
index 00000000..805deffe
--- /dev/null
+++ b/inx/inkstitch_output_TXT.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>TXT file output</_name>
+ <id>org.inkstitch.output.txt</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.txt</extension>
+ <mimetype>application/x-embroidery-txt</mimetype>
+ <_filetypename>Ink/Stitch: Text File (.txt)</_filetypename>
+ <_filetypetooltip>Save design in TXT format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">txt</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_VP3.inx b/inx/inkstitch_output_VP3.inx
new file mode 100644
index 00000000..dff29de4
--- /dev/null
+++ b/inx/inkstitch_output_VP3.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>VP3 file output</_name>
+ <id>org.inkstitch.output.vp3</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.vp3</extension>
+ <mimetype>application/x-embroidery-vp3</mimetype>
+ <_filetypename>Ink/Stitch: Pfaff Embroidery Format (.vp3)</_filetypename>
+ <_filetypetooltip>Save design in VP3 format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">vp3</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_XXX.inx b/inx/inkstitch_output_XXX.inx
new file mode 100644
index 00000000..ad4135b0
--- /dev/null
+++ b/inx/inkstitch_output_XXX.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>XXX file output</_name>
+ <id>org.inkstitch.output.xxx</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.xxx</extension>
+ <mimetype>application/x-embroidery-xxx</mimetype>
+ <_filetypename>Ink/Stitch: Singer Embroidery Format (.xxx)</_filetypename>
+ <_filetypetooltip>Save design in XXX format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">xxx</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension> \ No newline at end of file
diff --git a/inx/inkstitch_output_ZIP.inx b/inx/inkstitch_output_ZIP.inx
new file mode 100644
index 00000000..b5b2cf1c
--- /dev/null
+++ b/inx/inkstitch_output_ZIP.inx
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>embroidery ZIP file output</_name>
+ <id>org.inkstitch.output.zip</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.zip</extension>
+ <mimetype>application/zip</mimetype>
+ <_filetypename>Ink/Stitch: ZIP export multiple formats (.zip)</_filetypename>
+ <_filetypetooltip>Create a ZIP with multiple embroidery file formats using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+
+ <param name="format-col" type="boolean" _gui-text=".COL: Embroidery Thread Color Format">false</param>
+
+ <param name="format-csv" type="boolean" _gui-text=".CSV: Comma Separated Values Format">false</param>
+
+ <param name="format-dst" type="boolean" _gui-text=".DST: Tajima Embroidery Format">false</param>
+
+ <param name="format-edr" type="boolean" _gui-text=".EDR: Embird Embroidery Format">false</param>
+
+ <param name="format-exp" type="boolean" _gui-text=".EXP: Melco Embroidery Format">false</param>
+
+ <param name="format-hus" type="boolean" _gui-text=".HUS: Husqvarna Viking Embroidery Format">false</param>
+
+ <param name="format-inf" type="boolean" _gui-text=".INF: Embroidery Color Format">false</param>
+
+ <param name="format-jef" type="boolean" _gui-text=".JEF: Janome Embroidery Format">false</param>
+
+ <param name="format-ksm" type="boolean" _gui-text=".KSM: Pfaff Embroidery Format">false</param>
+
+ <param name="format-max" type="boolean" _gui-text=".MAX: Pfaff Embroidery Format">false</param>
+
+ <param name="format-pcd" type="boolean" _gui-text=".PCD: Pfaff Embroidery Format">false</param>
+
+ <param name="format-pcq" type="boolean" _gui-text=".PCQ: Pfaff Embroidery Format">false</param>
+
+ <param name="format-pcs" type="boolean" _gui-text=".PCS: Pfaff Embroidery Format">false</param>
+
+ <param name="format-pec" type="boolean" _gui-text=".PEC: Brother Embroidery Format">false</param>
+
+ <param name="format-pes" type="boolean" _gui-text=".PES: Brother Embroidery Format">false</param>
+
+ <param name="format-plt" type="boolean" _gui-text=".PLT: AutoCAD Plot Drawing Format">false</param>
+
+ <param name="format-rgb" type="boolean" _gui-text=".RGB: RGB Embroidery Format">false</param>
+
+ <param name="format-thr" type="boolean" _gui-text=".THR: ThredWorks Embroidery Format">false</param>
+
+ <param name="format-txt" type="boolean" _gui-text=".TXT: Text File">false</param>
+
+ <param name="format-vp3" type="boolean" _gui-text=".VP3: Pfaff Embroidery Format">false</param>
+
+ <param name="format-xxx" type="boolean" _gui-text=".XXX: Singer Embroidery Format">false</param>
+
+ <param name="extension" type="string" gui-hidden="true">zip</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension>
diff --git a/inx/embroider_palettes.inx b/inx/inkstitch_palettes.inx
index 47ff6cf3..5daa3196 100644
--- a/inx/embroider_palettes.inx
+++ b/inx/inkstitch_palettes.inx
@@ -2,8 +2,9 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>Install thread manufacturer color palettes</_name>
<id>org.inkstitch.palettes</id>
- <dependency type="executable" location="extensions">embroider_palettes.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
+ <param name="extension" type="string" gui-hidden="true">palettes</param>
<effect>
<object-type>all</object-type>
<effects-menu>
@@ -11,6 +12,6 @@
</effects-menu>
</effect>
<script>
- <command reldir="extensions" interpreter="python">embroider_palettes.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_params.inx b/inx/inkstitch_params.inx
index f3987502..7b3b4e63 100644
--- a/inx/embroider_params.inx
+++ b/inx/inkstitch_params.inx
@@ -2,8 +2,9 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>Params</_name>
<id>jonh.embroider.params</id>
- <dependency type="executable" location="extensions">embroider_params.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
+ <param name="extension" type="string" gui-hidden="true">params</param>
<effect>
<object-type>all</object-type>
<effects-menu>
@@ -11,6 +12,6 @@
</effects-menu>
</effect>
<script>
- <command reldir="extensions" interpreter="python">embroider_params.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_print.inx b/inx/inkstitch_print.inx
index cbba82cc..edc96a4c 100644
--- a/inx/embroider_print.inx
+++ b/inx/inkstitch_print.inx
@@ -2,8 +2,9 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>Print</_name>
<id>jonh.embroider.print</id>
- <dependency type="executable" location="extensions">embroider_print.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
+ <param name="extension" type="string" gui-hidden="true">print</param>
<effect>
<object-type>all</object-type>
<effects-menu>
@@ -11,6 +12,6 @@
</effects-menu>
</effect>
<script>
- <command reldir="extensions" interpreter="python">embroider_print.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/inx/embroider_simulate.inx b/inx/inkstitch_simulate.inx
index 9c38ec97..66f892d8 100644
--- a/inx/embroider_simulate.inx
+++ b/inx/inkstitch_simulate.inx
@@ -2,9 +2,9 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>Simulate</_name>
<id>jonh.embroider.simulate</id>
- <dependency type="executable" location="extensions">embroider_simulate.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
- <param name="path" type="string" _gui-text="Directory where embroidery output is stored"></param>
+ <param name="extension" type="string" gui-hidden="true">simulate</param>
<effect>
<object-type>all</object-type>
<effects-menu>
@@ -12,6 +12,6 @@
</effects-menu>
</effect>
<script>
- <command reldir="extensions" interpreter="python">embroider_simulate.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
diff --git a/lib/__init__.py b/lib/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/lib/__init__.py
diff --git a/inkstitch/elements/__init__.py b/lib/elements/__init__.py
index 7e05e19c..7e05e19c 100644
--- a/inkstitch/elements/__init__.py
+++ b/lib/elements/__init__.py
diff --git a/inkstitch/elements/auto_fill.py b/lib/elements/auto_fill.py
index 6eb1f10c..504bae2a 100644
--- a/inkstitch/elements/auto_fill.py
+++ b/lib/elements/auto_fill.py
@@ -1,10 +1,10 @@
import math
-from .. import _
-from .element import param, Patch
-from ..utils import cache
-from .fill import Fill
from shapely import geometry as shgeo
+from ..i18n import _
+from ..utils import cache
from ..stitches import auto_fill
+from .element import param, Patch
+from .fill import Fill
class AutoFill(Fill):
@@ -63,20 +63,43 @@ class AutoFill(Fill):
return self.get_float_param("fill_underlay_max_stitch_length_mm") or self.max_stitch_length
@property
- @param('fill_underlay_inset_mm', _('Inset'), unit='mm', group=_('AutoFill Underlay'), type='float', default=0)
+ @param('fill_underlay_inset_mm',
+ _('Inset'),
+ tooltip='Shrink the shape before doing underlay, to prevent underlay from showing around the outside of the fill.',
+ unit='mm',
+ group=_('AutoFill Underlay'),
+ type='float',
+ default=0)
def fill_underlay_inset(self):
return self.get_float_param('fill_underlay_inset_mm', 0)
@property
- def underlay_shape(self):
- if self.fill_underlay_inset:
- shape = self.shape.buffer(-self.fill_underlay_inset)
+ @param('expand_mm',
+ _('Expand'),
+ tooltip='Expand the shape before fill stitching, to compensate for gaps between shapes.',
+ unit='mm',
+ type='float',
+ default=0)
+ def expand(self):
+ return self.get_float_param('expand_mm', 0)
+
+ def shrink_or_grow_shape(self, amount):
+ if amount:
+ shape = self.shape.buffer(amount)
if not isinstance(shape, shgeo.MultiPolygon):
shape = shgeo.MultiPolygon([shape])
return shape
else:
return self.shape
+ @property
+ def underlay_shape(self):
+ return self.shrink_or_grow_shape(-self.fill_underlay_inset)
+
+ @property
+ def fill_shape(self):
+ return self.shrink_or_grow_shape(self.expand)
+
def to_patches(self, last_patch):
stitches = []
@@ -96,7 +119,7 @@ class AutoFill(Fill):
starting_point))
starting_point = stitches[-1]
- stitches.extend(auto_fill(self.shape,
+ stitches.extend(auto_fill(self.fill_shape,
self.angle,
self.row_spacing,
self.end_row_spacing,
diff --git a/inkstitch/elements/element.py b/lib/elements/element.py
index cfca3782..39437c9f 100644
--- a/inkstitch/elements/element.py
+++ b/lib/elements/element.py
@@ -1,9 +1,10 @@
import sys
from copy import deepcopy
+from shapely import geometry as shgeo
+from ..i18n import _
from ..utils import cache
-from shapely import geometry as shgeo
-from .. import _, PIXELS_PER_MM, get_viewbox_transform, get_stroke_scale, convert_length
+from ..svg import PIXELS_PER_MM, get_viewbox_transform, convert_length, get_doc_size
# inkscape-provided utilities
import simpletransform
@@ -11,6 +12,7 @@ import simplestyle
import cubicsuperpath
from cspsubdiv import cspsubdiv
+
class Patch:
"""A raw collection of stitches with attached instructions."""
@@ -27,6 +29,10 @@ class Patch:
else:
raise TypeError("Patch can only be added to another Patch")
+ def __len__(self):
+ # This method allows `len(patch)` and `if patch:
+ return len(self.stitches)
+
def add_stitch(self, stitch):
self.stitches.append(stitch)
@@ -34,7 +40,6 @@ class Patch:
return Patch(self.color, self.stitches[::-1])
-
class Param(object):
def __init__(self, name, description, unit=None, values=[], type=None, group=None, inverse=False, default=None, tooltip=None, sort_index=0):
self.name = name
@@ -130,10 +135,10 @@ class EmbroideryElement(object):
self.node.set("embroider_%s" % name, str(value))
@cache
- def get_style(self, style_name):
+ def get_style(self, style_name, default=None):
style = simplestyle.parseStyle(self.node.get("style"))
if (style_name not in style):
- return None
+ return default
value = style[style_name]
if value == 'none':
return None
@@ -146,15 +151,23 @@ class EmbroideryElement(object):
@property
@cache
+ def stroke_scale(self):
+ svg = self.node.getroottree().getroot()
+ doc_width, doc_height = get_doc_size(svg)
+ viewbox = svg.get('viewBox', '0 0 %s %s' % (doc_width, doc_height))
+ viewbox = viewbox.strip().replace(',', ' ').split()
+ return doc_width / float(viewbox[2])
+
+ @property
+ @cache
def stroke_width(self):
- width = self.get_style("stroke-width")
+ width = self.get_style("stroke-width", "1")
if width is None:
return 1.0
width = convert_length(width)
-
- return width * get_stroke_scale(self.node.getroottree().getroot())
+ return width * self.stroke_scale
@property
def path(self):
diff --git a/inkstitch/elements/fill.py b/lib/elements/fill.py
index a74a897d..8d1d35f2 100644
--- a/inkstitch/elements/fill.py
+++ b/lib/elements/fill.py
@@ -1,10 +1,13 @@
-from .. import _, PIXELS_PER_MM
-from .element import param, EmbroideryElement, Patch
-from ..utils import cache
from shapely import geometry as shgeo
import math
+
+from .element import param, EmbroideryElement, Patch
+from ..i18n import _
+from ..svg import PIXELS_PER_MM
+from ..utils import cache
from ..stitches import running_stitch, auto_fill, legacy_fill
+
class Fill(EmbroideryElement):
element_name = _("Fill")
@@ -24,7 +27,8 @@ class Fill(EmbroideryElement):
@property
def color(self):
- return self.get_style("fill")
+ # SVG spec says the default fill is black
+ return self.get_style("fill", "#000000")
@property
@param('flip', _('Flip fill (start right-to-left)'), type='boolean', default=False)
diff --git a/inkstitch/elements/polyline.py b/lib/elements/polyline.py
index 6ded9fd1..5c474237 100644
--- a/inkstitch/elements/polyline.py
+++ b/lib/elements/polyline.py
@@ -1,5 +1,6 @@
-from .. import _, Point
from .element import param, EmbroideryElement, Patch
+from ..i18n import _
+from ..utils.geometry import Point
from ..utils import cache
diff --git a/inkstitch/elements/satin_column.py b/lib/elements/satin_column.py
index d22f5145..1d13c5e0 100644
--- a/inkstitch/elements/satin_column.py
+++ b/lib/elements/satin_column.py
@@ -1,9 +1,9 @@
from itertools import chain, izip
+from shapely import geometry as shgeo, ops as shops
-from .. import _, Point
from .element import param, EmbroideryElement, Patch
-from ..utils import cache
-from shapely import geometry as shgeo, ops as shops
+from ..i18n import _
+from ..utils import cache, Point
class SatinColumn(EmbroideryElement):
@@ -97,6 +97,8 @@ class SatinColumn(EmbroideryElement):
def flattened_beziers(self):
if len(self.csp) == 2:
return self.simple_flatten_beziers()
+ elif len(self.csp) < 2:
+ self.fatal(_("satin column: %(id)s: at least two subpaths required (%(num)d found)") % dict(num=len(self.csp), id=self.node.get('id')))
else:
return self.flatten_beziers_with_rungs()
diff --git a/inkstitch/elements/stroke.py b/lib/elements/stroke.py
index 360e3744..5239f978 100644
--- a/inkstitch/elements/stroke.py
+++ b/lib/elements/stroke.py
@@ -1,8 +1,9 @@
import sys
-from .. import _, Point
-from .element import param, EmbroideryElement, Patch
-from ..utils import cache
+from .element import param, EmbroideryElement, Patch
+from ..i18n import _
+from ..utils import cache, Point
+from ..stitches import running_stitch
warned_about_legacy_running_stitch = False
@@ -56,10 +57,7 @@ class Stroke(EmbroideryElement):
def is_running_stitch(self):
# using stroke width <= 0.5 pixels to indicate running stitch is deprecated in favor of dashed lines
- try:
- stroke_width = float(self.get_style("stroke-width"))
- except ValueError:
- stroke_width = 1
+ stroke_width = float(self.get_style("stroke-width", 1))
if self.dashed:
return True
@@ -92,56 +90,50 @@ class Stroke(EmbroideryElement):
else:
return False
- def stroke_points(self, emb_point_list, zigzag_spacing, stroke_width):
- # TODO: use inkstitch.stitches.running_stitch
+ def simple_satin(self, path, zigzag_spacing, stroke_width):
+ "zig-zag along the path at the specified spacing and wdith"
- patch = Patch(color=self.color)
- p0 = emb_point_list[0]
- rho = 0.0
- side = 1
- last_segment_direction = None
+ # `self.zigzag_spacing` is the length for a zig and a zag
+ # together (a V shape). Start with running stitch at half
+ # that length:
+ patch = self.running_stitch(path, zigzag_spacing / 2.0)
- for repeat in xrange(self.repeats):
- if repeat % 2 == 0:
- order = range(1, len(emb_point_list))
- else:
- order = range(-2, -len(emb_point_list) - 1, -1)
+ # Now move the points left and right. Consider each pair
+ # of points in turn, and move perpendicular to them,
+ # alternating left and right.
+
+ offset = stroke_width / 2.0
- for segi in order:
- p1 = emb_point_list[segi]
+ for i in xrange(len(patch) - 1):
+ start = patch.stitches[i]
+ end = patch.stitches[i + 1]
+ segment_direction = (end - start).unit()
+ zigzag_direction = segment_direction.rotate_left()
- # how far we have to go along segment
- seg_len = (p1 - p0).length()
- if (seg_len == 0):
- continue
+ if i % 2 == 1:
+ zigzag_direction *= -1
- # vector pointing along segment
- along = (p1 - p0).unit()
+ patch.stitches[i] += zigzag_direction * offset
- # vector pointing to edge of stroke width
- perp = along.rotate_left() * (stroke_width * 0.5)
+ return patch
+
+ def running_stitch(self, path, stitch_length):
+ repeated_path = []
- if stroke_width == 0.0 and last_segment_direction is not None:
- if abs(1.0 - along * last_segment_direction) > 0.5:
- # if greater than 45 degree angle, stitch the corner
- rho = zigzag_spacing
- patch.add_stitch(p0)
+ # go back and forth along the path as specified by self.repeats
+ for i in xrange(self.repeats):
+ if i % 2 == 1:
+ # reverse every other pass
+ this_path = path[::-1]
+ else:
+ this_path = path[:]
- # iteration variable: how far we are along segment
- while (rho <= seg_len):
- left_pt = p0 + along * rho + perp * side
- patch.add_stitch(left_pt)
- rho += zigzag_spacing
- side = -side
+ repeated_path.extend(this_path)
- p0 = p1
- last_segment_direction = along
- rho -= seg_len
+ stitches = running_stitch(repeated_path, stitch_length)
- if (p0 - patch.stitches[-1]).length() > 0.1:
- patch.add_stitch(p0)
+ return Patch(self.color, stitches)
- return patch
def to_patches(self, last_patch):
patches = []
@@ -151,10 +143,11 @@ class Stroke(EmbroideryElement):
if self.manual_stitch_mode:
patch = Patch(color=self.color, stitches=path, stitch_as_is=True)
elif self.is_running_stitch():
- patch = self.stroke_points(path, self.running_stitch_length, stroke_width=0.0)
+ patch = self.running_stitch(path, self.running_stitch_length)
else:
- patch = self.stroke_points(path, self.zigzag_spacing / 2.0, stroke_width=self.stroke_width)
+ patch = self.simple_satin(path, self.zigzag_spacing, self.stroke_width)
- patches.append(patch)
+ if patch:
+ patches.append(patch)
return patches
diff --git a/lib/extensions/__init__.py b/lib/extensions/__init__.py
new file mode 100644
index 00000000..6d3e00d8
--- /dev/null
+++ b/lib/extensions/__init__.py
@@ -0,0 +1,8 @@
+from embroider import Embroider
+from palettes import Palettes
+from params import Params
+from print_pdf import Print
+from simulate import Simulate
+from input import Input
+from output import Output
+from zip import Zip
diff --git a/inkstitch/extensions.py b/lib/extensions/base.py
index c02cc579..831b6dc6 100644
--- a/inkstitch/extensions.py
+++ b/lib/extensions/base.py
@@ -3,9 +3,10 @@ import re
import json
from copy import deepcopy
from collections import MutableMapping
-from .elements import AutoFill, Fill, Stroke, SatinColumn, Polyline, EmbroideryElement
-from . import SVG_POLYLINE_TAG, SVG_GROUP_TAG, SVG_DEFS_TAG, INKSCAPE_GROUPMODE, EMBROIDERABLE_TAGS, PIXELS_PER_MM
-from .utils import cache
+
+from ..svg.tags import *
+from ..elements import AutoFill, Fill, Stroke, SatinColumn, Polyline, EmbroideryElement
+from ..utils import cache
SVG_METADATA_TAG = inkex.addNS("metadata", "svg")
@@ -62,10 +63,10 @@ class InkStitchMetadata(MutableMapping):
else:
item.getparent().remove(item)
- def _find_item(self, name):
+ def _find_item(self, name, create=True):
tag = inkex.addNS(name, "inkstitch")
item = self.metadata.find(tag)
- if item is None:
+ if item is None and create:
item = inkex.etree.SubElement(self.metadata, tag)
return item
@@ -79,9 +80,9 @@ class InkStitchMetadata(MutableMapping):
return None
def __delitem__(self, name):
- item = self._find_item(name)
+ item = self._find_item(name, create=False)
- if item:
+ if item is not None:
self.metadata.remove(item)
def __iter__(self):
@@ -110,7 +111,7 @@ class InkstitchExtension(inkex.Effect):
inkex.errormsg(_("No embroiderable paths selected."))
else:
inkex.errormsg(_("No embroiderable paths found in document."))
- inkex.errormsg(_("Tip: use Path -> Object to Path to convert non-paths before embroidering."))
+ inkex.errormsg(_("Tip: use Path -> Object to Path to convert non-paths."))
def descendants(self, node):
nodes = []
@@ -157,7 +158,7 @@ class InkstitchExtension(inkex.Effect):
else:
classes = []
- if element.get_style("fill"):
+ if element.get_style("fill", "black"):
if element.get_boolean_param("auto_fill", True):
classes.append(AutoFill)
else:
@@ -199,6 +200,15 @@ class InkstitchExtension(inkex.Effect):
def get_inkstitch_metadata(self):
return InkStitchMetadata(self.document)
+ def get_base_file_name(self):
+ svg_filename = self.document.getroot().get(inkex.addNS('docname', 'sodipodi'), "embroidery.svg")
+
+ if svg_filename.endswith('.svg'):
+ svg_filename = svg_filename[:-4]
+
+ return svg_filename
+
+
def parse(self):
"""Override inkex.Effect to add Ink/Stitch xml namespace"""
diff --git a/embroider.py b/lib/extensions/embroider.py
index 8c5d135b..1e994e27 100644
--- a/embroider.py
+++ b/lib/extensions/embroider.py
@@ -1,26 +1,13 @@
-#!/usr/bin/python
-#
-# Important resources:
-# lxml interface for walking SVG tree:
-# http://codespeak.net/lxml/tutorial.html#elementpath
-# Inkscape library for extracting paths from SVG:
-# http://wiki.inkscape.org/wiki/index.php/Python_modules_for_extensions#simplepath.py
-# Shapely computational geometry library:
-# http://gispython.org/shapely/manual.html#multipolygons
-# Embroidery file format documentation:
-# http://www.achatina.de/sewing/main/TECHNICL.HTM
-
import sys
import traceback
-sys.path.append("/usr/share/inkscape/extensions")
import os
-
import inkex
-import inkstitch
-from inkstitch import _, PIXELS_PER_MM
-from inkstitch.extensions import InkstitchExtension
-from inkstitch.stitch_plan import patches_to_stitch_plan
-from inkstitch.svg import render_stitch_plan
+
+from .base import InkstitchExtension
+from ..i18n import _
+from ..output import write_embroidery_file
+from ..stitch_plan import patches_to_stitch_plan
+from ..svg import render_stitch_plan, PIXELS_PER_MM
class Embroider(InkstitchExtension):
@@ -57,8 +44,7 @@ class Embroider(InkstitchExtension):
if self.options.output_file:
output_path = os.path.join(self.options.path, self.options.output_file)
else:
- svg_filename = self.document.getroot().get(inkex.addNS('docname', 'sodipodi'), "embroidery.svg")
- csv_filename = svg_filename.replace('.svg', '.%s' % self.options.output_format)
+ csv_filename = '%s.%s' % (self.get_base_file_name(), self.options.output_format)
output_path = os.path.join(self.options.path, csv_filename)
def add_suffix(path, suffix):
@@ -96,17 +82,5 @@ class Embroider(InkstitchExtension):
patches = self.elements_to_patches(self.elements)
stitch_plan = patches_to_stitch_plan(patches, self.options.collapse_length_mm * PIXELS_PER_MM)
- inkstitch.write_embroidery_file(self.get_output_path(), stitch_plan, self.document.getroot())
+ write_embroidery_file(self.get_output_path(), stitch_plan, self.document.getroot())
render_stitch_plan(self.document.getroot(), stitch_plan)
-
-
-if __name__ == '__main__':
- sys.setrecursionlimit(100000)
- e = Embroider()
-
- try:
- e.affect()
- except KeyboardInterrupt:
- # for use at the command prompt for debugging
- print >> sys.stderr, "interrupted!"
- print >> sys.stderr, traceback.format_exc()
diff --git a/lib/extensions/input.py b/lib/extensions/input.py
new file mode 100644
index 00000000..21248dd9
--- /dev/null
+++ b/lib/extensions/input.py
@@ -0,0 +1,72 @@
+import os
+from os.path import realpath, dirname, join as path_join
+import sys
+from inkex import etree
+import inkex
+
+# help python find libembroidery when running in a local repo clone
+if getattr(sys, 'frozen', None) is None:
+ sys.path.append(realpath(path_join(dirname(__file__), '..', '..')))
+
+from libembroidery import *
+
+from ..svg import PIXELS_PER_MM, render_stitch_plan
+from ..svg.tags import INKSCAPE_LABEL
+from ..i18n import _
+from ..stitch_plan import StitchPlan
+from ..utils.io import save_stdout
+
+
+class Input(object):
+ def pattern_stitches(self, pattern):
+ stitch_pointer = pattern.stitchList
+ while stitch_pointer:
+ yield stitch_pointer.stitch
+ stitch_pointer = stitch_pointer.next
+
+
+ def affect(self, args):
+ # libembroidery likes to dump a bunch of debugging stuff to stdout
+ save_stdout()
+
+ embroidery_file = args[0]
+ pattern = embPattern_create()
+ embPattern_read(pattern, embroidery_file)
+ embPattern_flipVertical(pattern)
+
+ stitch_plan = StitchPlan()
+ color_block = None
+ current_color = None
+
+ for stitch in self.pattern_stitches(pattern):
+ if stitch.color != current_color:
+ thread = embThreadList_getAt(pattern.threadList, stitch.color)
+ color = thread.color
+ color_block = stitch_plan.new_color_block((color.r, color.g, color.b))
+ current_color = stitch.color
+
+ if not stitch.flags & END:
+ color_block.add_stitch(stitch.xx * PIXELS_PER_MM, stitch.yy * PIXELS_PER_MM,
+ jump=stitch.flags & JUMP,
+ color_change=stitch.flags & STOP,
+ trim=stitch.flags & TRIM)
+
+ extents = stitch_plan.extents
+ svg = etree.Element("svg", nsmap=inkex.NSS, attrib=
+ {
+ "width": str(extents[0] * 2),
+ "height": str(extents[1] * 2),
+ "viewBox": "0 0 %s %s" % (extents[0] * 2, extents[1] * 2),
+ })
+ render_stitch_plan(svg, stitch_plan)
+
+ # rename the Stitch Plan layer so that it doesn't get overwritten by Embroider
+ layer = svg.find(".//*[@id='__inkstitch_stitch_plan__']")
+ layer.set(INKSCAPE_LABEL, os.path.basename(embroidery_file))
+ layer.attrib.pop('id')
+
+ # Shift the design so that its origin is at the center of the canvas
+ # Note: this is NOT the same as centering the design in the canvas!
+ layer.set('transform', 'translate(%s,%s)' % (extents[0], extents[1]))
+
+ print >> sys.real_stdout, etree.tostring(svg)
diff --git a/lib/extensions/output.py b/lib/extensions/output.py
new file mode 100644
index 00000000..f4b153e6
--- /dev/null
+++ b/lib/extensions/output.py
@@ -0,0 +1,51 @@
+import sys
+import traceback
+import os
+import inkex
+import tempfile
+
+from .base import InkstitchExtension
+from ..i18n import _
+from ..output import write_embroidery_file
+from ..stitch_plan import patches_to_stitch_plan
+from ..svg import render_stitch_plan, PIXELS_PER_MM
+from ..utils.io import save_stdout
+
+class Output(InkstitchExtension):
+ def __init__(self, *args, **kwargs):
+ InkstitchExtension.__init__(self)
+ self.OptionParser.add_option("-c", "--collapse_len_mm",
+ action="store", type="float",
+ dest="collapse_length_mm", default=3.0,
+ help="max collapse length (mm)")
+ self.OptionParser.add_option("-f", "--format",
+ dest="file_extension",
+ help="file extension to output (example: DST)")
+
+ def effect(self):
+ if not self.get_elements():
+ return
+
+ patches = self.elements_to_patches(self.elements)
+ stitch_plan = patches_to_stitch_plan(patches, self.options.collapse_length_mm * PIXELS_PER_MM)
+
+ # libembroidery wants to write to an actual file rather than stdout
+ temp_file = tempfile.NamedTemporaryFile(suffix=".%s" % self.options.file_extension, delete=False)
+
+ # in windows, failure to close here will keep the file locked
+ temp_file.close()
+
+ # libembroidery likes to debug log things to stdout. No way to disable it.
+ save_stdout()
+ write_embroidery_file(temp_file.name, stitch_plan, self.document.getroot())
+
+ # inkscape will read the file contents from stdout and copy
+ # to the destination file that the user chose
+ with open(temp_file.name) as output_file:
+ sys.real_stdout.write(output_file.read())
+
+ # clean up the temp file
+ os.remove(temp_file.name)
+
+ # don't let inkex output the SVG!
+ sys.exit(0)
diff --git a/embroider_palettes.py b/lib/extensions/palettes.py
index a3b59834..f7a6c7a5 100644
--- a/embroider_palettes.py
+++ b/lib/extensions/palettes.py
@@ -1,6 +1,3 @@
-#!/usr/bin/python
-#
-
import sys
import traceback
import os
@@ -13,7 +10,8 @@ import time
import logging
import wx
import inkex
-from inkstitch.utils import guess_inkscape_config_path
+
+from ..utils import guess_inkscape_config_path
class InstallPalettesFrame(wx.Frame):
@@ -106,16 +104,9 @@ class InstallPalettesFrame(wx.Frame):
for palette_file in files:
shutil.copy(palette_file, dest)
-class InstallPalettes(inkex.Effect):
+class Palettes(inkex.Effect):
def effect(self):
app = wx.App()
installer_frame = InstallPalettesFrame(None, title=_("Ink/Stitch Thread Palette Installer"), size=(450, 200))
installer_frame.Show()
app.MainLoop()
-
-
-if __name__ == '__main__':
- #save_stderr()
- effect = InstallPalettes()
- effect.affect()
- #restore_stderr()
diff --git a/embroider_params.py b/lib/extensions/params.py
index 607dbb2a..9d8de41b 100644
--- a/embroider_params.py
+++ b/lib/extensions/params.py
@@ -1,4 +1,3 @@
-#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os
@@ -11,15 +10,15 @@ from copy import copy
import wx
from wx.lib.scrolledpanel import ScrolledPanel
from collections import defaultdict
-import inkstitch
from functools import partial
from itertools import groupby
-from inkstitch import _
-from inkstitch.extensions import InkstitchExtension
-from inkstitch.stitch_plan import patches_to_stitch_plan
-from inkstitch.elements import EmbroideryElement, Fill, AutoFill, Stroke, SatinColumn
-from inkstitch.utils import save_stderr, restore_stderr
-from embroider_simulate import EmbroiderySimulator
+
+from .base import InkstitchExtension
+from ..i18n import _
+from ..stitch_plan import patches_to_stitch_plan
+from ..elements import EmbroideryElement, Fill, AutoFill, Stroke, SatinColumn
+from ..utils import save_stderr, restore_stderr
+from ..simulator import EmbroiderySimulator
def presets_path():
@@ -355,6 +354,9 @@ class SettingsFrame(wx.Frame):
self.simulate_thread = None
self.simulate_refresh_needed = Event()
+ # used when closing to avoid having the window reopen at the last second
+ self.disable_simulate_window = False
+
wx.CallLater(1000, self.update_simulator)
self.presets_box = wx.StaticBox(self, wx.ID_ANY, label=_("Presets"))
@@ -393,6 +395,9 @@ class SettingsFrame(wx.Frame):
self.simulate_window.stop()
self.simulate_window.clear()
+ if self.disable_simulate_window:
+ return
+
if not self.simulate_thread or not self.simulate_thread.is_alive():
self.simulate_thread = Thread(target=self.simulate_worker)
self.simulate_thread.daemon = True
@@ -587,6 +592,7 @@ class SettingsFrame(wx.Frame):
self.close()
def use_last(self, event):
+ self.disable_simulate_window = True
self._load_preset("__LAST__")
self.apply(event)
@@ -633,7 +639,10 @@ class SettingsFrame(wx.Frame):
self.Layout()
# end wxGlade
-class EmbroiderParams(InkstitchExtension):
+class NoValidObjects(Exception):
+ pass
+
+class Params(InkstitchExtension):
def __init__(self, *args, **kwargs):
self.cancelled = False
InkstitchExtension.__init__(self, *args, **kwargs)
@@ -690,6 +699,11 @@ class EmbroiderParams(InkstitchExtension):
def create_tabs(self, parent):
tabs = []
+ nodes_by_class = self.get_nodes_by_class()
+
+ if not nodes_by_class:
+ raise NoValidObjects()
+
for cls, nodes in self.get_nodes_by_class():
params = cls.get_params()
@@ -746,27 +760,15 @@ class EmbroiderParams(InkstitchExtension):
self.cancelled = True
def effect(self):
- app = wx.App()
- frame = SettingsFrame(tabs_factory=self.create_tabs, on_cancel=self.cancel)
- frame.Show()
- app.MainLoop()
-
- if self.cancelled:
- # This prevents the superclass from outputting the SVG, because we
- # may have modified the DOM.
- sys.exit(0)
-
-
-# end of class MyFrame
-if __name__ == "__main__":
- save_stderr()
-
- try:
- e = EmbroiderParams()
- e.affect()
- except SystemExit:
- raise
- except:
- traceback.print_exc()
-
- restore_stderr()
+ try:
+ app = wx.App()
+ frame = SettingsFrame(tabs_factory=self.create_tabs, on_cancel=self.cancel)
+ frame.Show()
+ app.MainLoop()
+
+ if self.cancelled:
+ # This prevents the superclass from outputting the SVG, because we
+ # may have modified the DOM.
+ sys.exit(0)
+ except NoValidObjects:
+ self.no_elements_error()
diff --git a/embroider_print.py b/lib/extensions/print_pdf.py
index 5895bc51..6e2eff58 100644
--- a/embroider_print.py
+++ b/lib/extensions/print_pdf.py
@@ -1,6 +1,3 @@
-#!/usr/bin/python
-#
-
import sys
import traceback
import os
@@ -13,24 +10,21 @@ from copy import deepcopy
import wx
import appdirs
import json
-
import inkex
-import inkstitch
-from inkstitch import _, PIXELS_PER_MM, SVG_GROUP_TAG
-from inkstitch.extensions import InkstitchExtension
-from inkstitch.stitch_plan import patches_to_stitch_plan
-from inkstitch.svg import render_stitch_plan
-from inkstitch.utils import save_stderr, restore_stderr
-from inkstitch.threads import ThreadCatalog
-
from jinja2 import Environment, FileSystemLoader, select_autoescape
from datetime import date
import base64
-
from flask import Flask, request, Response, send_from_directory, jsonify
import webbrowser
import requests
+from .base import InkstitchExtension
+from ..i18n import _, translation as inkstitch_translation
+from ..svg import PIXELS_PER_MM, render_stitch_plan
+from ..svg.tags import SVG_GROUP_TAG, INKSCAPE_GROUPMODE
+from ..stitch_plan import patches_to_stitch_plan
+from ..threads import ThreadCatalog
+
def datetimeformat(value, format='%Y/%m/%d'):
return value.strftime(format)
@@ -100,6 +94,8 @@ class PrintPreviewServer(Thread):
self.html = kwargs.pop('html')
self.metadata = kwargs.pop('metadata')
self.stitch_plan = kwargs.pop('stitch_plan')
+ self.realistic_overview_svg = kwargs.pop('realistic_overview_svg')
+ self.realistic_color_block_svgs = kwargs.pop('realistic_color_block_svgs')
Thread.__init__(self, *args, **kwargs)
self.daemon = True
self.last_request_time = None
@@ -111,7 +107,7 @@ class PrintPreviewServer(Thread):
if getattr(sys, 'frozen', False):
self.resources_path = os.path.join(sys._MEIPASS, 'print', 'resources')
else:
- self.resources_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'print', 'resources')
+ self.resources_path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', '..', 'print', 'resources'))
def __setup_app(self):
self.__set_resources_path()
@@ -208,6 +204,14 @@ class PrintPreviewServer(Thread):
return jsonify(threads)
+ @self.app.route('/realistic/block<int:index>', methods=['GET'])
+ def get_realistic_block(index):
+ return Response(self.realistic_color_block_svgs[index], mimetype='image/svg+xml')
+
+ @self.app.route('/realistic/overview', methods=['GET'])
+ def get_realistic_overview():
+ return Response(self.realistic_overview_svg, mimetype='image/svg+xml')
+
def stop(self):
# for whatever reason, shutting down only seems possible in
# the context of a flask request, so we'll just make one
@@ -288,7 +292,7 @@ class Print(InkstitchExtension):
if getattr( sys, 'frozen', False ) :
template_dir = os.path.join(sys._MEIPASS, "print", "templates")
else:
- template_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), "print", "templates")
+ template_dir = os.path.realpath(os.path.join(os.path.dirname(__file__), "..", "..", "print", "templates"))
env = Environment(
loader = FileSystemLoader(template_dir),
@@ -297,42 +301,28 @@ class Print(InkstitchExtension):
)
env.filters['datetimeformat'] = datetimeformat
- env.install_gettext_translations(inkstitch.translation)
+ env.install_gettext_translations(inkstitch_translation)
return env
- def strip_namespaces(self):
+ def strip_namespaces(self, svg):
# namespace prefixes seem to trip up HTML, so get rid of them
- for element in self.document.iter():
+ for element in svg.iter():
if element.tag[0]=='{':
element.tag = element.tag[element.tag.index('}',1) + 1:]
- def effect(self):
- # It doesn't really make sense to print just a couple of selected
- # objects. It's almost certain they meant to print the whole design.
- # If they really wanted to print just a few objects, they could set
- # the rest invisible temporarily.
- self.selected = {}
-
- if not self.get_elements():
- return
+ def render_svgs(self, stitch_plan, realistic=False):
+ svg = deepcopy(self.document).getroot()
+ render_stitch_plan(svg, stitch_plan, realistic)
- self.hide_all_layers()
-
- patches = self.elements_to_patches(self.elements)
- stitch_plan = patches_to_stitch_plan(patches)
- palette = ThreadCatalog().match_and_apply_palette(stitch_plan, self.get_inkstitch_metadata()['thread-palette'])
- render_stitch_plan(self.document.getroot(), stitch_plan)
-
- self.strip_namespaces()
+ self.strip_namespaces(svg)
# Now the stitch plan layer will contain a set of groups, each
# corresponding to a color block. We'll create a set of SVG files
# corresponding to each individual color block and a final one
# for all color blocks together.
- svg = self.document.getroot()
- layers = svg.findall("./g[@{http://www.inkscape.org/namespaces/inkscape}groupmode='layer']")
+ layers = svg.findall("./g[@%s='layer']" % INKSCAPE_GROUPMODE)
stitch_plan_layer = svg.find(".//*[@id='__inkstitch_stitch_plan__']")
# First, delete all of the other layers. We don't need them and they'll
@@ -341,9 +331,9 @@ class Print(InkstitchExtension):
if layer is not stitch_plan_layer:
svg.remove(layer)
- overview_svg = inkex.etree.tostring(self.document)
-
+ overview_svg = inkex.etree.tostring(svg)
color_block_groups = stitch_plan_layer.getchildren()
+ color_block_svgs = []
for i, group in enumerate(color_block_groups):
# clear the stitch plan layer
@@ -353,12 +343,15 @@ class Print(InkstitchExtension):
stitch_plan_layer.append(group)
# save an SVG preview
- stitch_plan.color_blocks[i].svg_preview = inkex.etree.tostring(self.document)
+ color_block_svgs.append(inkex.etree.tostring(svg))
+
+ return overview_svg, color_block_svgs
+ def render_html(self, stitch_plan, overview_svg, selected_palette):
env = self.build_environment()
template = env.get_template('index.html')
- html = template.render(
+ return template.render(
view = {'client_overview': False, 'client_detailedview': False, 'operator_overview': True, 'operator_detailedview': True},
logo = {'src' : '', 'title' : 'LOGO'},
date = date.today(),
@@ -377,14 +370,38 @@ class Print(InkstitchExtension):
svg_overview = overview_svg,
color_blocks = stitch_plan.color_blocks,
palettes = ThreadCatalog().palette_names(),
- selected_palette = palette,
+ selected_palette = selected_palette,
)
- # We've totally mucked with the SVG. Restore it so that we can save
- # metadata into it.
- self.document = deepcopy(self.original_document)
+ def effect(self):
+ # It doesn't really make sense to print just a couple of selected
+ # objects. It's almost certain they meant to print the whole design.
+ # If they really wanted to print just a few objects, they could set
+ # the rest invisible temporarily.
+ self.selected = {}
- print_server = PrintPreviewServer(html=html, metadata=self.get_inkstitch_metadata(), stitch_plan=stitch_plan)
+ if not self.get_elements():
+ return
+
+ patches = self.elements_to_patches(self.elements)
+ stitch_plan = patches_to_stitch_plan(patches)
+ palette = ThreadCatalog().match_and_apply_palette(stitch_plan, self.get_inkstitch_metadata()['thread-palette'])
+
+ overview_svg, color_block_svgs = self.render_svgs(stitch_plan, realistic=False)
+ realistic_overview_svg, realistic_color_block_svgs = self.render_svgs(stitch_plan, realistic=True)
+
+ for i, svg in enumerate(color_block_svgs):
+ stitch_plan.color_blocks[i].svg_preview = svg
+
+ html = self.render_html(stitch_plan, overview_svg, palette)
+
+ print_server = PrintPreviewServer(
+ html=html,
+ metadata=self.get_inkstitch_metadata(),
+ stitch_plan=stitch_plan,
+ realistic_overview_svg=realistic_overview_svg,
+ realistic_color_block_svgs=realistic_color_block_svgs
+ )
print_server.start()
time.sleep(1)
@@ -394,21 +411,3 @@ class Print(InkstitchExtension):
info_frame = PrintInfoFrame(None, title=_("Ink/Stitch Print"), size=(450, 350), print_server=print_server)
info_frame.Show()
app.MainLoop()
-
-
-if __name__ == '__main__':
- exception = None
-
- save_stderr()
- try:
- effect = Print()
- effect.affect()
- except:
- exception = traceback.format_exc()
- restore_stderr()
-
- if exception:
- print >> sys.stderr, exception
- sys.exit(1)
- else:
- sys.exit(0)
diff --git a/lib/extensions/simulate.py b/lib/extensions/simulate.py
new file mode 100644
index 00000000..0c372d4d
--- /dev/null
+++ b/lib/extensions/simulate.py
@@ -0,0 +1,28 @@
+import wx
+
+from .base import InkstitchExtension
+from ..i18n import _
+from ..simulator import EmbroiderySimulator
+from ..stitch_plan import patches_to_stitch_plan
+
+
+class Simulate(InkstitchExtension):
+ def __init__(self):
+ InkstitchExtension.__init__(self)
+ self.OptionParser.add_option("-P", "--path",
+ action="store", type="string",
+ dest="path", default=".",
+ help="Directory in which to store output file")
+
+ def effect(self):
+ if not self.get_elements():
+ return
+
+ patches = self.elements_to_patches(self.elements)
+ stitch_plan = patches_to_stitch_plan(patches)
+ app = wx.App()
+ frame = EmbroiderySimulator(None, -1, _("Embroidery Simulation"), wx.DefaultPosition, size=(1000, 1000), stitch_plan=stitch_plan)
+ app.SetTopWindow(frame)
+ frame.Show()
+ wx.CallAfter(frame.go)
+ app.MainLoop()
diff --git a/lib/extensions/zip.py b/lib/extensions/zip.py
new file mode 100644
index 00000000..ca12efdd
--- /dev/null
+++ b/lib/extensions/zip.py
@@ -0,0 +1,88 @@
+import sys
+import traceback
+import os
+import inkex
+import tempfile
+from zipfile import ZipFile
+from libembroidery import *
+
+from .base import InkstitchExtension
+from ..i18n import _
+from ..output import write_embroidery_file
+from ..stitch_plan import patches_to_stitch_plan
+from ..svg import render_stitch_plan, PIXELS_PER_MM
+from ..utils.io import save_stdout
+
+
+class Zip(InkstitchExtension):
+ def __init__(self, *args, **kwargs):
+ InkstitchExtension.__init__(self)
+ self.OptionParser.add_option("-c", "--collapse_len_mm",
+ action="store", type="float",
+ dest="collapse_length_mm", default=3.0,
+ help="max collapse length (mm)")
+
+ # it's kind of obnoxious that I have to do this...
+ self.formats = []
+ formatList = embFormatList_create()
+ curFormat = formatList
+ while(curFormat):
+ # extension includes the dot, so we'll remove it
+ extension = embFormat_extension(curFormat)[1:]
+ description = embFormat_description(curFormat)
+ writer_state = embFormat_writerState(curFormat)
+
+ if writer_state.strip() and embFormat_type(curFormat) != EMBFORMAT_OBJECTONLY:
+ self.OptionParser.add_option('--format-%s' % extension, type="inkbool", dest=extension)
+ self.formats.append(extension)
+ curFormat = curFormat.next
+
+ def effect(self):
+ if not self.get_elements():
+ return
+
+ patches = self.elements_to_patches(self.elements)
+ stitch_plan = patches_to_stitch_plan(patches, self.options.collapse_length_mm * PIXELS_PER_MM)
+
+ base_file_name = self.get_base_file_name()
+ path = tempfile.mkdtemp()
+
+ files = []
+
+ # libembroidery likes to debug log things to stdout. No way to disable it.
+ save_stdout()
+ for format in self.formats:
+ if getattr(self.options, format):
+ output_file = os.path.join(path, "%s.%s" % (base_file_name, format))
+ write_embroidery_file(output_file, stitch_plan, self.document.getroot())
+ files.append(output_file)
+
+ # I'd love to do restore_stderr() here, but if I do, libembroidery's
+ # stuff still prints out and corrupts the zip! That's because it uses
+ # C's buffered stdout, so it hasn't actually written anything to the
+ # real standard output yet.
+
+ if not files:
+ self.errormsg(_("No embroidery file formats selected."))
+
+ temp_file = tempfile.NamedTemporaryFile(suffix=".zip", delete=False)
+
+ # in windows, failure to close here will keep the file locked
+ temp_file.close()
+
+ with ZipFile(temp_file.name, "w") as zip_file:
+ for file in files:
+ zip_file.write(file, os.path.basename(file))
+
+ # inkscape will read the file contents from stdout and copy
+ # to the destination file that the user chose
+ with open(temp_file.name) as output_file:
+ sys.real_stdout.write(output_file.read())
+
+ os.remove(temp_file.name)
+ for file in files:
+ os.remove(file)
+ os.rmdir(path)
+
+ # don't let inkex output the SVG!
+ sys.exit(0)
diff --git a/lib/i18n.py b/lib/i18n.py
new file mode 100644
index 00000000..d20f5d2f
--- /dev/null
+++ b/lib/i18n.py
@@ -0,0 +1,21 @@
+import sys
+import os
+import gettext
+
+_ = translation = None
+
+def localize():
+ if getattr(sys, 'frozen', False):
+ # we are in a pyinstaller installation
+ locale_dir = sys._MEIPASS
+ else:
+ locale_dir = os.path.dirname(__file__)
+
+ locale_dir = os.path.join(locale_dir, 'locales')
+
+ global translation, _
+
+ translation = gettext.translation("inkstitch", locale_dir, fallback=True)
+ _ = translation.gettext
+
+localize()
diff --git a/lib/output.py b/lib/output.py
new file mode 100644
index 00000000..84128a25
--- /dev/null
+++ b/lib/output.py
@@ -0,0 +1,128 @@
+import libembroidery
+import inkex
+import simpletransform
+import shapely.geometry as shgeo
+
+from .utils import Point
+from .svg import PIXELS_PER_MM, get_doc_size, get_viewbox_transform
+
+
+def make_thread(color):
+ thread = libembroidery.EmbThread()
+ thread.color = libembroidery.embColor_make(*color.rgb)
+
+ thread.description = color.name
+ thread.catalogNumber = ""
+
+ return thread
+
+def add_thread(pattern, thread):
+ """Add a thread to a pattern and return the thread's index"""
+
+ libembroidery.embPattern_addThread(pattern, thread)
+
+ return libembroidery.embThreadList_count(pattern.threadList) - 1
+
+def get_flags(stitch):
+ flags = 0
+
+ if stitch.jump:
+ flags |= libembroidery.JUMP
+
+ if stitch.trim:
+ flags |= libembroidery.TRIM
+
+ if stitch.color_change:
+ flags |= libembroidery.STOP
+
+ return flags
+
+
+def _string_to_floats(string):
+ floats = string.split(',')
+ return [float(num) for num in floats]
+
+
+def get_origin(svg):
+ # The user can specify the embroidery origin by defining two guides
+ # named "embroidery origin" that intersect.
+
+ namedview = svg.find(inkex.addNS('namedview', 'sodipodi'))
+ all_guides = namedview.findall(inkex.addNS('guide', 'sodipodi'))
+ label_attribute = inkex.addNS('label', 'inkscape')
+ guides = [guide for guide in all_guides
+ if guide.get(label_attribute, "").startswith("embroidery origin")]
+
+ # document size used below
+ doc_size = list(get_doc_size(svg))
+
+ # convert the size from viewbox-relative to real-world pixels
+ viewbox_transform = get_viewbox_transform(svg)
+ simpletransform.applyTransformToPoint(simpletransform.invertTransform(viewbox_transform), doc_size)
+
+ default = [doc_size[0] / 2.0, doc_size[1] / 2.0]
+ simpletransform.applyTransformToPoint(viewbox_transform, default)
+ default = Point(*default)
+
+ if len(guides) < 2:
+ return default
+
+ # Find out where the guides intersect. Only pay attention to the first two.
+ guides = guides[:2]
+
+ lines = []
+ for guide in guides:
+ # inkscape's Y axis is reversed from SVG's, and the guide is in inkscape coordinates
+ position = Point(*_string_to_floats(guide.get('position')))
+ position.y = doc_size[1] - position.y
+
+
+ # This one baffles me. I think inkscape might have gotten the order of
+ # their vector wrong?
+ parts = _string_to_floats(guide.get('orientation'))
+ direction = Point(parts[1], parts[0])
+
+ # We have a theoretically infinite line defined by a point on the line
+ # and a vector direction. Shapely can only deal in concrete line
+ # segments, so we'll pick points really far in either direction on the
+ # line and call it good enough.
+ lines.append(shgeo.LineString((position + 100000 * direction, position - 100000 * direction)))
+
+ intersection = lines[0].intersection(lines[1])
+
+ if isinstance(intersection, shgeo.Point):
+ origin = [intersection.x, intersection.y]
+ simpletransform.applyTransformToPoint(viewbox_transform, origin)
+ return Point(*origin)
+ else:
+ # Either the two guides are the same line, or they're parallel.
+ return default
+
+
+def write_embroidery_file(file_path, stitch_plan, svg):
+ origin = get_origin(svg)
+
+ pattern = libembroidery.embPattern_create()
+
+ for color_block in stitch_plan:
+ add_thread(pattern, make_thread(color_block.color))
+
+ for stitch in color_block:
+ if stitch.stop:
+ # This is the start of the extra color block added by the
+ # "STOP after" handler (see stitch_plan/stop.py). Assign it
+ # the same color.
+ add_thread(pattern, make_thread(color_block.color))
+
+ flags = get_flags(stitch)
+ libembroidery.embPattern_addStitchAbs(pattern, stitch.x - origin.x, stitch.y - origin.y, flags, 1)
+
+ libembroidery.embPattern_addStitchAbs(pattern, stitch.x - origin.x, stitch.y - origin.y, libembroidery.END, 1)
+
+ # convert from pixels to millimeters
+ libembroidery.embPattern_scale(pattern, 1/PIXELS_PER_MM)
+
+ # SVG and embroidery disagree on the direction of the Y axis
+ libembroidery.embPattern_flipVertical(pattern)
+
+ libembroidery.embPattern_write(pattern, file_path)
diff --git a/embroider_simulate.py b/lib/simulator.py
index c7c3f6bd..c7e74353 100644
--- a/embroider_simulate.py
+++ b/lib/simulator.py
@@ -1,17 +1,10 @@
import sys
-import os
import numpy
import wx
-import inkex
-import simplestyle
import colorsys
from itertools import izip
-import inkstitch
-from inkstitch.extensions import InkstitchExtension
-from inkstitch import PIXELS_PER_MM
-from inkstitch.stitch_plan import patches_to_stitch_plan
-from inkstitch.svg import color_block_to_point_lists
+from .svg import PIXELS_PER_MM, color_block_to_point_lists
class EmbroiderySimulator(wx.Frame):
@@ -256,30 +249,3 @@ class EmbroiderySimulator(wx.Frame):
self.last_pos = (x2, y2)
except IndexError:
self.timer.Stop()
-
-class SimulateEffect(InkstitchExtension):
- def __init__(self):
- InkstitchExtension.__init__(self)
- self.OptionParser.add_option("-P", "--path",
- action="store", type="string",
- dest="path", default=".",
- help="Directory in which to store output file")
-
- def effect(self):
- if not self.get_elements():
- return
-
- patches = self.elements_to_patches(self.elements)
- stitch_plan = patches_to_stitch_plan(patches)
- app = wx.App()
- frame = EmbroiderySimulator(None, -1, _("Embroidery Simulation"), wx.DefaultPosition, size=(1000, 1000), stitch_plan=stitch_plan)
- app.SetTopWindow(frame)
- frame.Show()
- wx.CallAfter(frame.go)
- app.MainLoop()
-
-
-if __name__ == "__main__":
- effect = SimulateEffect()
- effect.affect()
- sys.exit(0)
diff --git a/inkstitch/stitch_plan/__init__.py b/lib/stitch_plan/__init__.py
index 6c1f418a..791a5f20 100644
--- a/inkstitch/stitch_plan/__init__.py
+++ b/lib/stitch_plan/__init__.py
@@ -1 +1,2 @@
from stitch_plan import patches_to_stitch_plan, StitchPlan, ColorBlock
+from .stitch import Stitch
diff --git a/lib/stitch_plan/stitch.py b/lib/stitch_plan/stitch.py
new file mode 100644
index 00000000..12642a60
--- /dev/null
+++ b/lib/stitch_plan/stitch.py
@@ -0,0 +1,19 @@
+from ..utils.geometry import Point
+
+
+class Stitch(Point):
+ def __init__(self, x, y, color=None, jump=False, stop=False, trim=False, color_change=False, no_ties=False):
+ self.x = x
+ self.y = y
+ self.color = color
+ self.jump = jump
+ self.trim = trim
+ self.stop = stop
+ self.color_change = color_change
+ self.no_ties = no_ties
+
+ def __repr__(self):
+ return "Stitch(%s, %s, %s, %s, %s, %s, %s)" % (self.x, self.y, self.color, "JUMP" if self.jump else " ", "TRIM" if self.trim else " ", "STOP" if self.stop else " ", "NO TIES" if self.no_ties else " ")
+
+ def copy(self):
+ return Stitch(self.x, self.y, self.color, self.jump, self.stop, self.trim, self.color_change, self.no_ties)
diff --git a/inkstitch/stitch_plan/stitch_plan.py b/lib/stitch_plan/stitch_plan.py
index fab87876..93bcd195 100644
--- a/inkstitch/stitch_plan/stitch_plan.py
+++ b/lib/stitch_plan/stitch_plan.py
@@ -1,8 +1,9 @@
-from .. import Stitch, PIXELS_PER_MM
-from ..utils.geometry import Point
+from .stitch import Stitch
from .stop import process_stop
from .trim import process_trim
from .ties import add_ties
+from ..svg import PIXELS_PER_MM
+from ..utils.geometry import Point
from ..threads import ThreadColor
@@ -22,15 +23,15 @@ def patches_to_stitch_plan(patches, collapse_len=3.0 * PIXELS_PER_MM):
if not patch.stitches:
continue
- if need_trim:
- process_trim(color_block, patch.stitches[0])
- need_trim = False
-
if not color_block.has_color():
# set the color for the first color block
color_block.color = patch.color
if color_block.color == patch.color:
+ if need_trim:
+ process_trim(color_block, patch.stitches[0])
+ need_trim = False
+
# add a jump stitch between patches if the distance is more
# than the collapse length
if color_block.last_stitch:
@@ -38,8 +39,12 @@ def patches_to_stitch_plan(patches, collapse_len=3.0 * PIXELS_PER_MM):
color_block.add_stitch(patch.stitches[0].x, patch.stitches[0].y, jump=True)
else:
- # add a color change
- color_block.add_stitch(color_block.last_stitch.x, color_block.last_stitch.y, stop=True)
+ # add a color change (only if we didn't just do a "STOP after")
+ if not color_block.last_stitch.color_change:
+ stitch = color_block.last_stitch.copy()
+ stitch.color_change = True
+ color_block.add_stitch(stitch)
+
color_block = stitch_plan.new_color_block()
color_block.color = patch.color
@@ -54,11 +59,21 @@ def patches_to_stitch_plan(patches, collapse_len=3.0 * PIXELS_PER_MM):
if patch.stop_after:
process_stop(color_block)
+ add_jumps(stitch_plan)
add_ties(stitch_plan)
return stitch_plan
+def add_jumps(stitch_plan):
+ """Add a JUMP stitch at the start of each color block."""
+
+ for color_block in stitch_plan:
+ stitch = color_block.stitches[0].copy()
+ stitch.jump = True
+ color_block.stitches.insert(0, stitch)
+
+
class StitchPlan(object):
"""Holds a set of color blocks, each containing stitches."""
diff --git a/lib/stitch_plan/stop.py b/lib/stitch_plan/stop.py
new file mode 100644
index 00000000..81dec1da
--- /dev/null
+++ b/lib/stitch_plan/stop.py
@@ -0,0 +1,43 @@
+def process_stop(color_block):
+ """Handle the "stop after" checkbox.
+
+ The user wants the machine to pause after this patch. This can
+ be useful for applique and similar on multi-needle machines that
+ normally would not stop between colors.
+
+ In machine embroidery files, there's no such thing as an actual
+ "STOP" instruction. All that exists is a "color change" command
+ (which libembroidery calls STOP just to be confusing).
+
+ On multi-needle machines, the user assigns needles to the colors in
+ the design before starting stitching. C01, C02, etc are normal
+ needles, but C00 is special. For a block of stitches assigned
+ to C00, the machine will continue sewing with the last color it
+ had and pause after it completes the C00 block.
+
+ That means we need to add an artificial color change instruction
+ shortly before the current stitch so that the user can set that color
+ block to C00. We'll go back 3 stitches and mark the start of the C00
+ block:
+ """
+
+ if len(color_block.stitches) >= 3:
+ # make a copy of the stitch and set it as a color change
+ stitch = color_block.stitches[-3].copy()
+ stitch.color_change = True
+
+ # mark this stitch as a "stop" so that we can avoid
+ # adding tie stitches in ties.py
+ stitch.stop = True
+
+ # insert it after the stitch
+ color_block.stitches.insert(-2, stitch)
+
+ # and also add a color change on this stitch, completing the C00
+ # block:
+
+ stitch = color_block.stitches[-1].copy()
+ stitch.color_change = True
+ color_block.add_stitch(stitch)
+
+ # reference for the above: https://github.com/lexelby/inkstitch/pull/29#issuecomment-359175447
diff --git a/inkstitch/stitch_plan/ties.py b/lib/stitch_plan/ties.py
index 1207ea51..6d07ac71 100644
--- a/inkstitch/stitch_plan/ties.py
+++ b/lib/stitch_plan/ties.py
@@ -1,7 +1,9 @@
+from copy import deepcopy
+
+from .stitch import Stitch
from ..utils import cut_path
from ..stitches import running_stitch
-from .. import Stitch
-from copy import deepcopy
+
def add_tie(stitches, tie_path):
if stitches[-1].no_ties:
@@ -32,7 +34,9 @@ def add_ties(stitch_plan):
need_tie_in = True
new_stitches = []
for i, stitch in enumerate(color_block.stitches):
- is_special = stitch.trim or stitch.jump or stitch.stop
+ # Tie before and after TRIMs, JUMPs, and color changes, but ignore
+ # the fake color change introduced by a "STOP after" (see stop.py).
+ is_special = stitch.trim or stitch.jump or (stitch.color_change and not stitch.stop)
if is_special and not need_tie_in:
add_tie_off(new_stitches)
diff --git a/inkstitch/stitch_plan/trim.py b/lib/stitch_plan/trim.py
index f692a179..f692a179 100644
--- a/inkstitch/stitch_plan/trim.py
+++ b/lib/stitch_plan/trim.py
diff --git a/inkstitch/stitches/__init__.py b/lib/stitches/__init__.py
index d2ff0446..d2ff0446 100644
--- a/inkstitch/stitches/__init__.py
+++ b/lib/stitches/__init__.py
diff --git a/inkstitch/stitches/auto_fill.py b/lib/stitches/auto_fill.py
index 7f265909..518a2812 100644
--- a/inkstitch/stitches/auto_fill.py
+++ b/lib/stitches/auto_fill.py
@@ -1,5 +1,3 @@
-from fill import intersect_region_with_grating, row_num, stitch_row
-from .. import _, PIXELS_PER_MM, Point as InkstitchPoint
import sys
import shapely
import networkx
@@ -7,6 +5,11 @@ import math
from itertools import groupby
from collections import deque
+from .fill import intersect_region_with_grating, row_num, stitch_row
+from ..i18n import _
+from ..svg import PIXELS_PER_MM
+from ..utils.geometry import Point as InkstitchPoint
+
class MaxQueueLengthExceeded(Exception):
pass
diff --git a/inkstitch/stitches/fill.py b/lib/stitches/fill.py
index 1b7377b0..14971cb4 100644
--- a/inkstitch/stitches/fill.py
+++ b/lib/stitches/fill.py
@@ -1,9 +1,10 @@
-from .. import PIXELS_PER_MM
-from ..utils import cache, Point as InkstitchPoint
import shapely
import math
import sys
+from ..svg import PIXELS_PER_MM
+from ..utils import cache, Point as InkstitchPoint
+
def legacy_fill(shape, angle, row_spacing, end_row_spacing, max_stitch_length, flip, staggers):
rows_of_segments = intersect_region_with_grating(shape, angle, row_spacing, end_row_spacing, flip)
@@ -242,4 +243,3 @@ def pull_runs(rows, shape, row_spacing):
count += 1
return runs
-
diff --git a/inkstitch/stitches/running_stitch.py b/lib/stitches/running_stitch.py
index 81124339..96075e7a 100644
--- a/inkstitch/stitches/running_stitch.py
+++ b/lib/stitches/running_stitch.py
@@ -16,7 +16,7 @@ def running_stitch(points, stitch_length):
if len(points) < 2:
return []
- output = [points[0]]
+ output = []
segment_start = points[0]
last_segment_direction = None
@@ -59,8 +59,8 @@ def running_stitch(points, stitch_length):
last_segment_direction = segment_direction
distance -= segment_length
- # stitch the last point unless we're already almos there
- if (segment_start - points[-1]).length() > 0.1:
+ # stitch the last point unless we're already almost there
+ if (segment_start - output[-1]).length() > 0.1:
output.append(segment_start)
return output
diff --git a/lib/svg/__init__.py b/lib/svg/__init__.py
new file mode 100644
index 00000000..1895bba4
--- /dev/null
+++ b/lib/svg/__init__.py
@@ -0,0 +1,2 @@
+from .svg import color_block_to_point_lists, render_stitch_plan
+from .units import *
diff --git a/lib/svg/realistic_rendering.py b/lib/svg/realistic_rendering.py
new file mode 100644
index 00000000..e31534da
--- /dev/null
+++ b/lib/svg/realistic_rendering.py
@@ -0,0 +1,129 @@
+import simplepath
+import math
+
+from .units import PIXELS_PER_MM
+from ..utils import cache, Point
+
+# The stitch vector path looks like this:
+# _______
+# (_______)
+#
+# It's 0.32mm high, which is the approximate thickness of common machine
+# embroidery threads.
+
+# 1.216 pixels = 0.32mm
+stitch_height = 1.216
+
+# This vector path starts at the upper right corner of the stitch shape and
+# proceeds counter-clockwise.and contains a placeholder (%s) for the stitch
+# length.
+#
+# It contains two invisible "whiskers" of zero width that go above and below
+# to ensure that the SVG renderer allocates a large enough canvas area when
+# computing the gaussian blur steps. Otherwise, we'd have to expand the
+# width and height attributes of the <filter> tag to add more buffer space.
+# The width and height are specified in multiples of the bounding box
+# size, It's the bounding box aligned with the global SVG canvas's axes, not
+# the axes of the stitch itself. That means that having a big enough value
+# to add enough padding on the long sides of the stitch would waste a ton
+# of space on the short sides and significantly slow down rendering.
+stitch_path = "M0,0c0.4,0,0.4,0.3,0.4,0.6c0,0.3,-0.1,0.6,-0.4,0.6v0.2,-0.2h-%sc-0.4,0,-0.4,-0.3,-0.4,-0.6c0,-0.3,0.1,-0.6,0.4,-0.6v-0.2,0.2z"
+
+# This filter makes the above stitch path look like a real stitch with lighting.
+realistic_filter = """
+ <filter
+ style="color-interpolation-filters:sRGB"
+ id="realistic-stitch-filter"
+ x="-0.1"
+ width="1.2"
+ y="-0.1"
+ height="1.2">
+ <feGaussianBlur
+ stdDeviation="1.5"
+ id="feGaussianBlur1542-6"
+ in="SourceAlpha" />
+ <feComponentTransfer
+ id="feComponentTransfer1544-7"
+ result="result1">
+ <feFuncR
+ id="feFuncR1546-5"
+ type="identity" />
+ <feFuncG
+ id="feFuncG1548-3"
+ type="identity" />
+ <feFuncB
+ id="feFuncB1550-5"
+ type="identity"
+ slope="4.5300000000000002" />
+ <feFuncA
+ id="feFuncA1552-6"
+ type="gamma"
+ slope="0.14999999999999999"
+ intercept="0"
+ amplitude="3.1299999999999999"
+ offset="-0.33000000000000002" />
+ </feComponentTransfer>
+ <feComposite
+ in2="SourceAlpha"
+ id="feComposite1558-2"
+ operator="in" />
+ <feGaussianBlur
+ stdDeviation="0.089999999999999997"
+ id="feGaussianBlur1969" />
+ <feMorphology
+ id="feMorphology1971"
+ operator="dilate"
+ radius="0.10000000000000001" />
+ <feSpecularLighting
+ id="feSpecularLighting1973"
+ result="result2"
+ specularConstant="0.70899999"
+ surfaceScale="30">
+ <fePointLight
+ id="fePointLight1975"
+ z="10" />
+ </feSpecularLighting>
+ <feGaussianBlur
+ stdDeviation="0.040000000000000001"
+ id="feGaussianBlur1979" />
+ <feComposite
+ in2="SourceGraphic"
+ id="feComposite1977"
+ operator="arithmetic"
+ k2="1"
+ k3="1"
+ result="result3"
+ k1="0"
+ k4="0" />
+ <feComposite
+ in2="SourceAlpha"
+ id="feComposite1981"
+ operator="in" />
+ </filter>
+"""
+
+def realistic_stitch(start, end):
+ """Generate a stitch vector path given a start and end point."""
+
+ end = Point(*end)
+ start = Point(*start)
+
+ stitch_length = (end - start).length()
+ stitch_center = (end + start) / 2.0
+ stitch_direction = (end - start)
+ stitch_angle = math.atan2(stitch_direction.y, stitch_direction.x)
+
+ stitch_length = max(0, stitch_length - 0.2 * PIXELS_PER_MM)
+
+ # create the path by filling in the length in the template
+ path = simplepath.parsePath(stitch_path % stitch_length)
+
+ # rotate the path to match the stitch
+ rotation_center_x = -stitch_length / 2.0
+ rotation_center_y = stitch_height / 2.0
+ simplepath.rotatePath(path, stitch_angle, cx=rotation_center_x, cy=rotation_center_y)
+
+ # move the path to the location of the stitch
+ simplepath.translatePath(path, stitch_center.x - rotation_center_x, stitch_center.y - rotation_center_y)
+
+ return simplepath.formatPath(path)
diff --git a/inkstitch/svg.py b/lib/svg/svg.py
index 0728309b..5552abd8 100644
--- a/inkstitch/svg.py
+++ b/lib/svg/svg.py
@@ -1,5 +1,11 @@
import simpletransform, simplestyle, inkex
-from . import _, get_viewbox_transform, cache, SVG_GROUP_TAG, INKSCAPE_LABEL, INKSCAPE_GROUPMODE, SVG_PATH_TAG
+
+from .units import get_viewbox_transform
+from .tags import SVG_GROUP_TAG, INKSCAPE_LABEL, INKSCAPE_GROUPMODE, SVG_PATH_TAG, SVG_DEFS_TAG
+from .realistic_rendering import realistic_stitch, realistic_filter
+from ..i18n import _
+from ..utils import cache
+
def color_block_to_point_lists(color_block):
point_lists = [[]]
@@ -10,7 +16,7 @@ def color_block_to_point_lists(color_block):
point_lists.append([])
continue
- if not stitch.jump and not stitch.stop:
+ if not stitch.jump and not stitch.color_change:
point_lists[-1].append(stitch.as_tuple())
return point_lists
@@ -27,6 +33,28 @@ def get_correction_transform(svg):
return transform
+def color_block_to_realistic_stitches(color_block, svg):
+ paths = []
+
+ for point_list in color_block_to_point_lists(color_block):
+ color = color_block.color.visible_on_white.darker.to_hex_str()
+ start = point_list[0]
+ for point in point_list[1:]:
+ paths.append(inkex.etree.Element(
+ SVG_PATH_TAG,
+ {'style': simplestyle.formatStyle(
+ {
+ 'fill': color,
+ 'stroke': 'none',
+ 'filter': 'url(#realistic-stitch-filter)'
+ }),
+ 'd': realistic_stitch(start, point),
+ 'transform': get_correction_transform(svg)
+ }))
+ start = point
+
+ return paths
+
def color_block_to_paths(color_block, svg):
paths = []
# We could emit just a single path with one subpath per point list, but
@@ -51,8 +79,7 @@ def color_block_to_paths(color_block, svg):
return paths
-
-def render_stitch_plan(svg, stitch_plan):
+def render_stitch_plan(svg, stitch_plan, realistic=False):
layer = svg.find(".//*[@id='__inkstitch_stitch_plan__']")
if layer is None:
layer = inkex.etree.Element(SVG_GROUP_TAG,
@@ -71,6 +98,17 @@ def render_stitch_plan(svg, stitch_plan):
SVG_GROUP_TAG,
{'id': '__color_block_%d__' % i,
INKSCAPE_LABEL: "color block %d" % (i + 1)})
- group.extend(color_block_to_paths(color_block, svg))
+ if realistic:
+ group.extend(color_block_to_realistic_stitches(color_block, svg))
+ else:
+ group.extend(color_block_to_paths(color_block, svg))
svg.append(layer)
+
+ if realistic:
+ defs = svg.find(SVG_DEFS_TAG)
+
+ if defs is None:
+ defs = inkex.etree.SubElement(svg, SVG_DEFS_TAG)
+
+ defs.append(inkex.etree.fromstring(realistic_filter))
diff --git a/lib/svg/tags.py b/lib/svg/tags.py
new file mode 100644
index 00000000..fee59957
--- /dev/null
+++ b/lib/svg/tags.py
@@ -0,0 +1,12 @@
+import inkex
+
+
+SVG_PATH_TAG = inkex.addNS('path', 'svg')
+SVG_POLYLINE_TAG = inkex.addNS('polyline', 'svg')
+SVG_DEFS_TAG = inkex.addNS('defs', 'svg')
+SVG_GROUP_TAG = inkex.addNS('g', 'svg')
+
+INKSCAPE_LABEL = inkex.addNS('label', 'inkscape')
+INKSCAPE_GROUPMODE = inkex.addNS('groupmode', 'inkscape')
+
+EMBROIDERABLE_TAGS = (SVG_PATH_TAG, SVG_POLYLINE_TAG)
diff --git a/lib/svg/units.py b/lib/svg/units.py
new file mode 100644
index 00000000..126027bc
--- /dev/null
+++ b/lib/svg/units.py
@@ -0,0 +1,118 @@
+import simpletransform
+
+from ..utils import cache
+
+# modern versions of Inkscape use 96 pixels per inch as per the CSS standard
+PIXELS_PER_MM = 96 / 25.4
+
+# cribbed from inkscape-silhouette
+def parse_length_with_units( str ):
+
+ '''
+ Parse an SVG value which may or may not have units attached
+ This version is greatly simplified in that it only allows: no units,
+ units of px, mm, and %. Everything else, it returns None for.
+ There is a more general routine to consider in scour.py if more
+ generality is ever needed.
+ '''
+
+ u = 'px'
+ s = str.strip()
+ if s[-2:] == 'px':
+ s = s[:-2]
+ elif s[-2:] == 'mm':
+ u = 'mm'
+ s = s[:-2]
+ elif s[-2:] == 'pt':
+ u = 'pt'
+ s = s[:-2]
+ elif s[-2:] == 'pc':
+ u = 'pc'
+ s = s[:-2]
+ elif s[-2:] == 'cm':
+ u = 'cm'
+ s = s[:-2]
+ elif s[-2:] == 'in':
+ u = 'in'
+ s = s[:-2]
+ elif s[-1:] == '%':
+ u = '%'
+ s = s[:-1]
+ try:
+ v = float( s )
+ except:
+ raise ValueError(_("parseLengthWithUnits: unknown unit %s") % s)
+
+ return v, u
+
+
+def convert_length(length):
+ value, units = parse_length_with_units(length)
+
+ if not units or units == "px":
+ return value
+
+ if units == 'pt':
+ value /= 72
+ units = 'in'
+
+ if units == 'pc':
+ value /= 6
+ units = 'in'
+
+ if units == 'cm':
+ value *= 10
+ units = 'mm'
+
+ if units == 'mm':
+ value = value / 25.4
+ units = 'in'
+
+ if units == 'in':
+ # modern versions of Inkscape use CSS's 96 pixels per inch. When you
+ # open an old document, inkscape will add a viewbox for you.
+ return value * 96
+
+ raise ValueError(_("Unknown unit: %s") % units)
+
+@cache
+def get_viewbox(svg):
+ return svg.get('viewBox').strip().replace(',', ' ').split()
+
+
+@cache
+def get_doc_size(svg):
+ width = svg.get('width')
+ height = svg.get('height')
+
+ if width is None or height is None:
+ # fall back to the dimensions from the viewBox
+ viewbox = get_viewbox(svg)
+ width = viewbox[2]
+ height = viewbox[3]
+
+ doc_width = convert_length(width)
+ doc_height = convert_length(height)
+
+ return doc_width, doc_height
+
+@cache
+def get_viewbox_transform(node):
+ # somewhat cribbed from inkscape-silhouette
+ doc_width, doc_height = get_doc_size(node)
+
+ viewbox = get_viewbox(node)
+
+ dx = -float(viewbox[0])
+ dy = -float(viewbox[1])
+ transform = simpletransform.parseTransform("translate(%f, %f)" % (dx, dy))
+
+ try:
+ sx = doc_width / float(viewbox[2])
+ sy = doc_height / float(viewbox[3])
+ scale_transform = simpletransform.parseTransform("scale(%f, %f)" % (sx, sy))
+ transform = simpletransform.composeTransform(transform, scale_transform)
+ except ZeroDivisionError:
+ pass
+
+ return transform
diff --git a/inkstitch/threads/__init__.py b/lib/threads/__init__.py
index 03cd777b..03cd777b 100644
--- a/inkstitch/threads/__init__.py
+++ b/lib/threads/__init__.py
diff --git a/inkstitch/threads/catalog.py b/lib/threads/catalog.py
index cebae4ff..d9981dc6 100644
--- a/inkstitch/threads/catalog.py
+++ b/lib/threads/catalog.py
@@ -3,8 +3,10 @@ from os.path import dirname, realpath
import sys
from glob import glob
from collections import Sequence
+
from .palette import ThreadPalette
+
class _ThreadCatalog(Sequence):
"""Holds a set of ThreadPalettes."""
diff --git a/inkstitch/threads/color.py b/lib/threads/color.py
index af474127..fede2ecc 100644
--- a/inkstitch/threads/color.py
+++ b/lib/threads/color.py
@@ -80,3 +80,18 @@ class ThreadColor(object):
color = tuple(value * 255 for value in color)
return ThreadColor(color, name=self.name, number=self.number, manufacturer=self.manufacturer)
+
+ @property
+ def darker(self):
+ hls = list(colorsys.rgb_to_hls(*self.rgb_normalized))
+
+ # Capping lightness should make the color visible without changing it
+ # too much.
+ hls[1] *= 0.75
+
+ color = colorsys.hls_to_rgb(*hls)
+
+ # convert back to values in the range of 0-255
+ color = tuple(value * 255 for value in color)
+
+ return ThreadColor(color, name=self.name, number=self.number, manufacturer=self.manufacturer)
diff --git a/inkstitch/threads/palette.py b/lib/threads/palette.py
index e1f47c7f..785fb082 100644
--- a/inkstitch/threads/palette.py
+++ b/lib/threads/palette.py
@@ -1,9 +1,10 @@
from collections import Set
-from .color import ThreadColor
from colormath.color_objects import sRGBColor, LabColor
from colormath.color_conversions import convert_color
from colormath.color_diff import delta_e_cie1994
+from .color import ThreadColor
+
def compare_thread_colors(color1, color2):
# K_L=2 indicates textiles
diff --git a/inkstitch/utils/__init__.py b/lib/utils/__init__.py
index ff06d4a9..ff06d4a9 100644
--- a/inkstitch/utils/__init__.py
+++ b/lib/utils/__init__.py
diff --git a/inkstitch/utils/cache.py b/lib/utils/cache.py
index 38fe8f2c..38fe8f2c 100644
--- a/inkstitch/utils/cache.py
+++ b/lib/utils/cache.py
diff --git a/inkstitch/utils/geometry.py b/lib/utils/geometry.py
index 61b98bcb..7ff9b1cd 100644
--- a/inkstitch/utils/geometry.py
+++ b/lib/utils/geometry.py
@@ -71,6 +71,12 @@ class Point:
else:
raise ValueError("cannot multiply Point by %s" % type(other))
+ def __div__(self, other):
+ if isinstance(other, (int, float)):
+ return self * (1.0 / other)
+ else:
+ raise ValueErorr("cannot divide Point by %s" % type(other))
+
def __repr__(self):
return "Point(%s,%s)" % (self.x, self.y)
diff --git a/inkstitch/utils/inkscape.py b/lib/utils/inkscape.py
index 2d0298bc..2d0298bc 100644
--- a/inkstitch/utils/inkscape.py
+++ b/lib/utils/inkscape.py
diff --git a/lib/utils/io.py b/lib/utils/io.py
new file mode 100644
index 00000000..e5a246f3
--- /dev/null
+++ b/lib/utils/io.py
@@ -0,0 +1,33 @@
+import os
+import sys
+from cStringIO import StringIO
+
+
+def save_stderr():
+ # GTK likes to spam stderr, which inkscape will show in a dialog.
+ null = open(os.devnull, 'w')
+ sys.stderr_dup = os.dup(sys.stderr.fileno())
+ sys.real_stderr = os.fdopen(sys.stderr_dup, 'w')
+ os.dup2(null.fileno(), 2)
+ sys.stderr = StringIO()
+
+
+def restore_stderr():
+ os.dup2(sys.stderr_dup, 2)
+ sys.real_stderr.write(sys.stderr.getvalue())
+ sys.stderr = sys.real_stderr
+
+# It's probably possible to generalize this code, but when I tried,
+# the result was incredibly unreadable.
+def save_stdout():
+ null = open(os.devnull, 'w')
+ sys.stdout_dup = os.dup(sys.stdout.fileno())
+ sys.real_stdout = os.fdopen(sys.stdout_dup, 'w')
+ os.dup2(null.fileno(), 1)
+ sys.stdout = StringIO()
+
+
+def restore_stdout():
+ os.dup2(sys.stdout_dup, 1)
+ sys.real_stdout.write(sys.stdout.getvalue())
+ sys.stdout = sys.real_stdout
diff --git a/messages.po b/messages.po
index d1968764..fb081eb1 100644
--- a/messages.po
+++ b/messages.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
-"POT-Creation-Date: 2018-04-29 21:29-0400\n"
+"POT-Creation-Date: 2018-06-16 22:33-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"
@@ -17,310 +17,309 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.5.3\n"
-msgid ""
-"\n"
-"\n"
-"Seeing a 'no such option' message? Please restart Inkscape to fix."
+msgid "Auto-Fill"
msgstr ""
-msgid "Directory in which to install palettes:"
+msgid "Automatically routed fill stitching"
msgstr ""
-msgid "Choose another directory..."
+msgid "Running stitch length (traversal between sections)"
msgstr ""
-msgid "Install"
+msgid "Underlay"
msgstr ""
-msgid "Cancel"
+msgid "AutoFill Underlay"
msgstr ""
-msgid "Choose Inkscape palettes directory"
+msgid "Fill angle (default: fill angle + 90 deg)"
msgstr ""
-msgid "Thread palette installation failed"
+msgid "Row spacing (default: 3x fill row spacing)"
msgstr ""
-msgid "Installation Failed"
+msgid "Max stitch length"
msgstr ""
-msgid ""
-"Thread palette files have been installed. Please restart Inkscape to "
-"load the new palettes."
+msgid "Inset"
msgstr ""
-msgid "Installation Completed"
+msgid "Expand"
msgstr ""
-msgid "Ink/Stitch Thread Palette Installer"
+msgid "TRIM after"
msgstr ""
-msgid "These settings will be applied to 1 object."
+msgid "Trim thread after this object (for supported machines and file formats)"
msgstr ""
-#, python-format
-msgid "These settings will be applied to %d objects."
+msgid "STOP after"
msgstr ""
msgid ""
-"Some settings had different values across objects. Select a value from "
-"the dropdown or enter a new one."
+"Add STOP instruction after this object (for supported machines and file "
+"formats)"
msgstr ""
-#, python-format
-msgid "Disabling this tab will disable the following %d tabs."
+msgid "Fill"
msgstr ""
-msgid "Disabling this tab will disable the following tab."
+msgid "Manually routed fill stitching"
msgstr ""
-#, python-format
-msgid "Enabling this tab will disable %s and vice-versa."
+msgid "Angle of lines of stitches"
msgstr ""
-msgid "Inkscape objects"
+msgid "Flip fill (start right-to-left)"
msgstr ""
-msgid "Embroidery Params"
+msgid "Spacing between rows"
msgstr ""
-msgid "Presets"
+msgid "Maximum fill stitch length"
msgstr ""
-msgid "Load"
+msgid "Stagger rows this many times before repeating"
msgstr ""
-msgid "Add"
+msgid "Satin Column"
msgstr ""
-msgid "Overwrite"
+msgid "Custom satin column"
msgstr ""
-msgid "Delete"
+msgid "Zig-zag spacing (peak-to-peak)"
msgstr ""
-msgid "Use Last Settings"
+msgid "Pull compensation"
msgstr ""
-msgid "Apply and Quit"
+msgid "Contour underlay"
msgstr ""
-msgid "Preview"
+msgid "Contour Underlay"
msgstr ""
-msgid "Internal Error"
+msgid "Stitch length"
msgstr ""
-msgid "Please enter or select a preset name first."
+msgid "Contour underlay inset amount"
msgstr ""
-msgid "Preset"
+msgid "Center-walk underlay"
msgstr ""
-#, python-format
-msgid "Preset \"%s\" not found."
+msgid "Center-Walk Underlay"
msgstr ""
-#, python-format
-msgid ""
-"Preset \"%s\" already exists. Please use another name or press "
-"\"Overwrite\""
+msgid "Zig-zag underlay"
msgstr ""
-msgid "Closing..."
+msgid "Zig-zag Underlay"
msgstr ""
-msgid "It is safe to close this window now."
+msgid "Zig-Zag spacing (peak-to-peak)"
msgstr ""
-msgid ""
-"A print preview has been opened in your web browser. This window will "
-"stay open in order to communicate with the JavaScript code running in "
-"your browser.\n"
-"\n"
-"This window will close after you close the print preview in your browser,"
-" or you can close it manually if necessary."
+msgid "Inset amount (default: half of contour underlay inset)"
msgstr ""
-msgid "Ink/Stitch Print"
+#, python-format
+msgid "satin column: %(id)s: at least two subpaths required (%(num)d found)"
msgstr ""
-msgid "Embroidery Simulation"
+msgid ""
+"One or more rails crosses itself, and this is not allowed. Please split "
+"into multiple satin columns."
msgstr ""
-#, python-format
-msgid "parseLengthWithUnits: unknown unit %s"
+msgid "satin column: One or more of the rungs doesn't intersect both rails."
msgstr ""
-#, python-format
-msgid "Unknown unit: %s"
+msgid "Each rail should intersect both rungs once."
msgstr ""
-msgid "No embroiderable paths selected."
+msgid ""
+"satin column: One or more of the rungs intersects the rails more than "
+"once."
msgstr ""
-msgid "No embroiderable paths found in document."
+#, python-format
+msgid "satin column: object %s has a fill (but should not)"
msgstr ""
-msgid "Tip: use Path -> Object to Path to convert non-paths before embroidering."
+#, python-format
+msgid ""
+"satin column: object %(id)s has two paths with an unequal number of "
+"points (%(length1)d and %(length2)d)"
msgstr ""
-msgid "Stitch Plan"
+msgid "Satin stitch along paths"
msgstr ""
-msgid "Auto-Fill"
+msgid "Running stitch length"
msgstr ""
-msgid "Automatically routed fill stitching"
+msgid "Repeats"
msgstr ""
-msgid "Running stitch length (traversal between sections)"
+msgid "Manual stitch placement"
msgstr ""
-msgid "Underlay"
+msgid ""
+"Stitch every node in the path. Stitch length and zig-zag spacing are "
+"ignored."
msgstr ""
-msgid "AutoFill Underlay"
+msgid ""
+"Legacy running stitch setting detected!\n"
+"\n"
+"It looks like you're using a stroke smaller than 0.5 units to indicate a "
+"running stitch, which is deprecated. Instead, please set your stroke to "
+"be dashed to indicate running stitch. Any kind of dash will work."
msgstr ""
-msgid "Fill angle (default: fill angle + 90 deg)"
+msgid "No embroiderable paths selected."
msgstr ""
-msgid "Row spacing (default: 3x fill row spacing)"
+msgid "No embroiderable paths found in document."
msgstr ""
-msgid "Max stitch length"
+msgid "Tip: use Path -> Object to Path to convert non-paths."
msgstr ""
-msgid "Inset"
+msgid ""
+"\n"
+"\n"
+"Seeing a 'no such option' message? Please restart Inkscape to fix."
msgstr ""
-msgid "TRIM after"
+msgid "Directory in which to install palettes:"
msgstr ""
-msgid "Trim thread after this object (for supported machines and file formats)"
+msgid "Choose another directory..."
msgstr ""
-msgid "STOP after"
+msgid "Install"
msgstr ""
-msgid ""
-"Add STOP instruction after this object (for supported machines and file "
-"formats)"
+msgid "Cancel"
msgstr ""
-msgid "Fill"
+msgid "Choose Inkscape palettes directory"
msgstr ""
-msgid "Manually routed fill stitching"
+msgid "Thread palette installation failed"
msgstr ""
-msgid "Angle of lines of stitches"
+msgid "Installation Failed"
msgstr ""
-msgid "Flip fill (start right-to-left)"
+msgid ""
+"Thread palette files have been installed. Please restart Inkscape to "
+"load the new palettes."
msgstr ""
-msgid "Spacing between rows"
+msgid "Installation Completed"
msgstr ""
-msgid "Maximum fill stitch length"
+msgid "Ink/Stitch Thread Palette Installer"
msgstr ""
-msgid "Stagger rows this many times before repeating"
+msgid "These settings will be applied to 1 object."
msgstr ""
-msgid "Satin Column"
+#, python-format
+msgid "These settings will be applied to %d objects."
msgstr ""
-msgid "Custom satin column"
+msgid ""
+"Some settings had different values across objects. Select a value from "
+"the dropdown or enter a new one."
msgstr ""
-msgid "Zig-zag spacing (peak-to-peak)"
+#, python-format
+msgid "Disabling this tab will disable the following %d tabs."
msgstr ""
-msgid "Pull compensation"
+msgid "Disabling this tab will disable the following tab."
msgstr ""
-msgid "Contour underlay"
+#, python-format
+msgid "Enabling this tab will disable %s and vice-versa."
msgstr ""
-msgid "Contour Underlay"
+msgid "Inkscape objects"
msgstr ""
-msgid "Stitch length"
+msgid "Embroidery Params"
msgstr ""
-msgid "Contour underlay inset amount"
+msgid "Presets"
msgstr ""
-msgid "Center-walk underlay"
+msgid "Load"
msgstr ""
-msgid "Center-Walk Underlay"
+msgid "Add"
msgstr ""
-msgid "Zig-zag underlay"
+msgid "Overwrite"
msgstr ""
-msgid "Zig-zag Underlay"
+msgid "Delete"
msgstr ""
-msgid "Zig-Zag spacing (peak-to-peak)"
+msgid "Use Last Settings"
msgstr ""
-msgid "Inset amount (default: half of contour underlay inset)"
+msgid "Apply and Quit"
msgstr ""
-msgid ""
-"One or more rails crosses itself, and this is not allowed. Please split "
-"into multiple satin columns."
+msgid "Preview"
msgstr ""
-msgid "satin column: One or more of the rungs doesn't intersect both rails."
+msgid "Internal Error"
msgstr ""
-msgid "Each rail should intersect both rungs once."
+msgid "Please enter or select a preset name first."
msgstr ""
-msgid ""
-"satin column: One or more of the rungs intersects the rails more than "
-"once."
+msgid "Preset"
msgstr ""
#, python-format
-msgid "satin column: object %s has a fill (but should not)"
+msgid "Preset \"%s\" not found."
msgstr ""
#, python-format
msgid ""
-"satin column: object %(id)s has two paths with an unequal number of "
-"points (%(length1)d and %(length2)d)"
+"Preset \"%s\" already exists. Please use another name or press "
+"\"Overwrite\""
msgstr ""
-msgid "Satin stitch along paths"
+msgid "Closing..."
msgstr ""
-msgid "Running stitch length"
+msgid "It is safe to close this window now."
msgstr ""
-msgid "Repeats"
+msgid ""
+"A print preview has been opened in your web browser. This window will "
+"stay open in order to communicate with the JavaScript code running in "
+"your browser.\n"
+"\n"
+"This window will close after you close the print preview in your browser,"
+" or you can close it manually if necessary."
msgstr ""
-msgid "Manual stitch placement"
+msgid "Ink/Stitch Print"
msgstr ""
-msgid ""
-"Stitch every node in the path. Stitch length and zig-zag spacing are "
-"ignored."
+msgid "Embroidery Simulation"
msgstr ""
-msgid ""
-"Legacy running stitch setting detected!\n"
-"\n"
-"It looks like you're using a stroke smaller than 0.5 units to indicate a "
-"running stitch, which is deprecated. Instead, please set your stroke to "
-"be dashed to indicate running stitch. Any kind of dash will work."
+msgid "No embroidery file formats selected."
msgstr ""
msgid ""
@@ -333,6 +332,17 @@ msgid ""
"file to lexelby@github."
msgstr ""
+msgid "Stitch Plan"
+msgstr ""
+
+#, python-format
+msgid "parseLengthWithUnits: unknown unit %s"
+msgstr ""
+
+#, python-format
+msgid "Unknown unit: %s"
+msgstr ""
+
msgid "Color"
msgstr ""
diff --git a/print/resources/inkstitch.js b/print/resources/inkstitch.js
index daa2cf4b..6bcb183d 100644
--- a/print/resources/inkstitch.js
+++ b/print/resources/inkstitch.js
@@ -7,6 +7,10 @@ $.postJSON = function(url, data, success=null) {
});
};
+var realistic_rendering = {};
+var realistic_cache = {};
+var normal_rendering = {};
+
function ping() {
$.get("/ping")
.done(function() { setTimeout(ping, 1000) })
@@ -142,6 +146,11 @@ $(function() {
setSVGTransform($(this), $(this).find('svg').css('transform'));
});
+ // ignore mouse events on the buttons (Fill, 100%, Apply to All)
+ $('figure.inksimulation div').on('mousedown mouseup', function(e) {
+ e.stopPropagation();
+ });
+
/* Apply transforms to All */
$('button.svg-apply').click(function() {
var transform = $(this).parent().siblings('svg').css('transform');
@@ -190,6 +199,7 @@ $(function() {
}
});
});
+
// wait until page size is set (if they've specified one) and then scale SVGs to fit
setTimeout(function() { scaleAllSvg() }, 500);
});
@@ -211,7 +221,7 @@ $(function() {
$('button.close').click(function() {
$.post('/shutdown', {})
- .done(function(data) {
+ .always(function(data) {
window.close();
/* Chrome and Firefox both have a rule: scripts can only close windows
@@ -288,19 +298,89 @@ $(function() {
$('.modal').hide();
});
- //Checkbox
- $(':checkbox').on('change initialize', function() {
+ // View selection checkboxes
+ $(':checkbox.view').on('change initialize', function() {
var field_name = $(this).attr('data-field-name');
$('.' + field_name).toggle($(this).prop('checked'));
setPageNumbers();
}).on('change', function() {
+ var field_name = $(this).attr('data-field-name');
$.postJSON('/settings/' + field_name, {value: $(this).prop('checked')});
});
+ // Realistic rendering checkboxes
+ $(':checkbox.realistic').on('change', function(e) {
+ console.log("realistic rendering checkbox");
+
+ var item = $(this).data('field-name');
+ var figure = $(this).closest('figure');
+ var svg = figure.find('svg');
+ var transform = svg.css('transform');
+ var checked = $(this).prop('checked');
+
+ console.log("" + item + " " + transform);
+
+ function finalize(svg_content) {
+ svg[0].outerHTML = svg_content;
+ // can't use the svg variable here because setting outerHTML created a new tag
+ figure.find('svg').css({transform: transform});
+ }
+
+ // do this later to allow this event handler to return now,
+ // which will cause the checkbox to be checked or unchecked
+ // immediately even if SVG rendering takes awhile
+ setTimeout(function() {
+ if (checked) {
+ if (!(item in normal_rendering)) {
+ normal_rendering[item] = svg[0].outerHTML;
+ }
+
+ if (!(item in realistic_cache)) {
+ // pre-render the realistic SVG to a raster image to spare the poor browser
+ var image = document.createElement('img');
+ image.onload = function() {
+ console.log("rendering!");
+ var canvas = document.createElement('canvas');
+
+ // maybe make DPI configurable? for now, use 600
+ canvas.width = image.width / 96 * 600;
+ canvas.height = image.height / 96 * 600;
+
+ var ctx = canvas.getContext('2d');
+
+ // rendering slows down the browser enough that we can miss sending
+ // pings, so tell the server side to wait for us
+ $.get("/printing/start")
+ .done(function() {
+ ctx.drawImage(image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height);
+ realistic_cache[item] = '<svg width=' + image.width + ' height=' + image.height + ' xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">' +
+ '<image x=0 y=0 width=' + image.width + ' height=' + image.height + ' xlink:href="' + canvas.toDataURL() + '" />' +
+ '</svg>';
+ finalize(realistic_cache[item]);
+ $.get("/printing/end");
+ });
+ };
+ image.src = '/realistic/' + item;
+ } else {
+ finalize(realistic_cache[item]);
+ }
+ } else {
+ finalize(normal_rendering[item]);
+ }
+ }, 100);
+
+ e.stopPropagation();
+ return true;
+ });
+
+ $('button.svg-realistic').click(function(e){
+ $(this).find('input').click();
+ });
+
// Logo
$('#logo-picker').change(function(e) {
- var file = e.originalEvent.srcElement.files[0];
+ var file = e.originalEvent.currentTarget.files[0];
var reader = new FileReader();
reader.onloadend = function() {
var data = reader.result;
diff --git a/print/resources/style.css b/print/resources/style.css
index 58ec8714..81b2ea7e 100644
--- a/print/resources/style.css
+++ b/print/resources/style.css
@@ -304,7 +304,7 @@ body {
#logo-picker {
width: 0px;
height: 0px;
- opacity: 0%;
+ opacity: 0;
}
.logo-instructions {
@@ -473,6 +473,28 @@ body {
border: none;
background: grey;
color: white;
+ display: inline-block;
+ font-size: 16px;
+ font-family: "Barlow", sans-serif;
+ padding-left: 3px;
+ padding-right: 3px;
+ margin: 0px 1px 0px 1px;
+ }
+
+ input.realistic {
+ position: absolute;
+ transform: scale(0.7);
+ margin-left: 2px;
+ }
+
+ label.realistic {
+ margin-left: 20px;
+ }
+
+ /* prevents Chrome from sending a double event for the checkbox
+ and the containing <button> */
+ .realistic {
+ pointer-events: none;
}
/* Color Swatches */
diff --git a/print/templates/operator_overview.html b/print/templates/operator_overview.html
index 367d6d2b..6fa46911 100644
--- a/print/templates/operator_overview.html
+++ b/print/templates/operator_overview.html
@@ -32,6 +32,10 @@
<button class="svg-fit">{{ _('Fit') }}</button>
<button class="svg-full">100%</button>
<button class="svg-apply">{{ _('Apply to all') }}</button>
+ <button class="svg-realistic">
+ <input type="checkbox" id="realistic-operator-overview" data-field-name="overview" class="realistic" />
+ <label for="realistic-operator-overview" class="realistic">Realistic</label>
+ </button>
</div>
</figure>
</main>
diff --git a/print/templates/print_detail.html b/print/templates/print_detail.html
index 714d33a2..e73fe918 100644
--- a/print/templates/print_detail.html
+++ b/print/templates/print_detail.html
@@ -22,9 +22,12 @@
<button class="svg-fit">Fit</button>
<button class="svg-full">100%</button>
<button class="svg-apply">Apply to all</button>
+ <button class="svg-realistic">
+ <input type="checkbox" id="realistic-color-block-{{ loop.index0 }}" data-field-name="block{{ loop.index0 }}" class="realistic" />
+ <label for="realistic-color-block-{{ loop.index0 }}" class="realistic">Realistic</label>
+ </button>
</div>
- </figure>
-
+ </figure>
<div class="color-palette detailed">
{% include 'color_swatch.html' %}
</div>
diff --git a/print/templates/print_overview.html b/print/templates/print_overview.html
index efcf5b2e..b42ab7a9 100644
--- a/print/templates/print_overview.html
+++ b/print/templates/print_overview.html
@@ -32,14 +32,18 @@
<button class="svg-fit">Fit</button>
<button class="svg-full">100%</button>
<button class="svg-apply">Apply to all</button>
+ <button class="svg-realistic">
+ <input type="checkbox" id="realistic-client-overview" data-field-name="overview" class="realistic" />
+ <label for="realistic-client-overview" class="realistic">Realistic</label>
+ </button>
</div>
- </figure>
-
+ </figure>
+
<div class="color-palette">
{% for color_block in color_blocks %}
{% include 'color_swatch.html' %}
- {% endfor %}
-
+ {% endfor %}
+
</div>
<div class="signature">{{ _('Client Signature') }}</div>
</main>
diff --git a/print/templates/ui.html b/print/templates/ui.html
index b09dc941..3b11f345 100644
--- a/print/templates/ui.html
+++ b/print/templates/ui.html
@@ -26,10 +26,10 @@
<div>
<fieldset>
<legend>{{ _('Print Layouts') }}</legend>
- <p><input type="checkbox" id="client-overview" data-field-name="client-overview" /><label for="client-overview">Client Overview</label></p>
- <p><input type="checkbox" id="client-detailedview" data-field-name="client-detailedview" /><label for="client-detailedview">Client Detailed View</label></p>
- <p><input type="checkbox" id="operator-overview" data-field-name="operator-overview" CHECKED /><label for="operator-overview">Operator Overview</label></p>
- <p><input type="checkbox" id="operator-detailedview" data-field-name="operator-detailedview" CHECKED /><label for="operator-detailedview">Operator Detailed View</label></p>
+ <p><input type="checkbox" class="view" id="client-overview" data-field-name="client-overview" /><label for="client-overview">Client Overview</label></p>
+ <p><input type="checkbox" class="view" id="client-detailedview" data-field-name="client-detailedview" /><label for="client-detailedview">Client Detailed View</label></p>
+ <p><input type="checkbox" class="view" id="operator-overview" data-field-name="operator-overview" CHECKED /><label for="operator-overview">Operator Overview</label></p>
+ <p><input type="checkbox" class="view" id="operator-detailedview" data-field-name="operator-detailedview" CHECKED /><label for="operator-detailedview">Operator Detailed View</label></p>
</fieldset>
<button id="save-settings" title="{{ _("Includes these Page Setup settings and also the icon.") }}">{{ _("Save as defaults") }}</button>
</div>
diff --git a/requirements.txt b/requirements.txt
index 450786cd..314a2b0e 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,8 +6,11 @@ lxml
appdirs
numpy
jinja2
-flask
requests
+colormath
+
+# We're not ready for flask 1.0 yet. Logging changed, among othe things.
+flask==0.*
+
pywinutils; sys.platform == 'win32'
pywin32; sys.platform == 'win32'
-colormath
diff --git a/templates/embroider_input.inx b/templates/embroider_input.inx
index 3af8f79e..15ccdef8 100644
--- a/templates/embroider_input.inx
+++ b/templates/embroider_input.inx
@@ -2,7 +2,7 @@
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>{{ format | upper }} file input</_name>
<id>org.inkstitch.input.{{ format }}</id>
- <dependency type="executable" location="extensions">embroider_input.py</dependency>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<input>
<extension>.{{ format }}</extension>
@@ -10,8 +10,8 @@
<_filetypename>Ink/Stitch: {{ description }} (.{{ format }})</_filetypename>
<_filetypetooltip>convert {{ format | upper }} file to Ink/Stitch manual-stitch paths</_filetypetooltip>
</input>
+ <param name="extension" type="string" gui-hidden="true">input</param>
<script>
- <command reldir="extensions" interpreter="python">embroider_input.py</command>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>
-
diff --git a/templates/embroider_output.inx b/templates/embroider_output.inx
new file mode 100644
index 00000000..4f971fb3
--- /dev/null
+++ b/templates/embroider_output.inx
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>{{ format | upper }} file output</_name>
+ <id>org.inkstitch.output.{{ format }}</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.{{ format }}</extension>
+ <mimetype>application/x-embroidery-{{ format }}</mimetype>
+ <_filetypename>Ink/Stitch: {{ description }} (.{{ format }})</_filetypename>
+ <_filetypetooltip>Save design in {{ format | upper }} format using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+ <param name="extension" type="string" gui-hidden="true">output</param>
+ <param name="format" type="string" gui-hidden="true">{{ format }}</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension>
diff --git a/templates/embroider_zip_output.inx b/templates/embroider_zip_output.inx
new file mode 100644
index 00000000..5d162357
--- /dev/null
+++ b/templates/embroider_zip_output.inx
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
+ <_name>embroidery ZIP file output</_name>
+ <id>org.inkstitch.output.zip</id>
+ <dependency type="executable" location="extensions">inkstitch.py</dependency>
+ <dependency type="executable" location="extensions">inkex.py</dependency>
+ <output>
+ <extension>.zip</extension>
+ <mimetype>application/zip</mimetype>
+ <_filetypename>Ink/Stitch: ZIP export multiple formats (.zip)</_filetypename>
+ <_filetypetooltip>Create a ZIP with multiple embroidery file formats using Ink/Stitch</_filetypetooltip>
+ <dataloss>true</dataloss>
+ </output>
+{% for format, description in formats %}
+ <param name="format-{{format}}" type="boolean" _gui-text=".{{format | upper}}: {{description}}">false</param>
+{% endfor %}
+ <param name="extension" type="string" gui-hidden="true">zip</param>
+ <script>
+ <command reldir="extensions" interpreter="python">inkstitch.py</command>
+ </script>
+</inkscape-extension>