Code

Adding minimal dxf output as a python extension. Converts path segments to splines...
authoracspike <acspike@users.sourceforge.net>
Sun, 29 Jan 2006 15:03:14 +0000 (15:03 +0000)
committeracspike <acspike@users.sourceforge.net>
Sun, 29 Jan 2006 15:03:14 +0000 (15:03 +0000)
share/extensions/Makefile.am
share/extensions/dxf_outlines.inx [new file with mode: 0644]
share/extensions/dxf_outlines.py [new file with mode: 0755]

index 2e32312ca84b0cde5773e428ed7e524f0bfd535a..67d86bca8b640bcce0153b5209cd8d55c6363ac5 100644 (file)
@@ -44,7 +44,8 @@ extensions = \
        ps2dxf.sh \
        embedimage.py \
        extractimage.py \
-       svg_and_media_zip_output.py
+       svg_and_media_zip_output.py \
+       dxf_outlines.py
 
 otherstuff =
 
@@ -84,7 +85,8 @@ modules = \
        dxf_input.inx \
        embedimage.inx \
        extractimage.inx \
-       svg_and_media_zip_output.inx
+       svg_and_media_zip_output.inx \
+       dxf_outlines.py
 
 extension_SCRIPTS = \
        $(extensions)
diff --git a/share/extensions/dxf_outlines.inx b/share/extensions/dxf_outlines.inx
new file mode 100644 (file)
index 0000000..cc8d1a1
--- /dev/null
@@ -0,0 +1,18 @@
+<inkscape-extension>
+    <_name>Dxf Outlines</_name>
+    <id>org.ekips.output.dxf_outlines</id>
+       <dependency type="extension">org.inkscape.output.svg.inkscape</dependency>
+       <dependency type="executable" location="extensions">dxf_outlines.py</dependency>
+       <dependency type="executable" location="extensions">inkex.py</dependency>
+    <output>
+                <extension>.dxf</extension>
+                <mimetype>application/x-dxf</mimetype>
+                <_filetypename>Path outlines converted to DXF splines (*.DXF)</_filetypename>
+                <_filetypetooltip>Path outlines converted to DXF splines</_filetypetooltip>
+                <dataloss>TRUE</dataloss>
+    </output>
+    <script>
+        <command reldir="extensions" interpreter="python">dxf_outlines.py</command>
+        <helper_extension>org.inkscape.output.svg.inkscape</helper_extension>
+    </script>
+</inkscape-extension>
diff --git a/share/extensions/dxf_outlines.py b/share/extensions/dxf_outlines.py
new file mode 100755 (executable)
index 0000000..c73d0da
--- /dev/null
@@ -0,0 +1,62 @@
+#!/usr/bin/env python 
+'''
+Copyright (C) 2005 Aaron Spike, aaron@ekips.org
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+'''
+import inkex, cubicsuperpath
+
+class MyEffect(inkex.Effect):
+        def __init__(self):
+                inkex.Effect.__init__(self)
+               self.dxf = ''
+       def output(self):
+               print self.dxf
+       def dxf_add(self, str):
+               self.dxf += str
+       def dxf_line(self,csp):
+               line = "\n0\nLINE\n8\n2\n62\n4\n10\n%f\n20\n%f\n30\n0\n11\n%f\n21\n%f\n31\n0" % (csp[0][0],csp[0][1],csp[1][0],csp[1][1])
+               self.dxf_add(line)
+       def dxf_spline(self,csp):
+               knots = 8
+               ctrls = 4
+               self.dxf_add("\n  0\nSPLINE\n  5\n43\n  8\n0\n 62\n256\n370\n-1\n  6\nByLayer")
+                self.dxf_add("\n100\nAcDbEntity\n100\nAcDbSpline\n 70\n8\n 71\n3\n 72\n%d\n 73\n%d\n 74\n0" % (knots, ctrls))
+               for i in range(2):
+                       for j in range(4): 
+                               self.dxf_add("\n 40\n%d" % i)
+               for i in csp:
+                        self.dxf_add("\n 10\n%f\n 20\n%f\n 30\n0" % (i[0],i[1]))
+       def effect(self):
+               #References:   Minimum Requirements for Creating a DXF File of a 3D Model By Paul Bourke
+               #              NURB Curves: A Guide for the Uninitiated By Philip J. Schneider
+               self.dxf_add("999\nDXF created by Inkscape\n0\nSECTION\n2\nENTITIES")
+
+               path = '//path'
+               for node in inkex.xml.xpath.Evaluate(path,self.document):
+                       p = cubicsuperpath.parsePath(node.attributes.getNamedItem('d').value)
+                       for sub in p:
+                               for i in range(len(sub)-1):
+                                       s = sub[i]
+                                       e = sub[i+1]
+                                       if s[1] == s[2] and e[0] == e[1]:
+                                               self.dxf_line([s[1],e[1]])
+                                       else:
+                                               self.dxf_spline([s[1],s[2],e[0],e[1]])
+               self.dxf_add("\n0\nENDSEC\n0\nEOF\n")
+                       
+
+e = MyEffect()
+e.affect()