cost = self.gcode.calculateCost()
if cost is not None:
status += "Filament cost: %s\n" % (cost)
- status += "Estimated print time: %02d:%02d\n" % (
- int(self.gcode.totalMoveTimeMinute / 60), int(self.gcode.totalMoveTimeMinute % 60))
+ #status += "Estimated print time: %02d:%02d\n" % (int(self.gcode.totalMoveTimeMinute / 60), int(self.gcode.totalMoveTimeMinute % 60))
if self.machineCom is None or not self.machineCom.isPrinting():
self.progress.SetValue(0)
if self.gcodeList is not None:
if self.currentZ > 0:
status += 'Height: %0.1f\n' % (self.currentZ)
status += 'Print time: %02d:%02d\n' % (int(printTime / 60), int(printTime % 60))
- if printTimeLeft == None:
+ if printTimeLeft is None:
status += 'Print time left: Unknown\n'
else:
status += 'Print time left: %02d:%02d\n' % (int(printTimeLeft / 60), int(printTimeLeft % 60))
if self._focusObj is None:
return
self._scene.remove(self._focusObj)
- for obj in self._focusObj.split():
+ for obj in self._focusObj.split(self._splitCallback):
self._scene.add(obj)
self._scene.centerAll()
self._selectObject(None)
self.sceneUpdated()
+ def _splitCallback(self, progress):
+ print progress
+
def OnMergeObjects(self, e):
if self._selectedObj is None or self._focusObj is None or self._selectedObj == self._focusObj:
return
def _updateSliceProgress(self, progressValue, ready):
self.printButton.setDisabled(not ready)
- self.printButton.setProgressBar(progressValue)
+ if progressValue >= 0.0:
+ self.printButton.setProgressBar(progressValue)
+ else:
+ self.printButton.setProgressBar(None)
if self._gcode is not None:
self._gcode = None
for layerVBOlist in self._gcodeVBOs:
self.glReleaseList.append(vbo)
self._gcodeVBOs = []
if ready:
- print self._slicer.getFilamentAmount()
- print self._slicer.getPrintTime()
- print self._slicer.getFilamentCost()
+ self.printButton.setProgressBar(None)
+ cost = self._slicer.getFilamentCost()
+ if cost is not None:
+ self.printButton.setBottomText('%s\n%s\n%s' % (self._slicer.getPrintTime(), self._slicer.getFilamentAmount(), cost))
+ 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()
+ else:
+ self.printButton.setBottomText('')
self.QueueRefresh()
def _loadGCode(self):
def glDrawStringLeft(s):
glRasterPos2f(0, 0)
+ n = 1
for c in s:
- glutBitmapCharacter(OpenGL.GLUT.GLUT_BITMAP_HELVETICA_18, ord(c))
+ if c == '\n':
+ glPushMatrix()
+ glTranslate(0, 18 * n, 0)
+ n += 1
+ glRasterPos2f(0, 0)
+ glPopMatrix()
+ else:
+ glutBitmapCharacter(OpenGL.GLUT.GLUT_BITMAP_HELVETICA_18, ord(c))
def glDrawStringRight(s):
glRasterPos2f(0, 0)
self._hidden = False
self._disabled = False
self._showExpandArrow = False
- self._progressBar = 0.0
+ self._progressBar = None
+ self._altTooltip = ''
def setSelected(self, value):
self._selected = value
def setProgressBar(self, value):
self._progressBar = value
+ def setBottomText(self, value):
+ self._altTooltip = value
+
def getSelected(self):
return self._selected
glColor4ub(255,255,255,255)
opengl.glDrawStringCenter(self._tooltip)
glPopMatrix()
- if 0.0 < self._progressBar < 1.0:
+ if self._progressBar is not None:
glColor4ub(255,255,255,192)
- glPushMatrix()
opengl.glDrawTexturedQuad(pos[0]-bs/2, pos[1]+bs/2, bs, bs / 4, 0)
opengl.glDrawTexturedQuad(pos[0]-bs/2, pos[1]+bs/2, bs * self._progressBar, bs / 4, 0)
+ elif len(self._altTooltip) > 0:
+ glPushMatrix()
+ glTranslatef(pos[0], pos[1], 0)
+ glTranslatef(0.6*bs*scale, 0, 0)
+
+ glPushMatrix()
+ glColor4ub(60,60,60,255)
+ glTranslatef(-1, -1, 0)
+ opengl.glDrawStringLeft(self._altTooltip)
+ glTranslatef(0, 2, 0)
+ opengl.glDrawStringLeft(self._altTooltip)
+ glTranslatef(2, 0, 0)
+ opengl.glDrawStringLeft(self._altTooltip)
+ glTranslatef(0, -2, 0)
+ opengl.glDrawStringLeft(self._altTooltip)
+ glPopMatrix()
+
+ glColor4ub(255,255,255,255)
+ opengl.glDrawStringLeft(self._altTooltip)
glPopMatrix()
def _checkHit(self, x, y):
if scale > 0:
self.applyMatrix(numpy.matrix([[scale,0,0],[0,scale,0],[0,0,scale]], numpy.float64))
- def split(self):
+ def split(self, callback):
ret = []
for oriMesh in self._meshList:
- for m in oriMesh.split():
+ for m in oriMesh.split(callback):
obj = printableObject()
obj._meshList.append(m)
obj._postProcessAfterLoad()
def _vertexHash(self, idx):
v = self.vertexes[idx]
- return int(v[0] * 100) | int(v[1] * 100) << 8 | int(v[2] * 100) << 16
+ return int(v[0] * 100) | int(v[1] * 100) << 10 | int(v[2] * 100) << 20
def _idxFromHash(self, map, idx):
vHash = self._vertexHash(idx)
if numpy.linalg.norm(self.vertexes[i] - self.vertexes[idx]) < 0.001:
return i
- def split(self):
+ def split(self, callback):
vertexMap = {}
vertexToFace = []
for idx in xrange(0, self.vertexCount):
- print idx, self.vertexCount
+ if (idx % 100) == 0:
+ callback(idx * 100 / self.vertexCount)
vHash = self._vertexHash(idx)
if vHash not in vertexMap:
vertexMap[vHash] = []
faceList = []
for idx in xrange(0, self.vertexCount, 3):
- print idx, self.vertexCount
+ if (idx % 100) == 0:
+ callback(idx * 100 / self.vertexCount)
f = [self._idxFromHash(vertexMap, idx), self._idxFromHash(vertexMap, idx+1), self._idxFromHash(vertexMap, idx+2)]
vertexToFace[f[0]].append(idx / 3)
vertexToFace[f[1]].append(idx / 3)
return '%02d:%02d' % (int(self._printTimeSeconds / 60 / 60), int(self._printTimeSeconds / 60) % 60)
def getFilamentAmount(self):
- return '%0.2fm' % (float(self._filamentMM) / 1000.0)
+ return '%0.2fm %0.0fgram' % (float(self._filamentMM) / 1000.0, self.getFilamentWeight() * 1000.0)
def runSlicer(self, scene):
self.abortSlicer()
- self._callback(0.0, False)
+ self._callback(-1.0, False)
commandList = [getEngineFilename(), '-vv']
for k, v in self._engineSettings().iteritems():
if returnCode == 0:
self._callback(1.0, True)
else:
- self._callback(0.0, False)
+ self._callback(-1.0, False)
except:
pass
self._process = None