def OnClick(self, e):\r
self.parent.sendCommand("G91")\r
self.parent.sendCommand(self.command)\r
+ self.parent.sendCommand("G90")\r
e.Skip()\r
\r
class printWindow(wx.Frame):\r
self.feedrateRatioInnerWall = 1.0\r
self.feedrateRatioFill = 1.0\r
self.feedrateRatioSupport = 1.0\r
+ self.pause = False\r
\r
#self.SetIcon(icon.getMainIcon())\r
\r
self.statsText = wx.StaticText(self.panel, -1, "Filament: ####.##m #.##g\nPrint time: #####:##")\r
boxsizer.Add(self.statsText, flag=wx.LEFT, border=5)\r
\r
- self.sizer.Add(boxsizer, pos=(0,0), span=(4,1), flag=wx.EXPAND)\r
+ self.sizer.Add(boxsizer, pos=(0,0), span=(5,1), flag=wx.EXPAND)\r
\r
self.connectButton = wx.Button(self.panel, -1, 'Connect')\r
#self.loadButton = wx.Button(self.panel, -1, 'Load GCode')\r
self.printButton = wx.Button(self.panel, -1, 'Print GCode')\r
+ self.pauseButton = wx.Button(self.panel, -1, 'Pause')\r
self.cancelButton = wx.Button(self.panel, -1, 'Cancel print')\r
self.progress = wx.Gauge(self.panel, -1)\r
\r
self.sizer.Add(self.connectButton, pos=(0,1))\r
#self.sizer.Add(self.loadButton, pos=(1,1))\r
self.sizer.Add(self.printButton, pos=(2,1))\r
- self.sizer.Add(self.cancelButton, pos=(3,1))\r
- self.sizer.Add(self.progress, pos=(4,0), span=(1,2), flag=wx.EXPAND)\r
+ self.sizer.Add(self.pauseButton, pos=(3,1))\r
+ self.sizer.Add(self.cancelButton, pos=(4,1))\r
+ self.sizer.Add(self.progress, pos=(5,0), span=(1,2), flag=wx.EXPAND)\r
\r
nb = wx.Notebook(self.panel)\r
- self.sizer.Add(nb, pos=(0,3), span=(6,4))\r
+ self.sizer.Add(nb, pos=(0,3), span=(7,4))\r
\r
self.temperaturePanel = wx.Panel(nb)\r
sizer = wx.GridBagSizer(2, 2)\r
self.connectButton.Bind(wx.EVT_BUTTON, self.OnConnect)\r
#self.loadButton.Bind(wx.EVT_BUTTON, self.OnLoad)\r
self.printButton.Bind(wx.EVT_BUTTON, self.OnPrint)\r
+ self.pauseButton.Bind(wx.EVT_BUTTON, self.OnPause)\r
self.cancelButton.Bind(wx.EVT_BUTTON, self.OnCancel)\r
\r
self.Bind(wx.EVT_SPINCTRL, self.OnTempChange, self.temperatureSelect)\r
self.connectButton.Enable(not self.machineConnected)\r
#self.loadButton.Enable(self.printIdx == None)\r
self.printButton.Enable(self.machineConnected and self.gcodeList != None and self.printIdx == None)\r
+ self.pauseButton.Enable(self.printIdx != None)\r
self.cancelButton.Enable(self.printIdx != None)\r
self.temperatureSelect.Enable(self.machineConnected)\r
+ self.bedTemperatureSelect.Enable(self.machineConnected)\r
self.directControlPanel.Enable(self.machineConnected)\r
\r
def UpdateProgress(self):\r
\r
def OnCancel(self, e):\r
self.printIdx = None\r
+ self.pause = False\r
+ self.pauseButton.SetLabel('Pause')\r
self.sendCommand("M84")\r
self.UpdateButtonStates()\r
\r
+ def OnPause(self, e):\r
+ if self.pause:\r
+ self.pause = False\r
+ self.sendLine(self.printIdx)\r
+ self.printIdx += 1\r
+ self.pauseButton.SetLabel('Pause')\r
+ else:\r
+ self.pause = True\r
+ self.pauseButton.SetLabel('Resume')\r
+ \r
def OnClose(self, e):\r
global printWindowHandle\r
printWindowHandle = None\r
\r
def sendCommand(self, cmd):\r
if self.machineConnected:\r
- if self.printIdx == None:\r
+ if self.printIdx == None or self.pause:\r
self.machineCom.sendCommand(cmd)\r
else:\r
self.sendList.append(cmd)\r
line = re.sub('F([0-9]*)', lambda m: 'F' + str(int(int(m.group(1)) * self.feedrateRatioSupport)), line)\r
checksum = reduce(lambda x,y:x^y, map(ord, "N%d%s" % (lineNr, line)))\r
self.machineCom.sendCommand("N%d%s*%d" % (lineNr, line, checksum))\r
+ if line == 'M0' or line == 'M1':\r
+ self.OnPause(None)\r
return True\r
\r
def PrinterMonitor(self):\r
wx.CallAfter(self.UpdateButtonStates)\r
return\r
if self.machineConnected:\r
- while self.sendCnt > 0:\r
+ while self.sendCnt > 0 and not self.pause:\r
self.sendLine(self.printIdx)\r
self.printIdx += 1\r
self.sendCnt -= 1\r
if 'B:' in line:\r
self.bedTemp = float(re.search("[0-9\.]*", line.split('B:')[1]).group(0))\r
wx.CallAfter(self.UpdateProgress)\r
- if self.printIdx == None:\r
- if line == '': #When we have a communication "timeout" and we're not sending gcode, then read the temperature.\r
+ if line == '': #When we have a communication "timeout" and we're not sending gcode, then read the temperature.\r
+ if self.printIdx == None or self.pause:\r
self.machineCom.sendCommand("M105")\r
- else:\r
+ if self.printIdx != None:\r
if line.startswith("ok"):\r
if len(self.sendList) > 0:\r
self.machineCom.sendCommand(self.sendList.pop(0))\r
+ elif self.pause:\r
+ self.sendCnt += 1\r
else:\r
if self.sendLine(self.printIdx):\r
self.printIdx += 1\r