Generate 1 GCode layer per draw cycle, this keeps the UI responsive during the generation of display lists with huge GCode files.

This commit is contained in:
daid 2012-05-07 13:51:28 +02:00
parent 58b4a48162
commit 8a495554d8
2 changed files with 17 additions and 12 deletions

View file

@ -294,13 +294,6 @@ def DrawGCodeLayer(layer):
prevNormal = normal
prevVv1 = vv1
prevVv3 = vv3
#for v in path.list:
# glBegin(GL_TRIANGLE_FAN)
# glVertex3f(v.x, v.y, v.z - 0.001)
# for i in xrange(0, 16+1):
# glVertex3f(v.x + math.cos(math.pi*2/16*i) * lineWidth, v.y + math.sin(math.pi*2/16*i) * lineWidth, v.z - 0.01)
# glEnd()
else:
glBegin(GL_LINE_STRIP)
for v in path.list:

View file

@ -372,6 +372,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
self.offsetY = 0
self.view3D = True
self.gcodeDisplayList = None
self.gcodeDisplayListMade = None
self.gcodeDisplayListCount = 0
self.objColor = [[1.0, 0.8, 0.6, 1.0], [0.2, 1.0, 0.1, 1.0], [1.0, 0.2, 0.1, 1.0], [0.1, 0.2, 1.0, 1.0]]
@ -446,13 +447,23 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
self.gcodeDisplayList = glGenLists(len(self.parent.gcode.layerList));
self.gcodeDisplayListCount = len(self.parent.gcode.layerList)
self.parent.gcodeDirty = False
self.gcodeDisplayListMade = []
for idx in xrange(0, len(self.parent.gcode.layerList)):
self.gcodeDisplayListMade.append(False)
if self.gcodeDisplayListMade != None:
curLayerNum = 0
for layer in self.parent.gcode.layerList:
if not self.gcodeDisplayListMade[curLayerNum]:
glNewList(self.gcodeDisplayList + curLayerNum, GL_COMPILE)
opengl.DrawGCodeLayer(layer)
glEndList()
self.gcodeDisplayListMade[curLayerNum] = True
self.Refresh()
break
curLayerNum += 1
if curLayerNum == len(self.parent.gcode.layerList):
self.gcodeDisplayListMade = None
if self.parent.gcode != None and (self.viewMode == "GCode" or self.viewMode == "Mixed"):
glEnable(GL_COLOR_MATERIAL)
@ -467,6 +478,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
c = 0.1
glLightfv(GL_LIGHT0, GL_DIFFUSE, [0,0,0,0])
glLightfv(GL_LIGHT0, GL_AMBIENT, [c,c,c,c])
if self.gcodeDisplayListMade == None or self.gcodeDisplayListMade[i]:
glCallList(self.gcodeDisplayList + i)
glDisable(GL_LIGHTING)
glDisable(GL_COLOR_MATERIAL)