Commit 0c8660cb authored by kliment's avatar kliment

Merge pull request #170 from AxTheB/export

Green is feedrate now
parents 56ca54bc afc3abb4
...@@ -211,7 +211,7 @@ class gcline(object): ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment