chiark / gitweb /
Slow the GCode layers while loading instead of first loading the full GCode file.
authordaid303 <daid303@gmail.com>
Thu, 28 Feb 2013 08:48:10 +0000 (09:48 +0100)
committerdaid303 <daid303@gmail.com>
Thu, 28 Feb 2013 08:48:10 +0000 (09:48 +0100)
Cura/gui/preview3d.py
Cura/gui/util/opengl.py

index 046f70c9523fe9923797f1916387cd585cc58f0e..e19876df38c4a9f1d1a849def50181ff33af12af 100644 (file)
@@ -392,12 +392,10 @@ class previewPanel(wx.Panel):
                
                if os.path.isfile(self.gcodeFilename) and self.gcodeFileTime != os.stat(self.gcodeFilename).st_mtime:
                        self.gcodeFileTime = os.stat(self.gcodeFilename).st_mtime
-                       gcode = gcodeInterpreter.gcode()
-                       gcode.progressCallback = self.loadProgress
-                       gcode.load(self.gcodeFilename)
-                       self.gcodeDirty = False
-                       self.gcode = gcode
                        self.gcodeDirty = True
+                       self.gcode = gcodeInterpreter.gcode()
+                       self.gcode.progressCallback = self.loadProgress
+                       self.gcode.load(self.gcodeFilename)
 
                        errorList = []
                        for line in open(self.gcodeFilename, "rt"):
@@ -415,6 +413,11 @@ class previewPanel(wx.Panel):
                wx.CallAfter(self.checkReloadFileTimer.Start, 1000)
        
        def loadProgress(self, progress):
+               if self.layerSelect.getValue() == self.layerSelect.getMaxValue():
+                       self.layerSelect.setRange(1, len(self.gcode.layerList) - 1)
+                       self.layerSelect.setValue(self.layerSelect.getMaxValue())
+               else:
+                       self.layerSelect.setRange(1, len(self.gcode.layerList) - 1)
                return self.abortLoading
 
        def OnResetAll(self, e = None):
@@ -660,10 +663,12 @@ class PreviewGLCanvas(openglGui.glGuiPanel):
                                self.gcodeDisplayListMade = 0
 
                        if self.gcodeDisplayListMade < len(self.parent.gcode.layerList):
-                               glNewList(self.gcodeDisplayList + self.gcodeDisplayListMade, GL_COMPILE)
-                               opengl.DrawGCodeLayer(self.parent.gcode.layerList[self.gcodeDisplayListMade])
-                               glEndList()
-                               self.gcodeDisplayListMade += 1
+                               gcodeGenStartTime = time.time()
+                               while time.time() - gcodeGenStartTime < 0.1 and self.gcodeDisplayListMade < len(self.parent.gcode.layerList):
+                                       glNewList(self.gcodeDisplayList + self.gcodeDisplayListMade, GL_COMPILE)
+                                       opengl.DrawGCodeLayer(self.parent.gcode.layerList[self.gcodeDisplayListMade])
+                                       glEndList()
+                                       self.gcodeDisplayListMade += 1
                                wx.CallAfter(self.Refresh)
                
                glPushMatrix()
index 87d8508032da1690d49890a37d0941959e6e40de..17621e18139c8a2975df2e68face9dca5a5ca29b 100644 (file)
@@ -4,6 +4,7 @@ from __future__ import absolute_import
 import math
 import numpy
 import wx
+import time
 
 from Cura.util import meshLoader
 from Cura.util import util3d