kopia lustrzana https://github.com/vilemduha/blendercam
253 wiersze
8.7 KiB
Python
253 wiersze
8.7 KiB
Python
################################################################################
|
|
# iso_read.py
|
|
#
|
|
# Simple ISO NC code parsing
|
|
#
|
|
# Hirutso Enni, 2009-01-13
|
|
|
|
from . import nclathe_read as nc
|
|
import re
|
|
import sys
|
|
|
|
################################################################################
|
|
|
|
|
|
class Parser(nc.Parser):
|
|
def __init__(self, writer):
|
|
nc.Parser.__init__(self, writer)
|
|
|
|
self.pattern_main = re.compile(
|
|
"([(!;].*|\s+|[a-zA-Z0-9_:](?:[+-])?\d*(?:\.\d*)?|\w\#\d+|\(.*?\)|\#\d+\=(?:[+-])?\d*(?:\.\d*)?)"
|
|
)
|
|
|
|
# if ( or ! or ; at least one space or a letter followed by some character or not followed by a +/- followed by decimal, with a possible decimal point
|
|
# followed by a possible deimcal, or a letter followed by # with a decimal . deimcal
|
|
# add your character here > [(!;] for comments char
|
|
# then look for the 'comment' function towards the end of the file and add another elif
|
|
|
|
def Parse(self, name, oname=None):
|
|
self.files_open(name, oname)
|
|
|
|
# self.begin_ncblock()
|
|
# self.begin_path(None)
|
|
# self.add_line(z=500)
|
|
# self.end_path()
|
|
# self.end_ncblock()
|
|
|
|
path_col = None
|
|
f = None
|
|
arc = 0
|
|
uw = 0
|
|
while self.readline():
|
|
a = None
|
|
b = None
|
|
c = None
|
|
# f = None
|
|
i = None
|
|
j = None
|
|
k = None
|
|
p = None
|
|
q = None
|
|
r = None
|
|
s = None
|
|
x = None
|
|
y = None
|
|
z = None
|
|
u = None
|
|
w = None
|
|
self.begin_ncblock()
|
|
|
|
move = False
|
|
# arc = 0
|
|
# path_col = None
|
|
drill = False
|
|
no_move = False
|
|
|
|
words = self.pattern_main.findall(self.line)
|
|
for word in words:
|
|
col = None
|
|
cdata = False
|
|
if word[0] == "A" or word[0] == "a":
|
|
col = "axis"
|
|
a = eval(word[1:])
|
|
move = True
|
|
elif word[0] == "B" or word[0] == "b":
|
|
col = "axis"
|
|
b = eval(word[1:])
|
|
move = True
|
|
elif word[0] == "C" or word[0] == "c":
|
|
col = "axis"
|
|
c = eval(word[1:])
|
|
move = True
|
|
elif word[0] == "F" or word[0] == "f":
|
|
col = "axis"
|
|
f = eval(word[1:])
|
|
move = True
|
|
elif word == "G0" or word == "G00" or word == "g0" or word == "g00":
|
|
path_col = "rapid"
|
|
col = "rapid"
|
|
arc = 0
|
|
elif word == "G1" or word == "G01" or word == "g1" or word == "g01":
|
|
path_col = "feed"
|
|
col = "feed"
|
|
arc = 0
|
|
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":
|
|
no_move = True
|
|
elif word == "L1" or word == "l1":
|
|
no_move = True
|
|
elif word == "G20" or word == "G70":
|
|
col = "prep"
|
|
self.set_mode(units=25.4)
|
|
elif word == "G21" or word == "G71":
|
|
col = "prep"
|
|
self.set_mode(units=1.0)
|
|
elif word == "G81" or word == "g81":
|
|
drill = True
|
|
no_move = True
|
|
path_col = "feed"
|
|
col = "feed"
|
|
elif word == "G82" or word == "g82":
|
|
drill = True
|
|
no_move = True
|
|
path_col = "feed"
|
|
col = "feed"
|
|
elif word == "G83" or word == "g83":
|
|
drill = True
|
|
no_move = True
|
|
path_col = "feed"
|
|
col = "feed"
|
|
elif word == "G90" or word == "g90":
|
|
self.absolute()
|
|
elif word == "G91" or word == "g91":
|
|
self.incremental()
|
|
elif word[0] == "G":
|
|
col = "prep"
|
|
elif word[0] == "I" or word[0] == "i":
|
|
col = "axis"
|
|
i = eval(word[1:])
|
|
move = True
|
|
elif word[0] == "J" or word[0] == "j":
|
|
col = "axis"
|
|
j = eval(word[1:])
|
|
move = True
|
|
elif word[0] == "K" or word[0] == "k":
|
|
col = "axis"
|
|
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"
|
|
p = eval(word[1:])
|
|
move = True
|
|
elif word[0] == "Q" or word[0] == "q":
|
|
col = "axis"
|
|
q = eval(word[1:])
|
|
move = True
|
|
elif word[0] == "R" or word[0] == "r":
|
|
col = "axis"
|
|
r = eval(word[1:])
|
|
move = True
|
|
elif word[0] == "S" or word[0] == "s":
|
|
col = "axis"
|
|
s = eval(word[1:])
|
|
move = True
|
|
elif word[0] == "T":
|
|
col = "tool"
|
|
self.set_tool(eval(word[1:]))
|
|
elif word[0] == "X" or word[0] == "x":
|
|
col = "axis"
|
|
x = eval(word[1:])
|
|
move = True
|
|
elif word[0] == "Y" or word[0] == "y":
|
|
col = "axis"
|
|
y = eval(word[1:])
|
|
move = True
|
|
elif word[0] == "U" or word[0] == "u":
|
|
col = "axis"
|
|
u = eval(word[1:])
|
|
move = True
|
|
uw = 1
|
|
|
|
elif word[0] == "W" or word[0] == "w":
|
|
col = "axis"
|
|
w = eval(word[1:])
|
|
move = True
|
|
uw = 1
|
|
|
|
elif word[0] == "Z" or word[0] == "z":
|
|
col = "axis"
|
|
z = eval(word[1:])
|
|
move = True
|
|
elif word[0] == "(":
|
|
(col, cdata) = ("comment", True)
|
|
elif word[0] == "!":
|
|
(col, cdata) = ("comment", True)
|
|
elif word[0] == ";":
|
|
(col, cdata) = ("comment", True)
|
|
elif word[0] == "#":
|
|
col = "variable"
|
|
elif word[0] == ":":
|
|
col = "blocknum"
|
|
elif ord(word[0]) <= 32:
|
|
cdata = True
|
|
self.add_text(word, col, cdata)
|
|
|
|
if drill:
|
|
self.begin_path("rapid")
|
|
self.add_line(x, y, r)
|
|
self.end_path()
|
|
|
|
self.begin_path("feed")
|
|
self.add_line(x, y, z)
|
|
self.end_path()
|
|
|
|
self.begin_path("feed")
|
|
self.add_line(x, y, r)
|
|
self.end_path()
|
|
else:
|
|
if move and not no_move:
|
|
self.begin_path(path_col)
|
|
if arc == -1:
|
|
self.add_arc(x, y, z, i, j, k, r, arc)
|
|
elif arc == 1:
|
|
# self.add_arc(x, y, z, i, j, k, -r, arc) #if you want to use arcs with R values uncomment the first part of this line and comment the next one
|
|
self.add_arc(x, y, z, i, j, k, r, arc)
|
|
# else : self.add_line(x, y, z, a, b, c)
|
|
elif uw == 1:
|
|
self.add_lathe_increment_line(u, w)
|
|
|
|
else:
|
|
self.add_line(x, y, z, a, b, c)
|
|
self.end_path()
|
|
|
|
self.end_ncblock()
|
|
|
|
self.files_close()
|