kopia lustrzana https://github.com/vilemduha/blendercam
292 wiersze
10 KiB
Python
292 wiersze
10 KiB
Python
# -*- 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<text col="'+col+'">'+s+' </text>\n')
|
|
else : self.file_out.write('\t\t<text>'+s+' </text>\n')
|
|
#def add_text(self, s, col=None):
|
|
# if (col != None) : self.file_out.write('\t\t<text col="'+col+'">'+s+'</text>\n')
|
|
# else : self.file_out.write('\t\t<text>'+s+'</text>\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()
|