From a9c3e8b44254fe65fd9149e82ee9eccec8e61f99 Mon Sep 17 00:00:00 2001 From: Guillaume Seguin Date: Fri, 17 May 2013 16:32:45 +0200 Subject: [PATCH] Revert "Remove temperature gauges entirely from codebase" This reverts commit 02ef52d777847d24e4f99de847686d8927ad6629. First step towards getting the gauges optionally back for #296. --- printrun/gui.py | 14 +++++ printrun/pronterface_widgets.py | 106 ++++++++++++++++++++++++++++++++ pronterface.py | 7 +++ 3 files changed, 127 insertions(+) diff --git a/printrun/gui.py b/printrun/gui.py index 5c0385e..d3cd10b 100644 --- a/printrun/gui.py +++ b/printrun/gui.py @@ -144,6 +144,8 @@ class LeftPane(wx.GridBagSizer): if( '(' not in root.htemp.Value): root.htemp.SetValue(root.htemp.Value + ' (user)') + #self.Add(root.btemp, pos = (4, 1), span = (1, 3)) + #self.Add(root.setbbtn, pos = (4, 4), span = (1, 2)) root.tempdisp = wx.StaticText(root.panel,-1, "") root.edist = wx.SpinCtrl(root.panel,-1, "5", min = 0, max = 1000, size = (60,-1)) @@ -163,6 +165,18 @@ class LeftPane(wx.GridBagSizer): root.zfeedc.Bind(wx.EVT_SPINCTRL, root.setfeeds) root.zfeedc.SetBackgroundColour((180, 255, 180)) root.zfeedc.SetForegroundColour("black") + # self.Add((10, 0), pos = (0, 11), span = (1, 1)) + + #root.hottgauge = TempGauge(root.panel, size = (200, 24), title = _("Heater:"), maxval = 230) + #self.Add(root.hottgauge, pos = (7, 0), span = (1, 4)) + #root.bedtgauge = TempGauge(root.panel, size = (200, 24), title = _("Bed:"), maxval = 130) + #self.Add(root.bedtgauge, pos = (8, 0), span = (1, 4)) + #def scroll_setpoint(e): + # if e.GetWheelRotation()>0: + # root.do_settemp(str(root.hsetpoint+1)) + # elif e.GetWheelRotation()<0: + # root.do_settemp(str(max(0, root.hsetpoint-1))) + #root.tgauge.Bind(wx.EVT_MOUSEWHEEL, scroll_setpoint) root.graph = Graph(root.panel, wx.ID_ANY) self.Add(root.graph, pos = (4, 5), span = (2, 1)) diff --git a/printrun/pronterface_widgets.py b/printrun/pronterface_widgets.py index 5b3fd36..ad4ea92 100644 --- a/printrun/pronterface_widgets.py +++ b/printrun/pronterface_widgets.py @@ -211,6 +211,112 @@ class ButtonEdit(wx.Dialog): if self.name.GetValue()=="": self.name.SetValue(macro) +class TempGauge(wx.Panel): + + def __init__(self, parent, size = (200, 22), title = "", maxval = 240, gaugeColour = None): + wx.Panel.__init__(self, parent,-1, size = size) + self.Bind(wx.EVT_PAINT, self.paint) + self.SetBackgroundStyle(wx.BG_STYLE_CUSTOM) + self.width, self.height = size + self.title = title + self.max = maxval + self.gaugeColour = gaugeColour + self.value = 0 + self.setpoint = 0 + self.recalc() + + def recalc(self): + mmax = max(int(self.setpoint*1.05), self.max) + self.scale = float(self.width-2)/float(mmax) + self.ypt = max(16, int(self.scale*max(self.setpoint, self.max/6))) + + def SetValue(self, value): + self.value = value + wx.CallAfter(self.Refresh) + + def SetTarget(self, value): + self.setpoint = value + self.recalc() + wx.CallAfter(self.Refresh) + + def interpolatedColour(self, val, vmin, vmid, vmax, cmin, cmid, cmax): + if val < vmin: return cmin + if val > vmax: return cmax + if val <= vmid: + lo, hi, val, valhi = cmin, cmid, val-vmin, vmid-vmin + else: + lo, hi, val, valhi = cmid, cmax, val-vmid, vmax-vmid + vv = float(val)/valhi + rgb = lo.Red()+(hi.Red()-lo.Red())*vv, lo.Green()+(hi.Green()-lo.Green())*vv, lo.Blue()+(hi.Blue()-lo.Blue())*vv + rgb = map(lambda x:x*0.8, rgb) + return wx.Colour(*map(int, rgb)) + + def paint(self, ev): + x0, y0, x1, y1, xE, yE = 1, 1, self.ypt+1, 1, self.width+1-2, 20 + dc = wx.PaintDC(self) + dc.SetBackground(wx.Brush((255, 255, 255))) + dc.Clear() + cold, medium, hot = wx.Colour(0, 167, 223), wx.Colour(239, 233, 119), wx.Colour(210, 50.100) + gauge1, gauge2 = wx.Colour(255, 255, 210), (self.gaugeColour or wx.Colour(234, 82, 0)) + shadow1, shadow2 = wx.Colour(110, 110, 110), wx.Colour(255, 255, 255) + gc = wx.GraphicsContext.Create(dc) + # draw shadow first + # corners + gc.SetBrush(gc.CreateRadialGradientBrush(xE-7, 9, xE-7, 9, 8, shadow1, shadow2)) + gc.DrawRectangle(xE-7, 1, 8, 8) + gc.SetBrush(gc.CreateRadialGradientBrush(xE-7, 17, xE-7, 17, 8, shadow1, shadow2)) + gc.DrawRectangle(xE-7, 17, 8, 8) + gc.SetBrush(gc.CreateRadialGradientBrush(x0+6, 17, x0+6, 17, 8, shadow1, shadow2)) + gc.DrawRectangle(0, 17, x0+6, 8) + # edges + gc.SetBrush(gc.CreateLinearGradientBrush(xE-13, 0, xE-6, 0, shadow1, shadow2)) + gc.DrawRectangle(xE-6, 9, 10, 8) + gc.SetBrush(gc.CreateLinearGradientBrush(x0, yE-2, x0, yE+5, shadow1, shadow2)) + gc.DrawRectangle(x0+6, yE-2, xE-12, 7) + # draw gauge background + gc.SetBrush(gc.CreateLinearGradientBrush(x0, y0, x1+1, y1, cold, medium)) + gc.DrawRoundedRectangle(x0, y0, x1+4, yE, 6) + gc.SetBrush(gc.CreateLinearGradientBrush(x1-2, y1, xE, y1, medium, hot)) + gc.DrawRoundedRectangle(x1-2, y1, xE-x1, yE, 6) + # draw gauge + width = 12 + w1 = y0+9-width/2 + w2 = w1+width + value = x0+max(10, min(self.width+1-2, int(self.value*self.scale))) + #gc.SetBrush(gc.CreateLinearGradientBrush(x0, y0+3, x0, y0+15, gauge1, gauge2)) + #gc.SetBrush(gc.CreateLinearGradientBrush(0, 3, 0, 15, wx.Colour(255, 255, 255), wx.Colour(255, 90, 32))) + gc.SetBrush(gc.CreateLinearGradientBrush(x0, y0+3, x0, y0+15, gauge1, self.interpolatedColour(value, x0, x1, xE, cold, medium, hot))) + val_path = gc.CreatePath() + val_path.MoveToPoint(x0, w1) + val_path.AddLineToPoint(value, w1) + val_path.AddLineToPoint(value+2, w1+width/4) + val_path.AddLineToPoint(value+2, w2-width/4) + val_path.AddLineToPoint(value, w2) + #val_path.AddLineToPoint(value-4, 10) + val_path.AddLineToPoint(x0, w2) + gc.DrawPath(val_path) + # draw setpoint markers + setpoint = x0+max(10, int(self.setpoint*self.scale)) + gc.SetBrush(gc.CreateBrush(wx.Brush(wx.Colour(0, 0, 0)))) + setp_path = gc.CreatePath() + setp_path.MoveToPoint(setpoint-4, y0) + setp_path.AddLineToPoint(setpoint+4, y0) + setp_path.AddLineToPoint(setpoint, y0+5) + setp_path.MoveToPoint(setpoint-4, yE) + setp_path.AddLineToPoint(setpoint+4, yE) + setp_path.AddLineToPoint(setpoint, yE-5) + gc.DrawPath(setp_path) + # draw readout + text = u"T\u00B0 %u/%u"%(self.value, self.setpoint) + #gc.SetFont(gc.CreateFont(wx.Font(12, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD), wx.WHITE)) + #gc.DrawText(text, 29,-2) + gc.SetFont(gc.CreateFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD), wx.WHITE)) + gc.DrawText(self.title, x0+19, y0+4) + gc.DrawText(text, x0+119, y0+4) + gc.SetFont(gc.CreateFont(wx.Font(10, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD))) + gc.DrawText(self.title, x0+18, y0+3) + gc.DrawText(text, x0+118, y0+3) + class SpecialButton(object): label = None diff --git a/pronterface.py b/pronterface.py index 9ff4b0b..012a990 100755 --- a/pronterface.py +++ b/pronterface.py @@ -256,6 +256,7 @@ class PronterWindow(MainWindow, pronsole.pronsole): if "S" in line: try: temp = float(line.split("S")[1].split("*")[0]) + #self.hottgauge.SetTarget(temp) wx.CallAfter(self.graph.SetExtruder0TargetTemperature, temp) except: pass @@ -267,6 +268,7 @@ class PronterWindow(MainWindow, pronsole.pronsole): if "S" in line: try: temp = float(line.split("S")[1].split("*")[0]) + #self.bedtgauge.SetTarget(temp) wx.CallAfter(self.graph.SetBedTargetTemperature, temp) except: pass @@ -293,6 +295,7 @@ class PronterWindow(MainWindow, pronsole.pronsole): def setbedgui(self, f): self.bsetpoint = f + #self.bedtgauge.SetTarget(int(f)) wx.CallAfter(self.graph.SetBedTargetTemperature, int(f)) if f>0: wx.CallAfter(self.btemp.SetValue, str(f)) @@ -312,6 +315,7 @@ class PronterWindow(MainWindow, pronsole.pronsole): def sethotendgui(self, f): self.hsetpoint = f + #self.hottgauge.SetTarget(int(f)) wx.CallAfter(self.graph.SetExtruder0TargetTemperature, int(f)) if f > 0: wx.CallAfter(self.htemp.SetValue, str(f)) @@ -1041,7 +1045,9 @@ class PronterWindow(MainWindow, pronsole.pronsole): string = "" wx.CallAfter(self.tempdisp.SetLabel, self.tempreport.strip().replace("ok ", "")) try: + #self.hottgauge.SetValue(parse_temperature_report(self.tempreport, "T:")) wx.CallAfter(self.graph.SetExtruder0Temperature, parse_temperature_report(self.tempreport, "T:")) + #self.bedtgauge.SetValue(parse_temperature_report(self.tempreport, "B:")) wx.CallAfter(self.graph.SetBedTemperature, parse_temperature_report(self.tempreport, "B:")) except: pass @@ -1106,6 +1112,7 @@ class PronterWindow(MainWindow, pronsole.pronsole): self.tempreport = l wx.CallAfter(self.tempdisp.SetLabel, self.tempreport.strip().replace("ok ", "")) try: + #self.hottgauge.SetValue(parse_temperature_report(self.tempreport, "T:")) wx.CallAfter(self.graph.SetExtruder0Temperature, parse_temperature_report(self.tempreport, "T:")) wx.CallAfter(self.graph.SetBedTemperature, parse_temperature_report(self.tempreport, "B:")) except: