From: daid303 Date: Fri, 3 May 2013 14:27:37 +0000 (+0200) Subject: Show multiple temperatures in the print dialog (this commit breaks the first run... X-Git-Tag: 13.05~29 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=bbbb3195a6dea6a66f6f58cae31aa6c12800c349;p=cura.git Show multiple temperatures in the print dialog (this commit breaks the first run wizard) --- diff --git a/Cura/gui/printWindow.py b/Cura/gui/printWindow.py index 1c6e8ffd..e7ffcc88 100644 --- a/Cura/gui/printWindow.py +++ b/Cura/gui/printWindow.py @@ -427,7 +427,7 @@ class printWindow(wx.Frame): taskbar.setProgress(self, self.machineCom.getPrintPos(), len(self.gcodeList)) if self.machineCom != None: if self.machineCom.getTemp() > 0: - status += 'Temp: %d\n' % (self.machineCom.getTemp()) + status += 'Temp: %s\n' % (' ,'.join(map(str, self.machineCom.getTemp()))) if self.machineCom.getBedTemp() > 0: status += 'Bed Temp: %d\n' % (self.machineCom.getBedTemp()) self.bedTemperatureLabel.Show(True) @@ -593,8 +593,8 @@ class printWindow(wx.Frame): wx.CallAfter(self._mcTempUpdate, temp, bedTemp, targetTemp, bedTargetTemp) def _mcTempUpdate(self, temp, bedTemp, targetTemp, bedTargetTemp): - if self.temperatureSelect.GetValue() != targetTemp and wx.Window.FindFocus() != self.temperatureSelect: - self.temperatureSelect.SetValue(targetTemp) + if self.temperatureSelect.GetValue() != targetTemp[0] and wx.Window.FindFocus() != self.temperatureSelect: + self.temperatureSelect.SetValue(targetTemp[0]) if self.bedTemperatureSelect.GetValue() != bedTargetTemp and wx.Window.FindFocus() != self.bedTemperatureSelect: self.bedTemperatureSelect.SetValue(bedTargetTemp) @@ -635,14 +635,14 @@ class temperatureGraph(wx.Panel): self.lastDraw = time.time() - 1.0 self.points = [] self.backBuffer = None - self.addPoint(0, 0, 0, 0) + self.addPoint([0]*16, [0]*16, 0, 0) self.SetMinSize((320, 200)) def OnEraseBackground(self, e): pass def OnSize(self, e): - if self.backBuffer == None or self.GetSize() != self.backBuffer.GetSize(): + if self.backBuffer is None or self.GetSize() != self.backBuffer.GetSize(): self.backBuffer = wx.EmptyBitmap(*self.GetSizeTuple()) self.UpdateDrawing(True) @@ -669,17 +669,18 @@ class temperatureGraph(wx.Panel): #Draw the background up to the current temperatures. x0 = 0 - t0 = 0 + t0 = [0] * len(self.points[0][0]) bt0 = 0 tSP0 = 0 btSP0 = 0 for temp, tempSP, bedTemp, bedTempSP, t in self.points: x1 = int(w - (now - t)) for x in xrange(x0, x1 + 1): - t = float(x - x0) / float(x1 - x0 + 1) * (temp - t0) + t0 + for n in xrange(0, len(temp)): + t = float(x - x0) / float(x1 - x0 + 1) * (temp[n] - t0[n]) + t0[n] + dc.SetPen(tempPenBG) + dc.DrawLine(x, h, x, h - (t * h / 300)) bt = float(x - x0) / float(x1 - x0 + 1) * (bedTemp - bt0) + bt0 - dc.SetPen(tempPenBG) - dc.DrawLine(x, h, x, h - (t * h / 300)) dc.SetPen(bedTempPenBG) dc.DrawLine(x, h, x, h - (bt * h / 300)) t0 = temp @@ -703,23 +704,24 @@ class temperatureGraph(wx.Panel): #Draw the main lines x0 = 0 - t0 = 0 + t0 = [0] * len(self.points[0][0]) bt0 = 0 - tSP0 = 0 + tSP0 = [0] * len(self.points[0][0]) btSP0 = 0 for temp, tempSP, bedTemp, bedTempSP, t in self.points: x1 = int(w - (now - t)) for x in xrange(x0, x1 + 1): - t = float(x - x0) / float(x1 - x0 + 1) * (temp - t0) + t0 + for n in xrange(0, len(temp)): + t = float(x - x0) / float(x1 - x0 + 1) * (temp[n] - t0[n]) + t0[n] + tSP = float(x - x0) / float(x1 - x0 + 1) * (tempSP[n] - tSP0[n]) + tSP0[n] + dc.SetPen(tempSPPen) + dc.DrawPoint(x, h - (tSP * h / 300)) + dc.SetPen(tempPen) + dc.DrawPoint(x, h - (t * h / 300)) bt = float(x - x0) / float(x1 - x0 + 1) * (bedTemp - bt0) + bt0 - tSP = float(x - x0) / float(x1 - x0 + 1) * (tempSP - tSP0) + tSP0 btSP = float(x - x0) / float(x1 - x0 + 1) * (bedTempSP - btSP0) + btSP0 - dc.SetPen(tempSPPen) - dc.DrawPoint(x, h - (tSP * h / 300)) dc.SetPen(bedTempSPPen) dc.DrawPoint(x, h - (btSP * h / 300)) - dc.SetPen(tempPen) - dc.DrawPoint(x, h - (t * h / 300)) dc.SetPen(bedTempPen) dc.DrawPoint(x, h - (bt * h / 300)) t0 = temp @@ -736,11 +738,11 @@ class temperatureGraph(wx.Panel): self.points.pop(0) def addPoint(self, temp, tempSP, bedTemp, bedTempSP): - if bedTemp == None: + if bedTemp is None: bedTemp = 0 - if bedTempSP == None: + if bedTempSP is None: bedTempSP = 0 - self.points.append((temp, tempSP, bedTemp, bedTempSP, time.time())) + self.points.append((temp[:], tempSP[:], bedTemp, bedTempSP, time.time())) wx.CallAfter(self.UpdateDrawing) diff --git a/Cura/util/machineCom.py b/Cura/util/machineCom.py index ebfaa88d..0d0e8039 100644 --- a/Cura/util/machineCom.py +++ b/Cura/util/machineCom.py @@ -169,9 +169,11 @@ class MachineCom(object): self._serial = None self._baudrateDetectList = baudrateList() self._baudrateDetectRetry = 0 - self._temp = 0 + self._extruderCount = int(profile.getPreference('extruder_amount')) + self._temperatureRequestExtruder = 0 + self._temp = [0] * self._extruderCount + self._targetTemp = [0] * self._extruderCount self._bedTemp = 0 - self._targetTemp = 0 self._bedTargetTemp = 0 self._gcodeList = None self._gcodePos = 0 @@ -343,7 +345,7 @@ class MachineCom(object): self._errorValue = line[6:] self._changeState(self.STATE_ERROR) if ' T:' in line or line.startswith('T:'): - self._temp = float(re.search("[0-9\.]*", line.split('T:')[1]).group(0)) + self._temp[self._temperatureRequestExtruder] = float(re.search("[0-9\.]*", line.split('T:')[1]).group(0)) if ' B:' in line: self._bedTemp = float(re.search("[0-9\.]*", line.split(' B:')[1]).group(0)) self._callback.mcTempUpdate(self._temp, self._bedTemp, self._targetTemp, self._bedTargetTemp) @@ -403,15 +405,23 @@ class MachineCom(object): elif self._state == self.STATE_OPERATIONAL: #Request the temperature on comm timeout (every 2 seconds) when we are not printing. if line == '': - self._sendCommand("M105") + if self._extruderCount > 0: + self._temperatureRequestExtruder = (self._temperatureRequestExtruder + 1) % self._extruderCount + self._sendCommand("M105 T%d" % (self._temperatureRequestExtruder)) + else: + self._sendCommand("M105") tempRequestTimeout = time.time() + 5 elif self._state == self.STATE_PRINTING: if line == '' and time.time() > timeout: self._log("Communication timeout during printing, forcing a line") line = 'ok' - #Even when printing request the temperture every 5 seconds. + #Even when printing request the temperature every 5 seconds. if time.time() > tempRequestTimeout: - self._commandQueue.put("M105") + if self._extruderCount > 0: + self._temperatureRequestExtruder = (self._temperatureRequestExtruder + 1) % self._extruderCount + self._sendCommand("M105 T%d" % (self._temperatureRequestExtruder)) + else: + self._sendCommand("M105") tempRequestTimeout = time.time() + 5 if 'ok' in line: timeout = time.time() + 5 @@ -474,7 +484,10 @@ class MachineCom(object): self._heatupWaitStartTime = time.time() if 'M104' in cmd or 'M109' in cmd: try: - self._targetTemp = float(re.search('S([0-9]+)', cmd).group(1)) + t = 0 + if 'T' in cmd: + t = int(re.search('T([0-9]+)', cmd).group(1)) + self._targetTemp[t] = float(re.search('S([0-9]+)', cmd).group(1)) except: pass if 'M140' in cmd or 'M190' in cmd: