# -*- 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()