Comments, small touches

master
Václav 'Ax' Hůla 2012-01-25 14:13:12 +01:00
parent ddec65e50f
commit 38fdf15f73
1 changed files with 28 additions and 25 deletions

View File

@ -208,6 +208,7 @@ class gcpoint(object):
class gcline(object): class gcline(object):
"""gcode move line """gcode move line
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()
""" """
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, prev_gcline=None, orgline = False):
if prev_gcline is None: if prev_gcline is None:
@ -283,7 +284,7 @@ class gcline(object):
] ]
def glcolor(self): def glcolor(self):
if self.extrusion_ratio == 0: if self.extrusion_ratio == 0:
return [255,255,255,128,128,128] return [255,255,255,0,0,0]
else: else:
return[255,128,128,128,0,0] return[255,128,128,128,0,0]
@ -292,38 +293,37 @@ def float_from_line(axe, line):
return float(line.split(axe)[1].split(" ")[0]) return float(line.split(axe)[1].split(" ")[0])
class gcview(object): class gcview(object):
"""gcode visualiser""" """gcode visualiser
Holds opengl objects for all layers
"""
def __init__(self, lines, batch, w=0.5, h=0.5): def __init__(self, lines, batch, w=0.5, h=0.5):
print len(lines)
self.sq2 = math.sqrt(2.0) / 2.0
# Create the vertex and normal arrays.
vertices = []
normals = []
#End pos of previous mode #End pos of previous mode
self.prev = gcpoint() self.prev = gcpoint()
# Correction for G92 moves # Correction for G92 moves
self.delta = [0, 0, 0, 0] self.delta = [0, 0, 0, 0]
self.fline = True
#self.vlists = []
self.layers = {} self.layers = {}
t0 = time.time() t0 = time.time()
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)
layertemp = {} layertemp = {}
counter = 0 counter = 0
for line in lines: for line in lines:
layer_name = line.z if line is not None:
if line.z not in self.layers: layer_name = line.z
self.layers[line.z] = pyglet.graphics.Batch() if line.z not in self.layers:
self.layers[line.z].add(2, GL_LINES, None, ("v3f", line.glline()), ("c3B", line.glcolor())) self.layers[line.z] = pyglet.graphics.Batch()
self.layers[line.z].add(2, GL_LINES, None, ("v3f", line.glline()), ("c3B", line.glcolor()))
self.layerlist = self.layers.keys() self.layerlist = self.layers.keys()
self.layerlist.sort() self.layerlist.sort()
t2 = time.time() t2 = time.time()
print "Rendered lines in %fs" % (t2-t1) print "Rendered lines in %fs" % (t2-t1)
def transform(self, line): def transform(self, line):
"""transforms line of gcode into gcline object (or None if its not move)
Tracks coordinates across resets in self.delta
"""
orgline = line orgline = line
line = line.split(";")[0] line = line.split(";")[0]
cur = [None, None, None, None] cur = [None, None, None, None]
@ -801,7 +801,7 @@ class TestGlPanel(GLPanel):
glScalef(*i.scale) glScalef(*i.scale)
#glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.93, 0.37, 0.25, 1)) #glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, vec(0.93, 0.37, 0.25, 1))
glEnable(GL_COLOR_MATERIAL) glEnable(GL_COLOR_MATERIAL)
glLineWidth (0.5) glLineWidth (0.7)
[i.gc.layers[j].draw() for j in i.gc.layerlist if j < i.curlayer] [i.gc.layers[j].draw() for j in i.gc.layerlist if j < i.curlayer]
glLineWidth (3.5) glLineWidth (3.5)
@ -833,19 +833,19 @@ class GCFrame(wx.Frame):
m.scale = [1.0, 1.0, 1.0] m.scale = [1.0, 1.0, 1.0]
m.batch = pyglet.graphics.Batch() m.batch = pyglet.graphics.Batch()
m.gc = gcview([], batch=m.batch) m.gc = gcview([], batch=m.batch)
self.models = {"": m} self.models = {"GCODE": m}
self.l = d() self.l = d()
self.modelindex = 0 self.modelindex = 0
self.GLPanel1 = TestGlPanel(self, size) self.GLPanel1 = TestGlPanel(self, size)
def addfile(self, gcode=[]): def addfile(self, gcode=[]):
self.models[""].gc.delete() self.models["GCODE"].gc.delete()
self.models[""].gc = gcview(gcode, batch=self.models[""].batch) self.models["GCODE"].gc = gcview(gcode, batch=self.models["GCODE"].batch)
self.setlayerindex(None) self.setlayerindex(None)
def clear(self): def clear(self):
self.models[""].gc.delete() self.models["GCODE"].gc.delete()
self.models[""].gc = gcview([], batch=self.models[""].batch) self.models["GCODE"].gc = gcview([], batch=self.models["GCODE"].batch)
def Show(self, arg=True): def Show(self, arg=True):
wx.Frame.Show(self, arg) wx.Frame.Show(self, arg)
@ -857,7 +857,7 @@ class GCFrame(wx.Frame):
#self.initialized = 0 #self.initialized = 0
def setlayerindex(self, z): def setlayerindex(self, z):
m = self.models[""] m = self.models["GCODE"]
mlk = m.gc.layerlist mlk = m.gc.layerlist
if z > 0 and self.modelindex < len(mlk) - 1: if z > 0 and self.modelindex < len(mlk) - 1:
self.modelindex += 1 self.modelindex += 1
@ -874,10 +874,13 @@ def main():
app = wx.App(redirect=False) app = wx.App(redirect=False)
frame = GCFrame(None, wx.ID_ANY, 'Gcode view, shift to move view, mousewheel to set layer', size=(400, 400)) frame = GCFrame(None, wx.ID_ANY, 'Gcode view, shift to move view, mousewheel to set layer', size=(400, 400))
import sys import sys
for gcfile in sys.argv: for filename in sys.argv:
if "gcode" in gcfile: if ".gcode" in filename:
print gcfile frame.addfile(list(open(filename)))
frame.addfile(list(open(gcfile))) elif ".stl" in filename:
#TODO: add stl here
pass
#frame = wx.Frame(None, -1, "GL Window", size=(400, 400)) #frame = wx.Frame(None, -1, "GL Window", size=(400, 400))
#panel = TestGlPanel(frame, size=(300,300)) #panel = TestGlPanel(frame, size=(300,300))
frame.Show(True) frame.Show(True)