# convert dxf(origamizer) to svg(inkscape)
# (c) masahiko
# date-written 2008-08-21

import sys
import string

class point:
	def __init__(self, xx, yy):
		self.x = 100.0 * float(xx)
		self.y = 100.0 * float(yy)
	
	def tostring(self):
		s = ' %f %f' % (self.x, self.y)
		return s

def header():
	return '''<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" 
  "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink"
     width="400" height="400" viewBox="-200 -200 400 400">
  <title>svg sample</title>
<defs>
<style type="text/css"><![CDATA[
    .Paper { fill: none; stroke:#888888; }
    .Polygon { fill: #ffffdd; stroke:#aaaaaa; }
    .Mountain { fill: none; stroke:#ff0088; }
    .Valley { fill: none; stroke:#8800ff; }
    .CrimpMountain { fill: none; stroke:#ff8888; }
    .CrimpValley { fill: none; stroke:#8888ff; }
]]></style>
</defs>
'''

def tail():
	return '''</svg>
'''

def dxf2svg(name):
	print 'convert', name, '.dxf to .svg ... ',
	infile = open(name+'.dxf', 'r')
	outfile = open(name+'.svg', 'w')
	outfile.write( header() )
	sw = 0
	while 1:
		temp = infile.readline()
		if temp == '': break
		if string.find(temp, 'POLYLINE') >= 0:
			infile.readline() # 8
			st = infile.readline() # name
			p = []
		elif string.find(temp, 'VERTEX') >= 0:
			infile.readline() # 10
			x = infile.readline()
			infile.readline() # 20
			y = infile.readline()
			po = point(x, y)
			p.append(po)
		elif string.find(temp, 'SEQEND') >= 0:
			outfile.write('<path class="' + st[:-1] + '" ')
			sw = 0
			for po in p:
				if sw == 0:
					outfile.write('d="M' + po.tostring())
					sw = 1
				else:
					outfile.write('L' + po.tostring())
			outfile.write(' Z" />\n')
		elif string.find(temp, 'LINE') >= 0:
			infile.readline() # 8
			st = infile.readline() # name
			infile.readline() # 62
			infile.readline() # 1
			infile.readline() # 10
			x = infile.readline()
			infile.readline() # 20
			y = infile.readline()
			p1 = point(x, y)
			infile.readline() # 11
			x = infile.readline()
			infile.readline() # 21
			y = infile.readline()
			p2 = point(x, y)
			outfile.write('<path class="' + st[:-1] + '" ')
			outfile.write('d="M' + p1.tostring() + ' L' + p2.tostring() + '" />\n')
	outfile.write( tail() )
	infile.close()
	outfile.close()
	print 'done'

# --- command

if len(sys.argv) < 2:
	print 'usage: python dxf2svg.py filename ...'
else:
	for name in sys.argv[1:]:
		dxf2svg(name)
