self.bedTemp = None\r
self.bufferLineCount = 4\r
self.sendCnt = 0\r
+ self.feedrateRatioOuterWall = 1.0\r
+ self.feedrateRatioInnerWall = 1.0\r
+ self.feedrateRatioFill = 1.0\r
+ self.feedrateRatioSupport = 1.0\r
\r
#self.SetIcon(icon.getMainIcon())\r
\r
self.cancelButton = wx.Button(self.panel, -1, 'Cancel print')\r
self.progress = wx.Gauge(self.panel, -1)\r
\r
- h = self.connectButton.GetSize().GetHeight()\r
- self.temperatureSelect = wx.SpinCtrl(self.panel, -1, '0', size=(21*3,21), style=wx.SP_ARROW_KEYS)\r
- self.temperatureSelect.SetRange(0, 400)\r
- self.bedTemperatureLabel = wx.StaticText(self.panel, -1, "BedTemp:")\r
- self.bedTemperatureSelect = wx.SpinCtrl(self.panel, -1, '0', size=(21*3,21), style=wx.SP_ARROW_KEYS)\r
- self.bedTemperatureSelect.SetRange(0, 400)\r
- self.bedTemperatureLabel.Show(False)\r
- self.bedTemperatureSelect.Show(False)\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
+\r
+ nb = wx.Notebook(self.panel)\r
+ self.sizer.Add(nb, pos=(0,3), span=(6,4))\r
\r
- self.sizer.Add(wx.StaticText(self.panel, -1, "Temp:"), pos=(0,3))\r
- self.sizer.Add(self.temperatureSelect, pos=(0,4))\r
- self.sizer.Add(self.bedTemperatureLabel, pos=(0,5))\r
- self.sizer.Add(self.bedTemperatureSelect, pos=(0,6))\r
+ self.temperaturePanel = wx.Panel(nb)\r
+ sizer = wx.GridBagSizer(2, 2)\r
+ self.temperaturePanel.SetSizer(sizer)\r
+\r
+ self.temperatureSelect = wx.SpinCtrl(self.temperaturePanel, -1, '0', size=(21*3,21), style=wx.SP_ARROW_KEYS)\r
+ self.temperatureSelect.SetRange(0, 400)\r
+ self.bedTemperatureLabel = wx.StaticText(self.temperaturePanel, -1, "BedTemp:")\r
+ self.bedTemperatureSelect = wx.SpinCtrl(self.temperaturePanel, -1, '0', size=(21*3,21), style=wx.SP_ARROW_KEYS)\r
+ self.bedTemperatureSelect.SetRange(0, 400)\r
+ self.bedTemperatureLabel.Show(False)\r
+ self.bedTemperatureSelect.Show(False)\r
\r
- self.directControlPanel = wx.Panel(self.panel)\r
- self.sizer.Add(self.directControlPanel, pos=(1,3), span=(5,4))\r
+ sizer.Add(wx.StaticText(self.temperaturePanel, -1, "Temp:"), pos=(0,0))\r
+ sizer.Add(self.temperatureSelect, pos=(0,1))\r
+ sizer.Add(self.bedTemperatureLabel, pos=(1,0))\r
+ sizer.Add(self.bedTemperatureSelect, pos=(1,1))\r
+\r
+ nb.AddPage(self.temperaturePanel, 'Temp')\r
+\r
+ self.directControlPanel = wx.Panel(nb)\r
\r
sizer = wx.GridBagSizer(2, 2)\r
self.directControlPanel.SetSizer(sizer)\r
sizer.Add(PrintCommandButton(self, 'G1 Z-1 F200', 'print-move-z-1.png'), pos=(5,7))\r
sizer.Add(PrintCommandButton(self, 'G1 Z-10 F200', 'print-move-z-10.png'), pos=(6,7))\r
\r
+ nb.AddPage(self.directControlPanel, 'Jog')\r
+\r
+ self.speedPanel = wx.Panel(nb)\r
+ sizer = wx.GridBagSizer(2, 2)\r
+ self.speedPanel.SetSizer(sizer)\r
+\r
+ self.outerWallSpeedSelect = wx.SpinCtrl(self.speedPanel, -1, '100', size=(21*3,21), style=wx.SP_ARROW_KEYS)\r
+ self.outerWallSpeedSelect.SetRange(5, 1000)\r
+ self.innerWallSpeedSelect = wx.SpinCtrl(self.speedPanel, -1, '100', size=(21*3,21), style=wx.SP_ARROW_KEYS)\r
+ self.innerWallSpeedSelect.SetRange(5, 1000)\r
+ self.fillSpeedSelect = wx.SpinCtrl(self.speedPanel, -1, '100', size=(21*3,21), style=wx.SP_ARROW_KEYS)\r
+ self.fillSpeedSelect.SetRange(5, 1000)\r
+ self.supportSpeedSelect = wx.SpinCtrl(self.speedPanel, -1, '100', size=(21*3,21), style=wx.SP_ARROW_KEYS)\r
+ self.supportSpeedSelect.SetRange(5, 1000)\r
+ \r
+ sizer.Add(wx.StaticText(self.speedPanel, -1, "Outer wall:"), pos=(0,0))\r
+ sizer.Add(self.outerWallSpeedSelect, pos=(0,1))\r
+ sizer.Add(wx.StaticText(self.speedPanel, -1, "%"), pos=(0,2))\r
+ sizer.Add(wx.StaticText(self.speedPanel, -1, "Inner wall:"), pos=(1,0))\r
+ sizer.Add(self.innerWallSpeedSelect, pos=(1,1))\r
+ sizer.Add(wx.StaticText(self.speedPanel, -1, "%"), pos=(1,2))\r
+ sizer.Add(wx.StaticText(self.speedPanel, -1, "Fill:"), pos=(2,0))\r
+ sizer.Add(self.fillSpeedSelect, pos=(2,1))\r
+ sizer.Add(wx.StaticText(self.speedPanel, -1, "%"), pos=(2,2))\r
+ sizer.Add(wx.StaticText(self.speedPanel, -1, "Support:"), pos=(3,0))\r
+ sizer.Add(self.supportSpeedSelect, pos=(3,1))\r
+ sizer.Add(wx.StaticText(self.speedPanel, -1, "%"), pos=(3,2))\r
+\r
+ nb.AddPage(self.speedPanel, 'Speed')\r
+\r
self.sizer.AddGrowableRow(3)\r
self.sizer.AddGrowableCol(0)\r
\r
\r
self.Bind(wx.EVT_SPINCTRL, self.OnTempChange, self.temperatureSelect)\r
self.Bind(wx.EVT_SPINCTRL, self.OnBedTempChange, self.bedTemperatureSelect)\r
+\r
+ self.Bind(wx.EVT_SPINCTRL, self.OnSpeedChange, self.outerWallSpeedSelect)\r
+ self.Bind(wx.EVT_SPINCTRL, self.OnSpeedChange, self.innerWallSpeedSelect)\r
+ self.Bind(wx.EVT_SPINCTRL, self.OnSpeedChange, self.fillSpeedSelect)\r
+ self.Bind(wx.EVT_SPINCTRL, self.OnSpeedChange, self.supportSpeedSelect)\r
\r
self.Layout()\r
self.Fit()\r
self.Centre()\r
- \r
+\r
self.UpdateButtonStates()\r
self.UpdateProgress()\r
\r
status += 'Bed Temp: %d\n' % (self.bedTemp)\r
self.bedTemperatureLabel.Show(True)\r
self.bedTemperatureSelect.Show(True)\r
+ self.temperaturePanel.Layout()\r
self.statsText.SetLabel(status.strip())\r
self.Layout()\r
\r
\r
def OnBedTempChange(self, e):\r
self.sendCommand("M140 S%d" % (self.bedTemperatureSelect.GetValue()))\r
+ \r
+ def OnSpeedChange(self, e):\r
+ self.feedrateRatioOuterWall = self.outerWallSpeedSelect.GetValue() / 100.0\r
+ self.feedrateRatioInnerWall = self.innerWallSpeedSelect.GetValue() / 100.0\r
+ self.feedrateRatioFill = self.fillSpeedSelect.GetValue() / 100.0\r
+ self.feedrateRatioSupport = self.supportSpeedSelect.GetValue() / 100.0\r
\r
def LoadGCodeFile(self, filename):\r
if self.printIdx != None:\r
return\r
#Send an initial M110 to reset the line counter to zero.\r
+ lineType = 'CUSTOM'\r
gcodeList = ["M110"]\r
+ typeList = [lineType]\r
for line in open(filename, 'r'):\r
+ if line.startswith(';TYPE:'):\r
+ lineType = line[6:].strip()\r
if ';' in line:\r
line = line[0:line.find(';')]\r
line = line.strip()\r
if len(line) > 0:\r
gcodeList.append(line)\r
+ typeList.append(lineType)\r
gcode = gcodeInterpreter.gcode()\r
gcode.loadList(gcodeList)\r
print "Loaded: %s (%d)" % (filename, len(gcodeList))\r
self.progress.SetRange(len(gcodeList))\r
self.gcode = gcode\r
self.gcodeList = gcodeList\r
+ self.typeList = typeList\r
self.UpdateButtonStates()\r
self.UpdateProgress()\r
\r
def sendLine(self, lineNr):\r
if lineNr >= len(self.gcodeList):\r
return False\r
- checksum = reduce(lambda x,y:x^y, map(ord, "N%d%s" % (lineNr, self.gcodeList[lineNr])))\r
- self.machineCom.sendCommand("N%d%s*%d" % (lineNr, self.gcodeList[lineNr], checksum))\r
+ line = self.gcodeList[lineNr]\r
+ if self.typeList[lineNr] == 'WALL-OUTER':\r
+ line = re.sub('F([0-9]*)', lambda m: 'F' + str(int(int(m.group(1)) * self.feedrateRatioOuterWall)), line)\r
+ if self.typeList[lineNr] == 'WALL-INNER':\r
+ print line\r
+ line = re.sub('F([0-9]*)', lambda m: 'F' + str(int(int(m.group(1)) * self.feedrateRatioInnerWall)), line)\r
+ print line\r
+ if self.typeList[lineNr] == 'FILL':\r
+ line = re.sub('F([0-9]*)', lambda m: 'F' + str(int(int(m.group(1)) * self.feedrateRatioFill)), line)\r
+ if self.typeList[lineNr] == 'SUPPORT':\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
return True\r
\r
def PrinterMonitor(self):\r