Green is feedrate

master
Václav 'Ax' Hůla 2012-01-25 21:58:07 +01:00
parent 6388e31841
commit afc3abb4c4
1 changed files with 39 additions and 16 deletions

View File

@ -211,7 +211,7 @@ class gcline(object):
Once initialised,it knows its position, length and extrusion ratio Once initialised,it knows its position, length and extrusion ratio
Returns lines into gcview batch() Returns lines into gcview batch()
""" """
def __init__(self, x=None, y=None, z=None, e=None, prev_gcline=None, orgline = False): def __init__(self, x=None, y=None, z=None, e=None, f=None, prev_gcline=None, orgline = False):
if prev_gcline is None: if prev_gcline is None:
self.prev_gcline = gcpoint() self.prev_gcline = gcpoint()
else: else:
@ -233,13 +233,15 @@ class gcline(object):
else: else:
self.e = float(e) self.e = float(e)
self.f = f
self.orgline = orgline self.orgline = orgline
self.calc_delta() self.calc_delta()
self.calc_len() self.calc_len()
def __str__(self): def __str__(self):
return u"line from %s,%s,%s to %s,%s,%s with extrusion ratio %s\n%s" % ( return u"line from %s,%s,%s to %s,%s,%s with extrusion ratio %s and feedrate %n\n%s" % (
self.prev_gcline.x, self.prev_gcline.x,
self.prev_gcline.y, self.prev_gcline.y,
self.prev_gcline.z, self.prev_gcline.z,
@ -247,6 +249,7 @@ class gcline(object):
self.y, self.y,
self.z, self.z,
self.extrusion_ratio, self.extrusion_ratio,
self.f,
self.orgline, self.orgline,
) )
@ -283,23 +286,31 @@ class gcline(object):
self.y, self.y,
self.z, self.z,
] ]
def glcolor(self, upper_limit = None, lower_limit = 0): def glcolor(self, upper_limit = None, lower_limit = 0, max_feedrate = 0):
if self.extrusion_ratio == 0: if self.extrusion_ratio == 0:
return [255,255,255,0,0,0] return [255,255,255,0,0,0]
else: else:
blue_color = 0
green_color = 0
if upper_limit is not None: if upper_limit is not None:
if self.extrusion_ratio <= lower_limit: if self.extrusion_ratio <= lower_limit:
color = 0 blue_color = 0
else: else:
color = int ((self.extrusion_ratio - lower_limit) / (upper_limit - lower_limit) * 255) blue_color = int ((self.extrusion_ratio - lower_limit) / (upper_limit - lower_limit) * 255)
else: else:
color = 0 blue_color = 0
if max_feedrate > 0 and self.f > 0:
green_color = int((self.f/max_feedrate) * 255)
if color > 255: if green_color > 255:
color = 255 green_color = 255
if color < 0: if green_color < 0:
color = 0 green_color = 0
return[255,128,color,128,0,color] if blue_color > 255:
blue_color = 255
if blue_color < 0:
blue_color = 0
return[255,green_color,blue_color,128,green_color,blue_color/4]
def float_from_line(axe, line): def float_from_line(axe, line):
@ -316,18 +327,22 @@ class gcview(object):
self.delta = [0, 0, 0, 0] self.delta = [0, 0, 0, 0]
self.layers = {} self.layers = {}
t0 = time.time() t0 = time.time()
self.lastf = 0
lines = [self.transform(i) for i in lines] lines = [self.transform(i) for i in lines]
lines = [i for i in lines if i is not None] lines = [i for i in lines if i is not None]
t1 = time.time() t1 = time.time()
print "transformed %s lines in %fs" % (len(lines), t1- t0) print "transformed %s lines in %fs" % (len(lines), t1- t0)
upper_limit = 0 upper_limit = 0
lower_limit = None lower_limit = None
max_feedrate = 0
for line in lines: for line in lines:
if line.extrusion_ratio and line.length > 0.003: #lines shorter than 0.003 can have large extrusion ratio if line.extrusion_ratio and line.length > 0.005: #lines shorter than 0.003 can have large extrusion ratio
if line.extrusion_ratio > upper_limit: if line.extrusion_ratio > upper_limit:
upper_limit = line.extrusion_ratio upper_limit = line.extrusion_ratio
if lower_limit is None or line.extrusion_ratio < lower_limit: if lower_limit is None or line.extrusion_ratio < lower_limit:
lower_limit = line.extrusion_ratio lower_limit = line.extrusion_ratio
if line.f > max_feedrate:
max_feedrate = line.f
#print upper_limit, lower_limit #print upper_limit, lower_limit
layertemp = {} layertemp = {}
@ -336,7 +351,7 @@ class gcview(object):
layer_name = line.z layer_name = line.z
if line.z not in self.layers: if line.z not in self.layers:
self.layers[line.z] = pyglet.graphics.Batch() self.layers[line.z] = pyglet.graphics.Batch()
self.layers[line.z].add(2, GL_LINES, None, ("v3f", line.glline()), ("c3B", line.glcolor(upper_limit, lower_limit))) self.layers[line.z].add(2, GL_LINES, None, ("v3f", line.glline()), ("c3B", line.glcolor(upper_limit, lower_limit, max_feedrate)))
self.layerlist = self.layers.keys() self.layerlist = self.layers.keys()
self.layerlist.sort() self.layerlist.sort()
t2 = time.time() t2 = time.time()
@ -348,7 +363,7 @@ class gcview(object):
""" """
orgline = line orgline = line
line = line.split(";")[0] line = line.split(";")[0]
cur = [None, None, None, None] cur = [None, None, None, None, None]
if len(line) > 0: if len(line) > 0:
if "G92" in line: if "G92" in line:
#Recalculate delta on G92 (reset) #Recalculate delta on G92 (reset)
@ -384,12 +399,20 @@ class gcview(object):
cur[2] = float_from_line("Z", line) + self.delta[2] cur[2] = float_from_line("Z", line) + self.delta[2]
if("E" in line): if("E" in line):
cur[3] = float_from_line("E", line) + self.delta[3] cur[3] = float_from_line("E", line) + self.delta[3]
if "F" in line:
cur[4] = float_from_line("F", line)
if cur == [None, None, None, None]:
if cur == [None, None, None, None, None]:
return None return None
else: else:
#print cur #print cur
r = gcline(cur[0], cur[1], cur[2], cur[3], self.prev, orgline=orgline) if cur[4] is None:
cur[4] = self.lastf
else:
self.lastf = cur[4]
r = gcline(x=cur[0], y=cur[1], z=cur[2],e=cur[3], f=cur[4], prev_gcline=self.prev, orgline=orgline)
self.prev = r self.prev = r
return r return r
return None return None