################################################################################ # cad_nc_read.py # # Base class for NC code parsing and backplotting # # Dan Falck 2011/01/06 ################################################################################ class Parser: def __init__(self): self.currentx = -1.0 self.currenty = 0.0 self.currentz = 0.0 x,y,z = 0.0,0.0,0.0 self.absolute_flag = True ############################################################################ ## Internals def files_open(self, name, oname=None): if (oname == None ): oname = (name+'.scr') self.file_in = open(name, 'r') self.file_out = open(oname, 'w') def files_close(self): self.file_in.close() self.file_out.write('-linetype set continuous\n') self.file_out.write('\n') self.file_out.close() def readline(self): self.line = self.file_in.readline().rstrip() if (len(self.line)): return True else: return False def write(self, s): self.file_out.write(s) ############################################################################ def end_ncblock(self): self.file_out.write('Delay 0\n') def add_text(self, s, col=None, cdata=False): return def set_mode(self, units=None): #self.file_out.write(' units="'+str(units)+'"') return def set_tool(self, number=None): if (number != None): self.file_out.write('-LAYER New T'+str(number)+'\n') self.file_out.write('-LAYER Set T'+str(number)+'\n') def begin_path(self, col=None): if (col != None): if col == 'rapid': self.file_out.write('-color Red\n') #self.file_out.write('') self.file_out.write('-linetype set dashed\n') self.file_out.write('\n') else: self.file_out.write('-color Green\n') #self.file_out.write('') self.file_out.write('-linetype set continuous\n') self.file_out.write('\n') else : self.file_out.write('\n') def end_path(self): self.file_out.write('\n') def add_line(self, x=None, y=None, z=None, a=None, b=None, c=None): if (x == None and y == None and z == None and a == None and b == None and c == None) : return #self.file_out.write('line %s,%s %s,%s' %(self.currentx,self.currenty,x,y)) if (x == None) : x = self.currentx if (y == None) : y = self.currenty if (z == None) : z = self.currentz self.file_out.write('line %s,%s,%s %s,%s,%s\n' %(self.currentx,self.currenty,self.currentz,x,y,z)) self.currentx = x self.currenty = y self.currentz = z def add_arc(self, x=None, y=None, z=None, i=None, j=None, k=None, r=None, d=None): if (x == None and y == None and z == None and i == None and j == None and k == None and r == None and d == None) : return z = self.currentz if (x == None) : x = self.currentx if (y == None) : y = self.currenty if (z == None) : z = self.currentz if (d == 1): self.file_out.write('arc %s,%s,%s\n' %(self.currentx,self.currenty,self.currentz)) self.file_out.write('c\n') self.file_out.write('%s,%s,%s\n' %(self.currentx+i,self.currenty+j,self.currentz)) self.file_out.write('%s,%s,%s' %(x,y,z)) else: self.file_out.write('arc %s,%s,%s\n' %(x,y,z)) self.file_out.write('c\n') self.file_out.write('%s,%s,%s\n' %(self.currentx+i,self.currenty+j,self.currentz)) self.file_out.write('%s,%s,%s' %(self.currentx,self.currenty,self.currentz)) self.currentx = x self.currenty = y self.currentz = z def incremental(self): self.absolute_flag = False def absolute(self): self.absolute_flag = True