68 lines
1.8 KiB
Python
68 lines
1.8 KiB
Python
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)"
|
|
|