From 6c1ded0536df8196192ac49ad850313258e6c1b4 Mon Sep 17 00:00:00 2001 From: daid303 Date: Fri, 31 May 2013 10:38:50 +0200 Subject: [PATCH] Only load the GCode when you are viewing the layer view, which keeps the performance of the normal view higher. Also show an indicator that we are loading GCode. --- Cura/gui/sceneView.py | 35 ++++++++++++++++++++--------------- Cura/util/gcodeInterpreter.py | 3 ++- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/Cura/gui/sceneView.py b/Cura/gui/sceneView.py index bb7b7ad6..13a0758a 100644 --- a/Cura/gui/sceneView.py +++ b/Cura/gui/sceneView.py @@ -38,6 +38,7 @@ class SceneView(openglGui.glGuiPanel): self._scene = objectScene.Scene() self._gcode = None self._gcodeVBOs = [] + self._gcodeLoadThread = None self._objectShader = None self._focusObj = None self._selectedObj = None @@ -138,10 +139,7 @@ class SceneView(openglGui.glGuiPanel): self.glReleaseList.append(vbo) self._gcodeVBOs = [] self._gcode = gcodeInterpreter.gcode() - self._gcode.progressCallback = self._gcodeLoadCallback - self._thread = threading.Thread(target=self._loadGCode, args=(gcodeFilename,)) - self._thread.daemon = True - self._thread.start() + self._gcodeFilename = gcodeFilename self.printButton.setBottomText('') self.viewSelection.setValue(4) self.printButton.setDisabled(False) @@ -268,7 +266,7 @@ class SceneView(openglGui.glGuiPanel): def OnViewChange(self): if self.viewSelection.getValue() == 4: self.viewMode = 'gcode' - if self._gcode is not None: + if self._gcode is not None and self._gcode.layerList is not None: self.layerSelect.setRange(1, len(self._gcode.layerList) - 1) self.layerSelect.setValue(len(self._gcode.layerList) - 1) self._selectObject(None) @@ -431,18 +429,14 @@ class SceneView(openglGui.glGuiPanel): else: self.printButton.setBottomText('%s\n%s' % (self._slicer.getPrintTime(), self._slicer.getFilamentAmount())) self._gcode = gcodeInterpreter.gcode() - self._gcode.progressCallback = self._gcodeLoadCallback - self._thread = threading.Thread(target=self._loadGCode) - self._thread.daemon = True - self._thread.start() + self._gcodeFilename = self._slicer.getGCodeFilename() else: self.printButton.setBottomText('') self.QueueRefresh() - def _loadGCode(self, filename = None): - if filename is None: - filename = self._slicer.getGCodeFilename() - self._gcode.load(filename) + def _loadGCode(self): + self._gcode.progressCallback = self._gcodeLoadCallback + self._gcode.load(self._gcodeFilename) def _gcodeLoadCallback(self, progress): if self._gcode is None: @@ -857,7 +851,11 @@ void main(void) glTranslate(-self._viewTarget[0],-self._viewTarget[1],-self._viewTarget[2]) if self.viewMode == 'gcode': - if self._gcode is not None: + if self._gcode is not None and self._gcode.layerList is None: + self._gcodeLoadThread = threading.Thread(target=self._loadGCode) + self._gcodeLoadThread.daemon = True + self._gcodeLoadThread.start() + if self._gcode is not None and self._gcode.layerList is not None: glPushMatrix() glTranslate(-self._machineSize[0] / 2, -self._machineSize[1] / 2, 0) t = time.time() @@ -993,7 +991,14 @@ void main(void) self._drawMachine() if self.viewMode == 'gcode': - pass + if self._gcodeLoadThread is not None and self._gcodeLoadThread.isAlive(): + glDisable(GL_DEPTH_TEST) + glPushMatrix() + glLoadIdentity() + glTranslate(0,-4,-10) + glColor4ub(60,60,60,255) + opengl.glDrawStringCenter('Loading toolpath for visualization...') + glPopMatrix() else: #Draw the object box-shadow, so you can see where it will collide with other objects. if self._selectedObj is not None and len(self._scene.objects()) > 1: diff --git a/Cura/util/gcodeInterpreter.py b/Cura/util/gcodeInterpreter.py index 2403f2c9..b613a641 100644 --- a/Cura/util/gcodeInterpreter.py +++ b/Cura/util/gcodeInterpreter.py @@ -26,7 +26,7 @@ def gcodePath(newType, pathType, layerThickness, startPoint): class gcode(object): def __init__(self): self.regMatch = {} - self.layerList = [] + self.layerList = None self.extrusionAmount = 0 self.totalMoveTimeMinute = 0 self.filename = None @@ -62,6 +62,7 @@ class gcode(object): return None def _load(self, gcodeFile): + self.layerList = [] pos = [0.0, 0.0, 0.0] posOffset = [0.0, 0.0, 0.0] currentE = 0.0 -- 2.30.2