chiark / gitweb /
Generate 1 GCode layer per draw cycle, this keeps the UI responsive during the genera...
authordaid <daid303@gmail.com>
Mon, 7 May 2012 11:51:28 +0000 (13:51 +0200)
committerdaid <daid303@gmail.com>
Mon, 7 May 2012 11:51:28 +0000 (13:51 +0200)
Cura/gui/opengl.py
Cura/gui/preview3d.py

index 0507f566c929658c8a8168edfdf0556416ecd02d..e5204cff692a070ff16751b9afc53953462e6cb6 100644 (file)
@@ -294,13 +294,6 @@ def DrawGCodeLayer(layer):
                                prevNormal = normal\r
                                prevVv1 = vv1\r
                                prevVv3 = vv3\r
-               \r
-                       #for v in path.list:\r
-                       #       glBegin(GL_TRIANGLE_FAN)\r
-                       #       glVertex3f(v.x, v.y, v.z - 0.001)\r
-                       #       for i in xrange(0, 16+1):\r
-                       #               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)\r
-                       #       glEnd()\r
                else:\r
                        glBegin(GL_LINE_STRIP)\r
                        for v in path.list:\r
index 71a2638b74e36c047acab9f6c004fb9d47e5aafc..190cbb097917de477ca8bd5f918f52640a1b339e 100644 (file)
@@ -372,6 +372,7 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                self.offsetY = 0\r
                self.view3D = True\r
                self.gcodeDisplayList = None\r
+               self.gcodeDisplayListMade = None\r
                self.gcodeDisplayListCount = 0\r
                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]]\r
        \r
@@ -446,13 +447,23 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                self.gcodeDisplayList = glGenLists(len(self.parent.gcode.layerList));\r
                                self.gcodeDisplayListCount = len(self.parent.gcode.layerList)\r
                        self.parent.gcodeDirty = False\r
-                       \r
+                       self.gcodeDisplayListMade = []\r
+                       for idx in xrange(0, len(self.parent.gcode.layerList)):\r
+                               self.gcodeDisplayListMade.append(False)\r
+               \r
+               if self.gcodeDisplayListMade != None:\r
                        curLayerNum = 0\r
                        for layer in self.parent.gcode.layerList:\r
-                               glNewList(self.gcodeDisplayList + curLayerNum, GL_COMPILE)\r
-                               opengl.DrawGCodeLayer(layer)\r
-                               glEndList()\r
+                               if not self.gcodeDisplayListMade[curLayerNum]:\r
+                                       glNewList(self.gcodeDisplayList + curLayerNum, GL_COMPILE)\r
+                                       opengl.DrawGCodeLayer(layer)\r
+                                       glEndList()\r
+                                       self.gcodeDisplayListMade[curLayerNum] = True\r
+                                       self.Refresh()\r
+                                       break\r
                                curLayerNum += 1\r
+                       if curLayerNum == len(self.parent.gcode.layerList):\r
+                               self.gcodeDisplayListMade = None\r
                \r
                if self.parent.gcode != None and (self.viewMode == "GCode" or self.viewMode == "Mixed"):\r
                        glEnable(GL_COLOR_MATERIAL)\r
@@ -467,7 +478,8 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                                                c = 0.1\r
                                glLightfv(GL_LIGHT0, GL_DIFFUSE, [0,0,0,0])\r
                                glLightfv(GL_LIGHT0, GL_AMBIENT, [c,c,c,c])\r
-                               glCallList(self.gcodeDisplayList + i)\r
+                               if self.gcodeDisplayListMade == None or self.gcodeDisplayListMade[i]:\r
+                                       glCallList(self.gcodeDisplayList + i)\r
                        glDisable(GL_LIGHTING)\r
                        glDisable(GL_COLOR_MATERIAL)\r
                        glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, [0.2, 0.2, 0.2, 1.0]);\r