Comments, small touches
parent
ddec65e50f
commit
38fdf15f73
53
gcview.py
53
gcview.py
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue