# -*- coding: utf-8 -*- ################################################################################ # iso_.py # import nc_read as nc import re import sys import math ################################################################################ class Parser(nc.Parser): def __init__(self, writer): nc.Parser.__init__(self, writer) # self.pattern_main = re.compile('(\s+|\w(?:[+])?\d*(?:\.\d*)?|\w\#\d+|\(.*?\)|\#\d+\=(?:[+])?\d*(?:\.\d*)?)') # rada self.pattern_main = re.compile( r"(\s+|,|-?\w\+?\d*(?:\.\d*)?|\w#\d+|\(.*?\)|#\d+=\+?\d*(?:\.\d*)?)" ) # self.pattern_main = re.compile('\s+\w') # self.pattern_main = re.compile('(\s+|\w(?:[+])?[+-\w]\d*(?:\.\d*)?|\w\#[+-\w]\d+|\(.*?\)|[\#[+-\w]\d+\=(?:[+])?[+-\w]\d*(?:\.\d*)?)') # self.pattern_main = re.compile('\s\w[\S]\w,\w[+-\w]\d*\w,\w[+-\w]\d*\w,\w[+-\w]\d*') # self.pattern_main = re.compile('(\s|\w(?:)?\d*(?:\.\d*)?|\w\#\d+|\(.*?\)|\#\d+\=(?:)?\d*(?:\.\d*)?)') # self.pattern_main = re.compile(' ') self.a = 0 self.b = 0 self.c = 0 self.f = 0 self.i = 0 self.j = 0 self.k = 0 self.p = 0 self.q = 0 self.r = 0 self.s = 0 self.x = 0 self.y = 0 self.z = 500 self.FS = 1 self.endx = 0 self.endy = 0 self.startx = 0 self.starty = 0 self.x1 = 0 self.y1 = 0 self.dy = 0 self.dx = 0 self.angle = 0 self.SPACE = " " def add_text(self, s, col=None): s.replace("&", "&") s.replace('"', """) s.replace("<", "<") s.replace(">", ">") s += self.SPACE + "\n" if col != None: self.file_out.write('\t\t' + s + " \n") else: self.file_out.write("\t\t" + s + " \n") # def add_text(self, s, col=None): # if (col != None) : self.file_out.write('\t\t'+s+'\n') # else : self.file_out.write('\t\t'+s+'\n') def Parse(self, name, oname=None): self.files_open(name, oname) while self.readline(): self.begin_ncblock() move = False arc = 0 path_col = None col = None if self.line[0] == "C": col = "axis" if self.line[0] == "M" and self.line[1] == "A": col = "feed" if self.line[0] == "/" and self.line[1] == "/": col = "comment" if self.FS == 1 and not (self.line[0] == "S" and self.line[1] == "S") and col == "feed": col = "rapid" self.add_text(self.line, col) # words = self.pattern_main.findall(self.line) words = self.line.split() # print self.line # print ' AAAA ' words[0] = words[0] + self.SPACE print(words) for word in words: col = None # if (word[0] == 'A' or word[0] == 'a'): # col = "axis" # self.a = eval(word[1:]) # move = True # elif (word[0] == 'B' or word[0] == 'b'): # col = "axis" # self.b = eval(word[1:]) # move = True if word == ("C" + self.SPACE): # print words col = "axis" self.startx = self.x self.starty = self.y words[0] = words[0] + self.SPACE words[2] = self.SPACE + words[2] + self.SPACE words[4] = self.SPACE + words[4] + self.SPACE # print 'x,y' # print self.x # print self.y # self.x1=self.x-eval(words[1]) self.x1 = self.x - eval(words[1]) # j=self.y-eval(words[5]) # self.y1=self.y-eval(words[3]) self.y1 = self.y - eval(words[3]) # self.c = eval(word[1:]) # print 'self x,y' # print self.x1 # print self.y1 self.dx = (self.x1) * 1 self.dy = (self.y1) * 0 # print 'x1' # print self.x1 # print 'y1' # print self.y1 ssucin = self.dx + self.dy r = math.sqrt(((self.x1) * (self.x1)) + ((self.y1) * (self.y1))) # print 'skalarny sucin' # print ssucin # print 'r' # print r if ssucin != 0: ratio = ssucin / (r * 1) # print 'ratio' # print ratio angle = math.acos(ratio) * 180 / math.pi if self.y1 < 0: angle = 360 - angle elif self.y1 > 0: angle = +90 elif self.y1 < 0: angle = -90 else: angle = 0 # print words[8] # print 'angles' # print angle # if (i<0 and j<0): angle=180+angle # if (i<0 and j>0): angle=180-angle # if (j>0): angle=-angle # print ('reverzacia') # angle= angle+ eval(words[8]) # print angle self.angle = +angle + eval(words[5]) # print self.angle # if(angle>180): angle=360-angle angle = self.angle * math.pi / 180 # print eval(words[8]) self.endx = eval(words[1]) + (r * math.cos(angle)) # j=eval(words[5])+(r*math.sin(angle)) self.endy = eval(words[3]) + (r * math.sin(angle)) self.x = self.endx self.y = self.endy path_col = "feed" # arc=-eval(words[8])/math.fabs(eval(words[8])) arc = eval(words[5]) / math.fabs(eval(words[5])) # if(arc==-1): arc=0 # arc=-1 # col = "feed" move = True elif word == "P" and words[1] == "L" and words[4] == "F": self.FS = 1 elif word == "P" and words[1] == "L" and words[4] == "N": self.FS = 0 elif word == ("FS" + self.SPACE): self.FS = 1 elif word == ("SS" + self.SPACE): self.FS = 0 elif word == ("MA" + self.SPACE): words[2] = self.SPACE + words[2] + self.SPACE if self.FS == 1: path_col = "rapid" col = "rapid" else: path_col = "feed" col = "feed" self.x = eval(words[1]) # self.y=eval(words[6]) self.y = eval(words[3]) move = True # elif (word == 'G1' or word == 'G01' or word == 'g1' or word == 'g01'): # path_col = "feed" # col = "feed" # elif (word == 'G2' or word == 'G02' or word == 'g2' or word == 'g02' or word == 'G12' or word == 'g12'): # path_col = "feed" # col = "feed" # arc = -1 # elif (word == 'G3' or word == 'G03' or word == 'g3' or word == 'g03' or word == 'G13' or word == 'g13'): # path_col = "feed" # col = "feed" # arc = +1 # elif (word == 'G10' or word == 'g10'): # move = False # elif (word == 'L1' or word == 'l1'): # move = False # elif (word == 'G20'): # col = "prep" # self.set_mode(units=25.4) # elif (word == 'G21'): # col = "prep" # self.set_mode(units=1.0) # elif (word == 'G81' or word == 'g81'): # path_col = "feed" # col = "feed" # elif (word == 'G82' or word == 'g82'): # path_col = "feed" # col = "feed" # elif (word == 'G83' or word == 'g83'): # path_col = "feed" # col = "feed" # elif (word[0] == 'G') : col = "prep" # elif (word[0] == 'I' or word[0] == 'i'): # col = "axis" # self.i = eval(word[1:]) # move = True # elif (word[0] == 'J' or word[0] == 'j'): # col = "axis" # self.j = eval(word[1:]) # move = True # elif (word[0] == 'K' or word[0] == 'k'): # col = "axis" # self.k = eval(word[1:]) # move = True # elif (word[0] == 'M') : col = "misc" # elif (word[0] == 'N') : col = "blocknum" # elif (word[0] == 'O') : col = "program" # elif (word[0] == 'P' or word[0] == 'p'): # col = "axis" # self.p = eval(word[1:]) # move = True # elif (word[0] == 'Q' or word[0] == 'q'): # col = "axis" # self.q = eval(word[1:]) # move = True # elif (word[0] == 'R' or word[0] == 'r'): # col = "axis" # self.r = eval(word[1:]) # move = True # elif (word[0] == 'S' or word[0zypp] == 's'): # col = "axis" # self.s = eval(word[1:]) # move = True # elif (word[0] == 'T') : col = "tool" # elif (word[0] == 'X' or word[0] == 'x'): # col = "axis" # = eval(word[1:]) # move = True # elif (word[0] == 'Y' or word[0] == 'y'): # col = "axis" # self.y = eval(word[1:]) # move = True # elif (word[0] == 'Z' or word[0] == 'z'): # col = "axis" # self.z = eval(word[1:]) # move = True elif word[0] == "(": col = "comment" elif word[0] == "#": col = "variable" elif words[0] == ("//" + self.SPACE): col = "comment" elif words[0] == ("/*" + self.SPACE): col = "comment" # self.add_text(word, col) if move: self.begin_path(path_col) if arc: # self.add_arc(self.x, self.y, 0.0000, self.i, self.j, 0.0000, arc) # self.add_arc(self.i, self.j, 0.0000, eval(words[2])-self.x, eval(words[5])-self.y, 0.0000, arc) # print '' # print eval(words[2])-self.startx # print eval(words[6])-self.starty # self.add_arc(self.endx, self.endy, 0.0000, eval(words[1])-self.startx, eval(words[3])-self.starty, 0.0000, arc) print(arc) self.add_arc( self.endx, self.endy, 0.0000, eval(words[1]) - self.startx, eval(words[3]) - self.starty, 0.0000, 0.0000, arc, ) # self.add_arc(self.x, self.y, 0.0000, self.i, self.j, 0.0000, arc) # self.x=self.i # self.y=self.j else: self.add_line(self.x, self.y) self.end_path() self.end_ncblock() self.files_close()