kopia lustrzana https://github.com/inkstitch/inkstitch
embroider_input.py: input extension to read embroidery formats
rodzic
69c64bf3a7
commit
dfbe6f9c0f
|
|
@ -0,0 +1,19 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import sys
|
||||
|
||||
sys.path.append('embroidermodder/experimental/python/binding')
|
||||
from libembroidery import *
|
||||
|
||||
formatList = embFormatList_create()
|
||||
curFormat = formatList
|
||||
while(curFormat):
|
||||
extension = embFormat_extension(curFormat)
|
||||
description = embFormat_description(curFormat)
|
||||
writerState = embFormat_readerState(curFormat)
|
||||
|
||||
if writerState.strip() and embFormat_type(curFormat) != EMBFORMAT_OBJECTONLY:
|
||||
print extension
|
||||
|
||||
curFormat = curFormat.next
|
||||
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
import sys
|
||||
from libembroidery import *
|
||||
from inkex import etree
|
||||
import inkex
|
||||
from inkstitch import PIXELS_PER_MM, _
|
||||
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)
|
||||
|
||||
dimensions = stitch_plan.dimensions
|
||||
svg = etree.Element("svg", nsmap=inkex.NSS, attrib=
|
||||
{
|
||||
"width": "%s" % dimensions[0],
|
||||
"height": "%s" % dimensions[1],
|
||||
"viewBox": "0 0 %s %s" % dimensions,
|
||||
})
|
||||
render_stitch_plan(svg, stitch_plan)
|
||||
|
||||
print etree.tostring(svg)
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main(*sys.argv[1:]))
|
||||
|
|
@ -96,11 +96,22 @@ class StitchPlan(object):
|
|||
def num_stitches(self):
|
||||
return sum(block.num_stitches for block in self)
|
||||
|
||||
@property
|
||||
def dimensions(self):
|
||||
color_block_bounding_boxes = [cb.bounding_box for cb in self]
|
||||
minx = min(bb[0] for bb in color_block_bounding_boxes)
|
||||
miny = min(bb[1] for bb in color_block_bounding_boxes)
|
||||
maxx = max(bb[2] for bb in color_block_bounding_boxes)
|
||||
maxy = max(bb[3] for bb in color_block_bounding_boxes)
|
||||
|
||||
import sys; print >> sys.stderr, color_block_bounding_boxes, minx, miny, maxx, maxy
|
||||
|
||||
return (maxx - minx, maxy - miny)
|
||||
|
||||
@property
|
||||
def dimensions_mm(self):
|
||||
# TODO: implement this. Should do a bounding box calculation and
|
||||
# convert to millimeters.
|
||||
return ""
|
||||
dimensions = self.dimensions
|
||||
return (dimensions[0] / PIXELS_PER_MM, dimensions[1] / PIXELS_PER_MM)
|
||||
|
||||
|
||||
class ColorBlock(object):
|
||||
|
|
@ -196,3 +207,12 @@ class ColorBlock(object):
|
|||
|
||||
def replace_stitches(self, stitches):
|
||||
self.stitches = stitches
|
||||
|
||||
@property
|
||||
def bounding_box(self):
|
||||
minx = min(stitch.x for stitch in self)
|
||||
miny = min(stitch.y for stitch in self)
|
||||
maxx = max(stitch.x for stitch in self)
|
||||
maxy = max(stitch.y for stitch in self)
|
||||
|
||||
return minx, miny, maxx, maxy
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<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">inkex.py</dependency>
|
||||
<input>
|
||||
<extension>.{{ format }}</extension>
|
||||
<mimetype>application/x-embroidery-{{ format }}</mimetype>
|
||||
<_filetypename>{{ description }} (.{{ format }})</_filetypename>
|
||||
<_filetypetooltip>convert {{ format | upper }} file to Ink/Stitch manual-stitch paths</_filetypetooltip>
|
||||
</input>
|
||||
<script>
|
||||
<command reldir="extensions" interpreter="python">embroider_input.py</command>
|
||||
</script>
|
||||
</inkscape-extension>
|
||||
|
||||
Ładowanie…
Reference in New Issue