self.ctrl.Bind(wx.EVT_TEXT, self.OnSettingChange)
elif isinstance(defaultValue, types.BooleanType):
self.ctrl = wx.CheckBox(panel, -1, style=wx.ALIGN_RIGHT)
- self.ctrl.SetValue(getSettingFunc(configName, defaultValue) == "True")
+ self.SetValue(getSettingFunc(configName, defaultValue))
self.ctrl.Bind(wx.EVT_CHECKBOX, self.OnSettingChange)
else:
self.ctrl = wx.ComboBox(panel, -1, getSettingFunc(configName, defaultValue[0]), choices=defaultValue, style=wx.CB_DROPDOWN|wx.CB_READONLY)
self.ctrl.Bind(wx.EVT_TEXT, self.OnSettingChange)
- #self.helpButton = wx.Button(panel, -1, "?", style=wx.BU_EXACTFIT)
- #self.helpButton.SetToolTip(wx.ToolTip(help))
self.ctrl.Bind(wx.EVT_ENTER_WINDOW, lambda e: panel.main.OnPopupDisplay(self))
self.ctrl.Bind(wx.EVT_LEAVE_WINDOW, panel.main.OnPopupHide)
sizer.Add(self.label, (x,y), flag=wx.ALIGN_CENTER_VERTICAL)
sizer.Add(self.ctrl, (x,y+1), flag=wx.ALIGN_BOTTOM|wx.EXPAND)
- #sizer.Add(helpButton, (x,y+2))
sizer.SetRows(x+1)
def OnSettingChange(self, e):
self.GetSizer().Add(radio, 0, wx.EXPAND|wx.ALL, 5)\r
return radio\r
\r
+ def AddButton(self, label):\r
+ button = wx.Button(self, -1, label)\r
+ self.GetSizer().Add(button, 0, wx.LEFT, 5)\r
+ return button\r
+ \r
def AddDualButton(self, label1, label2):\r
p = wx.Panel(self)\r
p.SetSizer(wx.BoxSizer(wx.HORIZONTAL))\r
p.GetSizer().Add(button1, 0, wx.RIGHT, 8)\r
button2 = wx.Button(p, -1, label2)\r
p.GetSizer().Add(button2, 0)\r
- self.GetSizer().Add(p, 0)\r
+ self.GetSizer().Add(p, 0, wx.LEFT, 5)\r
return button1, button2\r
\r
def AllowNext(self):\r
self.AddText('* You have an older machine based on ATMega1280')\r
self.AddText('* Using an LCD panel')\r
self.AddText('* Have other changes in the firmware')\r
- button = wx.Button(self, -1, 'Goto this page for a custom firmware')\r
+ button = self.AddButton('Goto this page for a custom firmware')\r
button.Bind(wx.EVT_BUTTON, self.OnUrlClick)\r
- self.GetSizer().Add(button, 0)\r
\r
def AllowNext(self):\r
return False\r
self.AddText("First remove any filament from your machine.")\r
self.AddText("Next put in your filament so the tip is aligned with the\ntop of the extruder drive.")\r
self.AddText("We'll push the filament 100mm")\r
- self.AddText("[BUTTON:PUSH 100mm]")\r
+ self.extrudeButton = self.AddButton("Extrude 100mm filament")\r
self.AddText("Now measure the amount of extruded filament:\n(this can be more or less then 100mm)")\r
- self.AddText("[INPUT:MEASUREMENT][BUTTON:SAVE]")\r
+ p = wx.Panel(self)\r
+ p.SetSizer(wx.BoxSizer(wx.HORIZONTAL))\r
+ self.lengthInput = wx.TextCtrl(p, -1, '100')\r
+ p.GetSizer().Add(self.lengthInput, 0, wx.RIGHT, 8)\r
+ self.saveLengthButton = wx.Button(p, -1, 'Save')\r
+ p.GetSizer().Add(self.saveLengthButton, 0)\r
+ self.GetSizer().Add(p, 0, wx.LEFT, 5)\r
self.AddText("This results in the following steps per E:")\r
- self.AddText("[INPUT:E_RESULT]")\r
+ self.stepsPerEInput = wx.TextCtrl(self, -1, settings.getPreference('steps_per_e', '865.888'))\r
+ self.GetSizer().Add(self.stepsPerEInput, 0, wx.LEFT, 5)\r
self.AddText("You can repeat these steps to get better calibration.")\r
+ \r
+ self.saveLengthButton.Bind(wx.EVT_BUTTON, self.OnSaveLengthClick)\r
+ self.extrudeButton.Bind(wx.EVT_BUTTON, self.OnExtrudeClick)\r
+ \r
+ def OnSaveLengthClick(self, e):\r
+ currentEValue = float(self.stepsPerEInput.GetValue())\r
+ realExtrudeLength = float(self.lengthInput.GetValue())\r
+ newEValue = currentEValue * 100 / realExtrudeLength\r
+ self.stepsPerEInput.SetValue(str(newEValue))\r
+ self.lengthInput.SetValue("100")\r
+ \r
+ def OnExtrudeClick(self, e):\r
+ threading.Thread(target=self.OnRun).start()\r
+\r
+ def OnRun(self):\r
+ self.comm = machineCom.MachineCom()\r
+ self.sendGCommand('M302') #Disable cold extrusion protection\r
+ self.sendGCommand("G92 E0");\r
+ self.sendGCommand("G1 E100 F300");\r
+ self.comm.close()\r
+ \r
+ def sendGCommand(self, cmd):\r
+ self.comm.sendCommand(cmd) #Disable cold extrusion protection\r
+ while True:\r
+ line = self.comm.readline()\r
+ if line == '':\r
+ return\r
+ if line.startswith('ok'):\r
+ break\r
+ \r
+ def StoreData(self):\r
+ settings.putPreference('steps_per_e', self.stepsPerEInput.GetValue())\r
\r
class configWizard(wx.wizard.Wizard):\r
def __init__(self):\r
menubar = wx.MenuBar()
fileMenu = wx.Menu()
+ i = fileMenu.Append(-1, 'Load STL file...')
+ self.Bind(wx.EVT_MENU, self.OnLoadSTL, i)
+ fileMenu.AppendSeparator()
i = fileMenu.Append(-1, 'Open Profile...')
self.Bind(wx.EVT_MENU, self.OnLoadProfile, i)
i = fileMenu.Append(-1, 'Save Profile...')
self.Bind(wx.EVT_MENU, self.OnDefaultMarlinFirmware, i)
i = expertMenu.Append(-1, 'Install custom firmware')
self.Bind(wx.EVT_MENU, self.OnCustomFirmware, i)
+ expertMenu.AppendSeparator()
+ i = expertMenu.Append(-1, 'ReRun first run wizard...')
+ self.Bind(wx.EVT_MENU, self.OnFirstRunWizard, i)
menubar.Append(expertMenu, 'Expert')
self.SetMenuBar(menubar)
validators.validFloat(c, 1.0)
validators.warningAbove(c, 150.0, "It is highly unlikely that your machine can achieve a printing speed above 150mm/s")
- #Printing temperature is a problem right now, as our start code depends on a heated head.
configBase.TitleRow(right, "Temperature")
c = configBase.SettingRow(right, "Printing temperature", 'print_temperature', '0', 'Temperature used for printing. Set at 0 to pre-heat yourself')
validators.validFloat(c, 0.0, 340.0)
sliceButton = wx.Button(self, -1, 'Slice to GCode')
self.Bind(wx.EVT_BUTTON, self.OnLoadSTL, loadButton)
self.Bind(wx.EVT_BUTTON, self.OnSlice, sliceButton)
+ #Also bind double clicking the 3D preview to load an STL file.
+ self.preview3d.glCanvas.Bind(wx.EVT_LEFT_DCLICK, self.OnLoadSTL, self.preview3d.glCanvas)
#Main sizer, to position the preview window, buttons and tab control
sizer = wx.GridBagSizer()
#For some reason my Ubuntu 10.10 crashes here.
machineCom.InstallFirmware(filename, settings.getPreference('serial_port', 'AUTO'))
+ def OnFirstRunWizard(self, e):
+ configWizard.configWizard()
+
def OnLoadSTL(self, e):
dlg=wx.FileDialog(self, "Open file to print", self.lastPath, style=wx.FD_OPEN|wx.FD_FILE_MUST_EXIST)
dlg.SetWildcard("OBJ, STL files (*.stl;*.obj)|*.stl;*.obj")
def OnClose(self, e):
settings.saveGlobalProfile(settings.getDefaultProfilePath())
self.Destroy()
-
self.transparentButton = wx.Button(self.toolbar, -1, "T", size=(21,21))\r
self.toolbar.AddControl(self.transparentButton)\r
self.Bind(wx.EVT_BUTTON, self.OnTransparentClick, self.transparentButton)\r
- self.depthComplexityButton = wx.Button(self.toolbar, -1, "X-RAY", size=(21*2,21))\r
- self.toolbar.AddControl(self.depthComplexityButton)\r
- self.Bind(wx.EVT_BUTTON, self.OnDepthComplexityClick, self.depthComplexityButton)\r
+ self.XRayButton = wx.Button(self.toolbar, -1, "X-RAY", size=(21*2,21))\r
+ self.toolbar.AddControl(self.XRayButton)\r
+ self.Bind(wx.EVT_BUTTON, self.OnXRayClick, self.XRayButton)\r
\r
self.layerSpin = wx.SpinCtrl(self.toolbar, -1, '', size=(21*4,21), style=wx.SP_ARROW_KEYS)\r
self.toolbar.AddControl(self.layerSpin)\r
\r
def updateToolbar(self):\r
self.transparentButton.Show(self.triangleMesh != None)\r
- self.depthComplexityButton.Show(self.triangleMesh != None)\r
+ self.XRayButton.Show(self.triangleMesh != None)\r
self.layerSpin.Show(self.gcode != None)\r
if self.gcode != None:\r
self.layerSpin.SetRange(1, self.gcode.layerCount)\r
def OnTransparentClick(self, e):\r
self.glCanvas.renderTransparent = not self.glCanvas.renderTransparent\r
if self.glCanvas.renderTransparent:\r
- self.glCanvas.renderDepthComplexity = False\r
+ self.glCanvas.renderXRay = False\r
self.glCanvas.Refresh()\r
\r
- def OnDepthComplexityClick(self, e):\r
- self.glCanvas.renderDepthComplexity = not self.glCanvas.renderDepthComplexity\r
- if self.glCanvas.renderDepthComplexity:\r
+ def OnXRayClick(self, e):\r
+ self.glCanvas.renderXRay = not self.glCanvas.renderXRay\r
+ if self.glCanvas.renderXRay:\r
self.glCanvas.renderTransparent = False\r
self.glCanvas.Refresh()\r
\r
self.fillLineWidth = 0.4\r
self.view3D = True\r
self.renderTransparent = False\r
- self.renderDepthComplexity = False\r
+ self.renderXRay = False\r
self.modelDisplayList = None\r
-\r
+ \r
def OnMouseMotion(self,e):\r
if e.Dragging() and e.LeftIsDown():\r
if self.view3D:\r
glBlendFunc(GL_ONE, GL_ONE)\r
glEnable(GL_LIGHTING)\r
glCallList(self.modelDisplayList)\r
- elif self.renderDepthComplexity:\r
+ elif self.renderXRay:\r
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)\r
glDisable(GL_DEPTH_TEST)\r
glEnable(GL_STENCIL_TEST);\r