Merge pull request #243 from inkstitch/lexelby-no-embroider-command

"ignore" command
pull/282/merge
Lex Neva 2018-08-17 16:21:58 -04:00 zatwierdzone przez GitHub
commit f0bd1404ad
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
11 zmienionych plików z 459 dodań i 232 usunięć

Wyświetl plik

@ -8,7 +8,8 @@
<param name="fill_end" type="boolean" _gui-text="Fill ending position">false</param>
<param name="stop" type="boolean" _gui-text="Stop after sewing this object">false</param>
<param name="trim" type="boolean" _gui-text="Trim thread after sewing this object">false</param>
<param name="extension" type="string" gui-hidden="true">commands</param>
<param name="ignore_object" type="boolean" _gui-text="Ignore this object (do not stitch)">false</param>
<param name="extension" type="string" gui-hidden="true">object_commands</param>
<effect>
<object-type>all</object-type>
<effects-menu>

Wyświetl plik

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension">
<_name>Add Layer Commands</_name>
<id>org.inkstitch.layer_commands</id>
<dependency type="executable" location="extensions">inkstitch.py</dependency>
<dependency type="executable" location="extensions">inkex.py</dependency>
<param name="description" type="description">Commands will be added to the currently-selected layer.</param>
<param name="ignore_layer" type="boolean" _gui-text="Ignore layer (do not stitch any objects in this layer)">false</param>
<param name="extension" type="string" gui-hidden="true">layer_commands</param>
<effect>
<object-type>all</object-type>
<effects-menu>
<submenu _name="Embroidery" />
</effects-menu>
</effect>
<script>
<command reldir="extensions" interpreter="python">inkstitch.py</command>
</script>
</inkscape-extension>

Wyświetl plik

@ -5,28 +5,44 @@ from .svg import apply_transforms
from .svg.tags import SVG_USE_TAG, SVG_SYMBOL_TAG, CONNECTION_START, CONNECTION_END, XLINK_HREF
class Command(object):
def __init__(self, connector):
self.connector = connector
self.svg = self.connector.getroottree().getroot()
class CommandParseError(Exception):
pass
self.parse_command()
def get_node_by_url(self, url):
# url will be #path12345. Find the object at the other end.
class BaseCommand(object):
def parse_symbol(self):
if self.symbol.tag != SVG_SYMBOL_TAG:
raise CommandParseError("use points to non-symbol")
self.command = self.symbol.get('id')
if self.command.startswith('inkstitch_'):
self.command = self.command[10:]
else:
raise CommandParseError("symbol is not an Ink/Stitch command")
def get_node_by_url(self,url):
# url will be #path12345. Find the corresponding object.
if url is None:
raise ValueError("url is None")
raise CommandParseError("url is None")
if not url.startswith('#'):
raise ValueError("invalid connection url: %s" % url)
raise CommandParseError("invalid connection url: %s" % url)
id = url[1:]
try:
return self.svg.xpath(".//*[@id='%s']" % id)[0]
except (IndexError, AttributeError):
raise ValueError("could not find node by url %s" % id)
raise CommandParseError("could not find node by url %s" % id)
class Command(BaseCommand):
def __init__(self, connector):
self.connector = connector
self.svg = self.connector.getroottree().getroot()
self.parse_command()
def parse_connector_path(self):
path = cubicsuperpath.parsePath(self.connector.get('d'))
@ -44,19 +60,10 @@ class Command(object):
neighbors.reverse()
if neighbors[0][0].tag != SVG_USE_TAG:
raise ValueError("connector does not point to a use tag")
raise CommandParseError("connector does not point to a use tag")
self.symbol = self.get_node_by_url(neighbors[0][0].get(XLINK_HREF))
if self.symbol.tag != SVG_SYMBOL_TAG:
raise ValueError("use points to non-symbol")
self.command = self.symbol.get('id')
if self.command.startswith('inkstitch_'):
self.command = self.command[10:]
else:
raise ValueError("symbol is not an Ink/Stitch command")
self.parse_symbol()
self.target = neighbors[1][0]
self.target_point = neighbors[1][1]
@ -64,6 +71,23 @@ class Command(object):
def __repr__(self):
return "Command('%s', %s)" % (self.command, self.target_point)
class StandaloneCommand(BaseCommand):
def __init__(self, use):
self.node = use
self.svg = self.node.getroottree().getroot()
self.parse_command()
def parse_command(self):
self.symbol = self.get_node_by_url(self.node.get(XLINK_HREF))
if self.symbol.tag != SVG_SYMBOL_TAG:
raise CommandParseError("use points to non-symbol")
self.parse_symbol()
def find_commands(node):
"""Find the symbols this node is connected to and return them as Commands"""
@ -76,11 +100,38 @@ def find_commands(node):
for connector in connectors:
try:
commands.append(Command(connector))
except ValueError:
except CommandParseError:
# Parsing the connector failed, meaning it's not actually an Ink/Stitch command.
pass
return commands
def layer_commands(layer, command):
"""Find standalone (unconnected) command symbols in this layer."""
commands = []
for standalone_command in standalone_commands(layer.getroottree().getroot()):
if standalone_command.command == command:
if layer in standalone_command.node.iterancestors():
commands.append(command)
return commands
def standalone_commands(svg):
"""Find all unconnected command symbols in the SVG."""
xpath = ".//svg:use[starts-with(@xlink:href, '#inkstitch_')]"
symbols = svg.xpath(xpath, namespaces=inkex.NSS)
commands = []
for symbol in symbols:
try:
commands.append(StandaloneCommand(symbol))
except CommandParseError:
pass
return commands
def is_command(node):
return CONNECTION_START in node.attrib or CONNECTION_END in node.attrib

Wyświetl plik

@ -7,5 +7,6 @@ from input import Input
from output import Output
from zip import Zip
from flip import Flip
from commands import Commands
from object_commands import ObjectCommands
from layer_commands import LayerCommands
from convert_to_satin import ConvertToSatin

Wyświetl plik

@ -7,7 +7,7 @@ from collections import MutableMapping
from ..svg.tags import *
from ..elements import AutoFill, Fill, Stroke, SatinColumn, Polyline, EmbroideryElement
from ..utils import cache
from ..commands import is_command
from ..commands import is_command, layer_commands
SVG_METADATA_TAG = inkex.addNS("metadata", "svg")
@ -110,39 +110,40 @@ class InkstitchExtension(inkex.Effect):
inkex.errormsg(_("No embroiderable paths found in document."))
inkex.errormsg(_("Tip: use Path -> Object to Path to convert non-paths."))
def descendants(self, node):
def descendants(self, node, selected=False):
nodes = []
element = EmbroideryElement(node)
if element.has_command('ignore_object'):
return []
if node.tag == SVG_GROUP_TAG and node.get(INKSCAPE_GROUPMODE) == "layer":
if layer_commands(node, "ignore_layer"):
return []
if element.has_style('display') and element.get_style('display') is None:
return []
if node.tag == SVG_DEFS_TAG:
return []
for child in node:
nodes.extend(self.descendants(child))
if self.selected:
if node.get("id") in self.selected:
selected = True
else:
# if the user didn't select anything that means we process everything
selected = True
if node.tag in EMBROIDERABLE_TAGS:
for child in node:
nodes.extend(self.descendants(child, selected))
if selected and node.tag in EMBROIDERABLE_TAGS:
nodes.append(node)
return nodes
def get_nodes(self):
"""Get all XML nodes, or just those selected
effect is an instance of a subclass of inkex.Effect.
"""
if self.selected:
nodes = []
for node in self.document.getroot().iter():
if node.get("id") in self.selected:
nodes.extend(self.descendants(node))
else:
nodes = self.descendants(self.document.getroot())
return nodes
return self.descendants(self.document.getroot())
def detect_classes(self, node):
if node.tag == SVG_POLYLINE_TAG:

Wyświetl plik

@ -1,23 +1,14 @@
import os
import sys
import inkex
import simpletransform
import cubicsuperpath
from copy import deepcopy
from random import random
from shapely import geometry as shgeo
from .base import InkstitchExtension
from ..i18n import _
from ..elements import SatinColumn
from ..utils import get_bundled_dir, cache
from ..svg.tags import SVG_DEFS_TAG, SVG_GROUP_TAG, SVG_USE_TAG, SVG_PATH_TAG, INKSCAPE_GROUPMODE, XLINK_HREF, CONNECTION_START, CONNECTION_END, CONNECTOR_TYPE
from ..svg import get_correction_transform
from ..svg.tags import SVG_DEFS_TAG
class Commands(InkstitchExtension):
COMMANDS = ["fill_start", "fill_end", "stop", "trim"]
class CommandsExtension(InkstitchExtension):
def __init__(self, *args, **kwargs):
InkstitchExtension.__init__(self, *args, **kwargs)
for command in self.COMMANDS:
@ -47,100 +38,3 @@ class Commands(InkstitchExtension):
path = "./*[@id='inkstitch_%s']" % command
if self.defs.find(path) is None:
self.defs.append(deepcopy(self.symbol_defs.find(path)))
def add_connector(self, symbol, element):
# I'd like it if I could position the connector endpoint nicely but inkscape just
# moves it to the element's center immediately after the extension runs.
start_pos = (symbol.get('x'), symbol.get('y'))
end_pos = element.shape.centroid
path = inkex.etree.Element(SVG_PATH_TAG,
{
"id": self.uniqueId("connector"),
"d": "M %s,%s %s,%s" % (start_pos[0], start_pos[1], end_pos.x, end_pos.y),
"style": "stroke:#000000;stroke-width:1px;stroke-opacity:0.5;fill:none;",
"transform": get_correction_transform(symbol),
CONNECTION_START: "#%s" % symbol.get('id'),
CONNECTION_END: "#%s" % element.node.get('id'),
CONNECTOR_TYPE: "polyline",
}
)
symbol.getparent().insert(symbol.getparent().index(symbol), path)
def get_command_pos(self, element, index, total):
# Put command symbols 30 pixels out from the shape, spaced evenly around it.
# get a line running 30 pixels out from the shape
outline = element.shape.buffer(30).exterior
# pick this item's spot arond the outline and perturb it a bit to avoid
# stacking up commands if they run the extension multiple times
position = index / float(total)
position += random() * 0.1
return outline.interpolate(position, normalized=True)
def remove_legacy_param(self, element, command):
if command == "trim" or command == "stop":
# If they had the old "TRIM after" or "STOP after" attributes set,
# automatically delete them. THe new commands will do the same
# thing.
#
# If we didn't delete these here, then things would get confusing.
# If the user were to delete a "trim" symbol added by this extension
# but the "embroider_trim_after" attribute is still set, then the
# trim would keep happening.
attribute = "embroider_%s_after" % command
if attribute in element.node.attrib:
del element.node.attrib[attribute]
def add_command(self, element, commands):
for i, command in enumerate(commands):
self.remove_legacy_param(element, command)
pos = self.get_command_pos(element, i, len(commands))
symbol = inkex.etree.SubElement(element.node.getparent(), SVG_USE_TAG,
{
"id": self.uniqueId("use"),
XLINK_HREF: "#inkstitch_%s" % command,
"height": "100%",
"width": "100%",
"x": str(pos.x),
"y": str(pos.y),
"transform": get_correction_transform(element.node)
}
)
self.add_connector(symbol, element)
def effect(self):
if not self.get_elements():
return
if not self.selected:
inkex.errormsg(_("Please select one or more objects to which to attach commands."))
return
self.svg = self.document.getroot()
commands = [command for command in self.COMMANDS if getattr(self.options, command)]
if not commands:
inkex.errormsg(_("Please choose one or more commands to attach."))
return
for command in commands:
self.ensure_symbol(command)
# Each object (node) in the SVG may correspond to multiple Elements of different
# types (e.g. stroke + fill). We only want to process each one once.
seen_nodes = set()
for element in self.elements:
if element.node not in seen_nodes:
self.add_command(element, commands)
seen_nodes.add(element.node)

Wyświetl plik

@ -0,0 +1,48 @@
import os
import sys
import inkex
from .commands import CommandsExtension
from ..i18n import _
from ..svg.tags import SVG_USE_TAG, XLINK_HREF
from ..svg import get_correction_transform
class LayerCommands(CommandsExtension):
COMMANDS = ["ignore_layer"]
def ensure_current_layer(self):
# if no layer is selected, inkex defaults to the root, which isn't
# particularly useful
if self.current_layer is self.document.getroot():
try:
self.current_layer = self.document.xpath(".//svg:g[@inkscape:groupmode='layer']", namespaces=inkex.NSS)[0]
except IndexError:
# No layers at all?? Fine, we'll stick with the default.
pass
def effect(self):
commands = [command for command in self.COMMANDS if getattr(self.options, command)]
if not commands:
inkex.errormsg(_("Please choose one or more commands to add."))
return
self.ensure_current_layer()
correction_transform = get_correction_transform(self.current_layer, child=True)
for i, command in enumerate(commands):
self.ensure_symbol(command)
node = inkex.etree.SubElement(self.current_layer, SVG_USE_TAG,
{
"id": self.uniqueId("use"),
XLINK_HREF: "#inkstitch_%s" % command,
"height": "100%",
"width": "100%",
"x": str(i * 20),
"y": "-10",
"transform": correction_transform
})
namedview = self.document.xpath("//sodipodi:namedview", namespaces=inkex.NSS)

Wyświetl plik

@ -0,0 +1,114 @@
import os
import sys
import inkex
import simpletransform
import cubicsuperpath
from random import random
from shapely import geometry as shgeo
from .commands import CommandsExtension
from ..i18n import _
from ..elements import SatinColumn
from ..svg.tags import SVG_GROUP_TAG, SVG_USE_TAG, SVG_PATH_TAG, INKSCAPE_GROUPMODE, XLINK_HREF, CONNECTION_START, CONNECTION_END, CONNECTOR_TYPE
from ..svg import get_correction_transform
class ObjectCommands(CommandsExtension):
COMMANDS = ["fill_start", "fill_end", "stop", "trim", "ignore_object"]
def add_connector(self, symbol, element):
# I'd like it if I could position the connector endpoint nicely but inkscape just
# moves it to the element's center immediately after the extension runs.
start_pos = (symbol.get('x'), symbol.get('y'))
end_pos = element.shape.centroid
path = inkex.etree.Element(SVG_PATH_TAG,
{
"id": self.uniqueId("connector"),
"d": "M %s,%s %s,%s" % (start_pos[0], start_pos[1], end_pos.x, end_pos.y),
"style": "stroke:#000000;stroke-width:1px;stroke-opacity:0.5;fill:none;",
"transform": get_correction_transform(symbol),
CONNECTION_START: "#%s" % symbol.get('id'),
CONNECTION_END: "#%s" % element.node.get('id'),
CONNECTOR_TYPE: "polyline",
}
)
symbol.getparent().insert(symbol.getparent().index(symbol), path)
def get_command_pos(self, element, index, total):
# Put command symbols 30 pixels out from the shape, spaced evenly around it.
# get a line running 30 pixels out from the shape
outline = element.shape.buffer(30).exterior
# pick this item's spot arond the outline and perturb it a bit to avoid
# stacking up commands if they run the extension multiple times
position = index / float(total)
position += random() * 0.1
return outline.interpolate(position, normalized=True)
def remove_legacy_param(self, element, command):
if command == "trim" or command == "stop":
# If they had the old "TRIM after" or "STOP after" attributes set,
# automatically delete them. THe new commands will do the same
# thing.
#
# If we didn't delete these here, then things would get confusing.
# If the user were to delete a "trim" symbol added by this extension
# but the "embroider_trim_after" attribute is still set, then the
# trim would keep happening.
attribute = "embroider_%s_after" % command
if attribute in element.node.attrib:
del element.node.attrib[attribute]
def add_commands(self, element, commands):
for i, command in enumerate(commands):
self.remove_legacy_param(element, command)
pos = self.get_command_pos(element, i, len(commands))
symbol = inkex.etree.SubElement(element.node.getparent(), SVG_USE_TAG,
{
"id": self.uniqueId("use"),
XLINK_HREF: "#inkstitch_%s" % command,
"height": "100%",
"width": "100%",
"x": str(pos.x),
"y": str(pos.y),
"transform": get_correction_transform(element.node)
}
)
self.add_connector(symbol, element)
def effect(self):
if not self.get_elements():
return
if not self.selected:
inkex.errormsg(_("Please select one or more objects to which to attach commands."))
return
self.svg = self.document.getroot()
commands = [command for command in self.COMMANDS if getattr(self.options, command)]
if not commands:
inkex.errormsg(_("Please choose one or more commands to attach."))
return
for command in commands:
self.ensure_symbol(command)
# Each object (node) in the SVG may correspond to multiple Elements of different
# types (e.g. stroke + fill). We only want to process each one once.
seen_nodes = set()
for element in self.elements:
if element.node not in seen_nodes:
self.add_commands(element, commands)
seen_nodes.add(element.node)

Wyświetl plik

@ -26,16 +26,19 @@ def get_node_transform(node):
return transform
def get_correction_transform(node):
"""Get a transform to apply to new siblings of this SVG node"""
def get_correction_transform(node, child=False):
"""Get a transform to apply to new siblings or children of this SVG node"""
# if we want to place our new nodes in the same group/layer as this node,
# then we'll need to factor in the effects of any transforms set on
# the parents of this node.
# we can ignore the transform on the node itself since it won't apply
# to the objects we add
transform = get_node_transform(node.getparent())
if child:
transform = get_node_transform(node)
else:
# we can ignore the transform on the node itself since it won't apply
# to the objects we add
transform = get_node_transform(node.getparent())
# now invert it, so that we can position our objects in absolute
# coordinates

Wyświetl plik

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2018-08-17 16:07-0400\n"
"POT-Creation-Date: 2018-08-17 16:19-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"
@ -351,14 +351,6 @@ msgstr ""
msgid "Tip: use Path -> Object to Path to convert non-paths."
msgstr ""
#: lib/extensions/commands.py:125
msgid "Please select one or more objects to which to attach commands."
msgstr ""
#: lib/extensions/commands.py:133
msgid "Please choose one or more commands to attach."
msgstr ""
#: lib/extensions/convert_to_satin.py:28
msgid "Please select at least one line to convert to a satin column."
msgstr ""
@ -436,6 +428,18 @@ msgstr ""
msgid "Ink/Stitch Add-ons Installer"
msgstr ""
#: lib/extensions/layer_commands.py:28
msgid "Please choose one or more commands to add."
msgstr ""
#: lib/extensions/object_commands.py:93
msgid "Please select one or more objects to which to attach commands."
msgstr ""
#: lib/extensions/object_commands.py:101
msgid "Please choose one or more commands to attach."
msgstr ""
#: lib/extensions/params.py:244
msgid "These settings will be applied to 1 object."
msgstr ""

Wyświetl plik

@ -26,8 +26,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="4"
inkscape:cx="30.48931"
inkscape:cy="293.08326"
inkscape:cx="141.99463"
inkscape:cy="281.10022"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
@ -45,14 +45,14 @@
inkscape:object-nodes="false"
inkscape:snap-nodes="false">
<inkscape:grid
type="xygrid"
id="grid5001"
units="mm"
spacingx="18.897638"
spacingy="18.897638"
color="#f03fff"
empspacing="2"
opacity="0.1254902"
empspacing="2" />
color="#f03fff"
spacingy="18.897638"
spacingx="18.897638"
units="mm"
id="grid5001"
type="xygrid" />
</sodipodi:namedview>
<title
id="title9425">Ink/Stitch Commands</title>
@ -63,65 +63,140 @@
<title
id="inkstitch_title9427">Fill stitch ending point</title>
<path
id="inkstitch_circle13166"
d="m 9.220113,0.0792309 c -1.9e-6,5.106729 -4.1398241,9.24655 -9.246553,9.24655 -5.1067293,0 -9.2465521,-4.139821 -9.246554,-9.24655 1e-7,-2.452338 0.9741879,-4.804235 2.7082531,-6.538301 1.7340653,-1.734065 4.0859624,-2.708252 6.5383009,-2.708252 5.1067301,0 9.2465528,4.139823 9.246553,9.246553 0,0 0,0 0,0"
inkscape:connector-curvature="0"
style="opacity:1;vector-effect:none;fill:#fafafa;fill-opacity:1;fill-rule:evenodd;stroke:#003399;stroke-width:1.06500006;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.19500017, 3.19500017;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
d="m 9.220113,0.0792309 c -1.9e-6,5.106729 -4.1398241,9.24655 -9.246553,9.24655 -5.1067293,0 -9.2465521,-4.139821 -9.246554,-9.24655 1e-7,-2.452338 0.9741879,-4.804235 2.7082531,-6.538301 1.7340653,-1.734065 4.0859624,-2.708252 6.5383009,-2.708252 5.1067301,0 9.2465528,4.139823 9.246553,9.246553 0,0 0,0 0,0"
id="inkstitch_circle13166" />
<path
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.27154255;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:4.81866985, 4.81866985;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke"
d="m -4.570439,-4.5704391 c 0,0 9.140878,0 9.140878,0 0,0 0,9.14087 0,9.14087 0,0 -9.140878,0 -9.140878,0 0,0 0,-9.14087 0,-9.14087"
inkscape:connector-curvature="0"
id="inkstitch_rect5371-2"
inkscape:connector-curvature="0" />
d="m -4.570439,-4.5704391 c 0,0 9.140878,0 9.140878,0 0,0 0,9.14087 0,9.14087 0,0 -9.140878,0 -9.140878,0 0,0 0,-9.14087 0,-9.14087"
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.27154255;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:4.81866985, 4.81866985;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke" />
</symbol>
<symbol
id="inkstitch_trim">
<title
id="inkstitch_title9282">Trim the thread after sewing this object.</title>
<path
id="inkstitch_circle13405"
d="m 9.2465284,-8.6e-6 c 1.8e-6,2.452339 -0.9741847,4.804237 -2.7082493,6.538304 C 4.8042146,8.2723614 2.4523174,9.2465504 -2.1625959e-5,9.2465514 -2.4523623,9.2465534 -4.8042621,8.2723654 -6.5383288,6.5382984 -8.2723956,4.8042314 -9.2465834,2.4523324 -9.2465816,-8.6e-6 c 6e-7,-2.452339 0.9741895,-4.804237 2.708256,-6.538301 1.7340665,-1.734065 4.0859648,-2.708252 6.538303974041,-2.70825 C 5.1067066,-9.2465576 9.2465271,-5.1067366 9.2465284,-8.6e-6 c 0,0 0,0 0,0"
inkscape:connector-curvature="0"
style="opacity:1;vector-effect:none;fill:#fafafa;fill-opacity:1;fill-rule:evenodd;stroke:#003399;stroke-width:1.06500006;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.19500017, 3.19500017;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
d="m 9.2465284,-8.6e-6 c 1.8e-6,2.452339 -0.9741847,4.804237 -2.7082493,6.538304 C 4.8042146,8.2723614 2.4523174,9.2465504 -2.1625959e-5,9.2465514 -2.4523623,9.2465534 -4.8042621,8.2723654 -6.5383288,6.5382984 -8.2723956,4.8042314 -9.2465834,2.4523324 -9.2465816,-8.6e-6 c 6e-7,-2.452339 0.9741895,-4.804237 2.708256,-6.538301 1.7340665,-1.734065 4.0859648,-2.708252 6.538303974041,-2.70825 C 5.1067066,-9.2465576 9.2465271,-5.1067366 9.2465284,-8.6e-6 c 0,0 0,0 0,0"
id="inkstitch_circle13405" />
<path
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#050505;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.41421342;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m -3.0000256,-5.9834096 c -1.30575,0 -2.375,1.06924 -2.375,2.375 0,1.30575 1.06925,2.375 2.375,2.375 0.58687,0 1.11944,-0.22369 1.53516,-0.58007 0,0 0.61717997,1.62109 0.61717997,1.62109 0,0 -2.29881997,6.01758 -2.29881997,6.01758 0.98655,-0.12511 1.23728,-0.26171 1.67382,-0.97461 0,0 1.33007997,-3.18945 1.33007997,-3.18945 0,0 1.23633003,3.25 1.23633003,3.25 0.23227,0.77906 0.84315,0.79218 1.57813,1.07226 0,0 -2.05469003,-6.14258 -2.05469003,-6.14258 0,0 0.73047003,-1.75 0.73047003,-1.75 0.42849,0.41682 1.01136,0.67578 1.65234,0.67578 1.30575,0 2.375,-1.06925 2.375,-2.375 0,-1.30576 -1.06925,-2.375 -2.375,-2.375 -1.06233,0 -1.95701,0.71265 -2.25781003,1.67969 0,0 -0.0117,-0.0156 -0.0117,-0.0156 0,0 -0.80274,2.10156 -0.80274,2.10156 0,0 -0.59179,-1.76562 -0.59179,-1.76562 -0.18242,-1.12808 -1.15864997,-2 -2.33593997,-2 0,0 -2e-5,-3e-5 -2e-5,-3e-5 m 0,1 c 0.76531,0 1.375,0.60968 1.375,1.375 0,0.76531 -0.60969,1.375 -1.375,1.375 -0.76531,0 -1.375,-0.60969 -1.375,-1.375 0,-0.76532 0.60969,-1.375 1.375,-1.375 0,0 0,0 0,0 m 6,0 c 0.76531,0 1.375,0.60968 1.375,1.375 0,0.76531 -0.60969,1.375 -1.375,1.375 -0.76531,0 -1.375,-0.60969 -1.375,-1.375 0,-0.76532 0.60969,-1.375 1.375,-1.375 0,0 0,0 0,0"
inkscape:connector-curvature="0"
id="inkstitch_path13416"
inkscape:connector-curvature="0" />
d="m -3.0000256,-5.9834096 c -1.30575,0 -2.375,1.06924 -2.375,2.375 0,1.30575 1.06925,2.375 2.375,2.375 0.58687,0 1.11944,-0.22369 1.53516,-0.58007 0,0 0.61717997,1.62109 0.61717997,1.62109 0,0 -2.29881997,6.01758 -2.29881997,6.01758 0.98655,-0.12511 1.23728,-0.26171 1.67382,-0.97461 0,0 1.33007997,-3.18945 1.33007997,-3.18945 0,0 1.23633003,3.25 1.23633003,3.25 0.23227,0.77906 0.84315,0.79218 1.57813,1.07226 0,0 -2.05469003,-6.14258 -2.05469003,-6.14258 0,0 0.73047003,-1.75 0.73047003,-1.75 0.42849,0.41682 1.01136,0.67578 1.65234,0.67578 1.30575,0 2.375,-1.06925 2.375,-2.375 0,-1.30576 -1.06925,-2.375 -2.375,-2.375 -1.06233,0 -1.95701,0.71265 -2.25781003,1.67969 0,0 -0.0117,-0.0156 -0.0117,-0.0156 0,0 -0.80274,2.10156 -0.80274,2.10156 0,0 -0.59179,-1.76562 -0.59179,-1.76562 -0.18242,-1.12808 -1.15864997,-2 -2.33593997,-2 0,0 -2e-5,-3e-5 -2e-5,-3e-5 m 0,1 c 0.76531,0 1.375,0.60968 1.375,1.375 0,0.76531 -0.60969,1.375 -1.375,1.375 -0.76531,0 -1.375,-0.60969 -1.375,-1.375 0,-0.76532 0.60969,-1.375 1.375,-1.375 0,0 0,0 0,0 m 6,0 c 0.76531,0 1.375,0.60968 1.375,1.375 0,0.76531 -0.60969,1.375 -1.375,1.375 -0.76531,0 -1.375,-0.60969 -1.375,-1.375 0,-0.76532 0.60969,-1.375 1.375,-1.375 0,0 0,0 0,0"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#050505;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.41421342;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
</symbol>
<symbol
id="inkstitch_fill_start">
<title
id="inkstitch_title9432">Fill stitch starting point</title>
<path
id="inkstitch_circle13166-6"
d="m 9.2465269,-2.6e-6 c -1.9e-6,5.106729 -4.1398247,9.24655 -9.246554026709,9.24655 C -5.106756,9.2465474 -9.2465782,5.1067264 -9.2465801,-2.6e-6 c 2e-7,-5.10673 4.1398229,-9.246553 9.246552973291,-9.246553 2.452338526709,0 4.804235626709,0.974187 6.538300926709,2.708252 1.7340652,1.734066 2.708253,4.085963 2.7082531,6.538301 0,0 0,0 0,0"
inkscape:connector-curvature="0"
style="opacity:1;vector-effect:none;fill:#fafafa;fill-opacity:1;fill-rule:evenodd;stroke:#003399;stroke-width:1.06501234;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.19503705, 3.19503705;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
d="m 9.2465269,-2.6e-6 c -1.9e-6,5.106729 -4.1398247,9.24655 -9.246554026709,9.24655 C -5.106756,9.2465474 -9.2465782,5.1067264 -9.2465801,-2.6e-6 c 2e-7,-5.10673 4.1398229,-9.246553 9.246552973291,-9.246553 2.452338526709,0 4.804235626709,0.974187 6.538300926709,2.708252 1.7340652,1.734066 2.708253,4.085963 2.7082531,6.538301 0,0 0,0 0,0"
id="inkstitch_circle13166-6" />
<path
style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.74180555;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
d="m 6.5728129,0.0035574 c 0,0 -10.4514,6.03412 -10.4514,6.03412 0,0 0,-12.06823 0,-12.06823 0,0 10.4514,6.03411 10.4514,6.03411"
inkscape:connector-curvature="0"
id="inkstitch_path4183"
inkscape:connector-curvature="0" />
d="m 6.5728129,0.0035574 c 0,0 -10.4514,6.03412 -10.4514,6.03412 0,0 0,-12.06823 0,-12.06823 0,0 10.4514,6.03411 10.4514,6.03411"
style="opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.74180555;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</symbol>
<symbol
id="inkstitch_stop">
<title
id="inkstitch_title13328">Stop the machine after sewing this object (for applique, etc)</title>
<path
id="inkstitch_circle13330"
d="m 9.2465269,-2.6e-6 c -1.9e-6,5.106729 -4.1398241,9.24655 -9.246553026709,9.24655 C -5.1067554,9.2465474 -9.2465782,5.1067264 -9.2465801,-2.6e-6 c 10e-8,-2.452338 0.9741879,-4.804235 2.7082531,-6.538301 1.7340653,-1.734065 4.0859624,-2.708252 6.538300873291,-2.708252 C 5.106704,-9.2465556 9.2465267,-5.1067326 9.2465269,-2.6e-6 c 0,0 0,0 0,0"
inkscape:connector-curvature="0"
style="opacity:1;vector-effect:none;fill:#fafafa;fill-opacity:1;fill-rule:evenodd;stroke:#003399;stroke-width:1.06501234;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.19503705, 3.19503705;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
d="m 9.2465269,-2.6e-6 c -1.9e-6,5.106729 -4.1398241,9.24655 -9.246553026709,9.24655 C -5.1067554,9.2465474 -9.2465782,5.1067264 -9.2465801,-2.6e-6 c 10e-8,-2.452338 0.9741879,-4.804235 2.7082531,-6.538301 1.7340653,-1.734065 4.0859624,-2.708252 6.538300873291,-2.708252 C 5.106704,-9.2465556 9.2465267,-5.1067326 9.2465269,-2.6e-6 c 0,0 0,0 0,0"
id="inkstitch_circle13330" />
<path
id="inkstitch_path13332"
d="m -3.1690251,-4.6497026 c 0,0 2.51587797,0 2.51587797,0 0,0 0,9.14087 0,9.14087 0,0 -2.51587797,0 -2.51587797,0 0,0 0,-9.14087 0,-9.14087"
inkscape:connector-curvature="0"
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60622311;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:4.81866985, 4.81866985;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke"
d="m -3.1690251,-4.6497026 c 0,0 2.51587797,0 2.51587797,0 0,0 0,9.14087 0,9.14087 0,0 -2.51587797,0 -2.51587797,0 0,0 0,-9.14087 0,-9.14087"
id="inkstitch_path13332" />
<path
inkscape:connector-curvature="0"
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60622311;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:4.81866985, 4.81866985;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke"
d="m 0.83097287,-4.6497026 c 0,0 2.51588003,0 2.51588003,0 0,0 0,9.14087 0,9.14087 0,0 -2.51588003,0 -2.51588003,0 0,0 0,-9.14087 0,-9.14087"
id="inkstitch_path13333" />
</symbol>
<symbol
id="inkstitch_ignore_object">
<title
id="title25366">Ignore object when generating stitch plan</title>
<path
sodipodi:nodetypes="csssscc"
id="inkstitch_path25368"
d="m 9.2465269,-2.6e-6 c -1.9e-6,5.106729 -4.1398241,9.24655 -9.246553026709,9.24655 C -5.1067554,9.2465474 -9.2465782,5.1067264 -9.2465801,-2.6e-6 c 10e-8,-2.452338 0.9741879,-4.804235 2.7082531,-6.538301 1.7340653,-1.734065 4.0859624,-2.708252 6.538300873291,-2.708252 C 5.106704,-9.2465556 9.2465267,-5.1067326 9.2465269,-2.6e-6 v 0"
style="opacity:1;vector-effect:none;fill:#fafafa;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.06501234;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.19503705, 3.19503705;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
id="inkstitch_path13333"
d="m 0.83097287,-4.6497026 c 0,0 2.51588003,0 2.51588003,0 0,0 0,9.14087 0,9.14087 0,0 -2.51588003,0 -2.51588003,0 0,0 0,-9.14087 0,-9.14087"
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.60622311;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:4.81866985, 4.81866985;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke"
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0"
id="inkstitch_path31147"
d="M 5.9670459,-7.182445 -7.5106053,5.8067489 c -0.1726626,0.167055 -0.1205449,0.382287 0.051259,0.540886 0.4472376,0.445359 0.9095461,0.890719 1.44712,1.336078 L 7.8945309,-5.7539019 c -0.444712,-0.4981949 -0.762678,-1.0407509 -1.340795,-1.4922541 -0.129647,-0.1296467 -0.384848,-0.1381312 -0.58669,0.063711 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.36500001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
<path
id="path19494"
sodipodi:nodetypes="cccccc"
inkscape:connector-curvature="0"
inkstitch_id="path31147-7"
d="m -6.3778509,-7.3863915 c -0.4163674,0.3694232 -0.8327348,0.8218035 -1.2491022,1.2906927 L 5.9335939,7.7988319 7.6269529,6.1484419 -5.6213616,-7.4261673 c -0.1943465,-0.1943465 -0.5493765,-0.1905301 -0.7564893,0.039776 z"
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.36500001;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
</symbol>
<symbol
id="inkstitch_ignore_layer">
<title
id="title25366">Ignore entire layer when generating stitch plan</title>
<path
id="inkstitch_path25368-7"
d="M 9.2465269,-4.9265995e-6 C 9.246525,5.1067241 5.1067028,9.2465451 -2.615882e-5,9.2465451 -5.1067554,9.2465451 -9.2465782,5.1067241 -9.2465801,-4.9265995e-6 -9.24658,-2.4523429 -8.2723922,-4.8042399 -6.538327,-6.5383059 c 1.7340653,-1.734065 4.0859624,-2.708252 6.53830084118,-2.708252 5.10673015882,0 9.24655285882,4.139823 9.24655305882,9.2465529734005 0,0 0,0 0,0"
style="opacity:1;vector-effect:none;fill:#fafafa;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.06501234;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:3.19503705, 3.19503705;stroke-dashoffset:0;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
id="use5800"
d="M 4,4.452769 1.46667,1.286102 H -5.5 l 2.53333,3.166667 z"
style="color:#000000;fill:#d5d5d5;fill-opacity:1;fill-rule:evenodd;stroke:#5a5a5a;stroke-width:0.63330007;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
id="use5864"
d="M 4,2.552769 1.46667,-0.613898 H -5.5 l 2.53333,3.166667 z"
style="color:#000000;opacity:0.5;fill:#d5d5d5;fill-opacity:1;fill-rule:evenodd;stroke:#858585;stroke-width:0.63339424;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<g
id="g5771">
<path
id="path8011"
d="m -1.0666699,-5.0472339 h 4.4333333 l 0.6333333,0.6333333 V 0.01943274 L 3.3666634,0.65276607 H -1.0666699 L -1.7000032,0.01943274 V -4.4139006 Z"
style="fill:#aa0000;fill-rule:evenodd;stroke:#aa0000;stroke-width:1px"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1.70000005"
d="m -0.43333658,-3.8755672 c 0,0 3.16666668,3.16666661 3.16666668,3.16666661"
id="path8023"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#ffffff;stroke-width:1.79999995;stroke-linejoin:round"
d="m 2.7333301,-3.8755672 c 0,0 -3.16666668,3.16666661 -3.16666668,3.16666661"
id="path8025"
inkscape:connector-curvature="0" />
</g>
</symbol>
<symbol
id="symbol58771">
<use
xlink:href="#g58668"
id="use58769"
x="0"
y="0"
width="100%"
height="100%" />
</symbol>
</defs>
<metadata
@ -137,53 +212,69 @@
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
style="display:inline"
id="layer1"
style="display:inline">
inkscape:groupmode="layer"
inkscape:label="Layer 1">
<flowRoot
transform="translate(0,58.409503)"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:sans-serif;text-align:start;text-anchor:start;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#050505;stroke-width:1.06500006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.19500017, 3.19500017;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke"
xml:space="preserve"
id="flowRoot37658"
xml:space="preserve"><flowRegion
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.33333302px;line-height:100%;font-family:sans-serif;-inkscape-font-specification:sans-serif;text-align:start;text-anchor:start;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#050505;stroke-width:1.06500006;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3.19500017, 3.19500017;stroke-dashoffset:0;stroke-opacity:1;paint-order:fill markers stroke"
transform="translate(0,58.409503)"><flowRegion
id="flowRegion37660"><rect
y="71.702759"
x="20.75"
height="62.5"
id="rect37662"
width="217.5"
id="rect37662" /></flowRegion><flowPara
style="fill:#000000;fill-opacity:1;stroke:none"
id="flowPara37664">Create symbols carefully! They must be centered about the origin before being converted to a symbol.</flowPara></flowRoot> <use
xlink:href="#inkstitch_fill_end"
height="62.5"
x="20.75"
y="71.702759" /></flowRegion><flowPara
id="flowPara37664"
style="fill:#000000;fill-opacity:1;stroke:none">Create symbols carefully! They must be centered about the origin before being converted to a symbol.</flowPara></flowRoot> <use
transform="translate(37.82169,75.511319)"
height="100%"
width="100%"
y="0"
x="0"
id="use9454"
x="0"
y="0"
width="100%"
height="100%"
transform="translate(37.82169,75.511319)" />
xlink:href="#inkstitch_fill_end" />
<use
xlink:href="#inkstitch_trim"
transform="translate(75.590552,75.590552)"
height="100%"
width="100%"
y="0"
x="0"
id="use9461"
x="0"
y="0"
width="100%"
height="100%"
transform="translate(75.590552,75.590552)" />
xlink:href="#inkstitch_trim" />
<use
xlink:href="#inkstitch_fill_start"
transform="translate(113.38583,75.590552)"
height="100%"
width="100%"
y="0"
x="0"
id="use9468"
x="0"
y="0"
width="100%"
height="100%"
transform="translate(113.38583,75.590552)" />
xlink:href="#inkstitch_fill_start" />
<use
xlink:href="#inkstitch_stop"
transform="translate(151.1811,75.590552)"
height="100%"
width="100%"
y="0"
x="0"
id="use9476"
xlink:href="#inkstitch_stop" />
<use
transform="translate(188.83762,75.41843)"
height="100%"
width="100%"
y="0"
x="0"
id="use31203"
xlink:href="#inkstitch_ignore_object" />
<use
xlink:href="#inkstitch_ignore_layer"
id="use58774"
x="0"
y="0"
width="100%"
height="100%"
transform="translate(151.1811,75.590552)" />
transform="translate(226.77166,75.590554)" />
</g>
</svg>

Przed

Szerokość:  |  Wysokość:  |  Rozmiar: 12 KiB

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 19 KiB