Files
SyncHome/trunk/eagle/hpgl2gcode.py

68 lines
1.8 KiB
Python
Raw Permalink Normal View History

2023-03-09 10:12:40 +00:00
import sys
import re
#open file passed as argument
if len(sys.argv)>1:
f = open(sys.argv[1],'r')
else:
print('usage: python hpgl2code.py inputfile.hpgl > outputfile.gcode')
sys.exit(1)
#decoded commands
#PA x,y; //pen advance xy unit=25um ie 40 units/mm
#PU; //pen up - replace with G1 Z'up' (safe Z heigh constant)
#PD; //pen down - - replace with G1 Z'dn' (engrawing depth constant)
#constants
zup=1 # 5mm should be safe enough
zdn=0 # using 0, for engraving negative values to be used
upm=40.2 # hpgl units per mm (in theory should be 40.2)
epm=0 # extrude per mm - in case I'm trying to plot with PLA
feed="3000" #default feedrate
#init stuff
print "(--------------------------------)"
print "(- HPGL to G-Code Converter -)"
print "(- (C)2016-10-12 - Paolo Iocco) -)"
print "(--------------------------------)"
print ""
print "(CNC Setup)"
print "G21" # units in mm
print "M300 S50 (pen up)"
print "G4 P150 (wait 150ms)"
print "G1 X0.000 Y0.000 F"+feed
print "(Plots a point in 0,0)"
print "M300 S30 (pen down)"
print "G4 P150 (wait 150ms)"
print "M300 S50 (pen up)"
print "G4 P150 (wait 150ms)"
print "(-------------)"
print "(- Start -)"
print "(-------------)"
#process the input file
pa = re.compile('^PA ([0-9]*),([0-9]*);') #regex for parsing PA command
for line in f:
if re.search('^PA',line):
#parse a bit
mpa=pa.match(line);
x=float(mpa.group(1))/upm
y=float(mpa.group(2))/upm
print "G1 X"+"%.3f" % x," Y"+"%.3f" %y," F"+feed
else:
if re.search('^PU',line ):
#print "G1 Z",zup," F"+feed
print "M300 S50 (pen up)"
print "G4 P150 (wait 150ms)"
else:
if re.search('^PD',line ):
#print "G1 Z",zdn," F"+feed
print "M300 S30 (pen down)"
print "G4 P150 (wait 150ms)"
print ""
print "(-----------)"
print "(- End -)"
print "(-----------)"
print "G1 X0.00 Y0.00 F500.0 (Go Home)"