From: daid Date: Mon, 7 May 2012 11:51:28 +0000 (+0200) Subject: Generate 1 GCode layer per draw cycle, this keeps the UI responsive during the genera... X-Git-Tag: RC3~12^2~7 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=8a495554d8c8f28a94835aa5eb1259be2a2208fc;p=cura.git Generate 1 GCode layer per draw cycle, this keeps the UI responsive during the generation of display lists with huge GCode files. --- diff --git a/Cura/gui/opengl.py b/Cura/gui/opengl.py index 0507f566..e5204cff 100644 --- a/Cura/gui/opengl.py +++ b/Cura/gui/opengl.py @@ -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: diff --git a/Cura/gui/preview3d.py b/Cura/gui/preview3d.py index 71a2638b..190cbb09 100644 --- a/Cura/gui/preview3d.py +++ b/Cura/gui/preview3d.py @@ -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: - glNewList(self.gcodeDisplayList + curLayerNum, GL_COMPILE) - opengl.DrawGCodeLayer(layer) - glEndList() + 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,7 +478,8 @@ 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]) - glCallList(self.gcodeDisplayList + i) + if self.gcodeDisplayListMade == None or self.gcodeDisplayListMade[i]: + glCallList(self.gcodeDisplayList + i) glDisable(GL_LIGHTING) glDisable(GL_COLOR_MATERIAL) glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, [0.2, 0.2, 0.2, 1.0]);