chiark / gitweb /
Show multiple temperatures in the print dialog (this commit breaks the first run...
authordaid303 <daid303@gmail.com>
Fri, 3 May 2013 14:27:37 +0000 (16:27 +0200)
committerdaid303 <daid303@gmail.com>
Fri, 3 May 2013 14:27:37 +0000 (16:27 +0200)
Cura/gui/printWindow.py
Cura/util/machineCom.py

index 1c6e8ffdeba6c34121fe1c8551da1ee6903fd8a8..e7ffcc88321034d0fae763904ca1fbc767e559fc 100644 (file)
@@ -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)
 
 
index ebfaa88d0f6ee1aa85e44703fa9c08e4fd0984e7..0d0e8039314e29f511ad8152d1354ee8877960d8 100644 (file)
@@ -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: