c = configBase.SettingRow(left, 'Machine height (mm)', 'machine_height', '200', 'Size of the machine in mm', type = 'preference')\r
validators.validFloat(c, 10.0)\r
\r
+ configBase.TitleRow(left, 'Filament settings')\r
+ c = configBase.SettingRow(left, 'Filament density (kg/m3)', 'filament_density', '1300', 'Weight of the filament per m3. Around 1300 for PLA. And around 1040 for ABS. This value is used to estimate the weight if the filament used for the print.', type = 'preference')\r
+ validators.validFloat(c, 500.0, 3000.0)\r
+ \r
configBase.TitleRow(left, 'Communication settings')\r
c = configBase.SettingRow(left, 'Serial port', 'serial_port', ['AUTO'] + machineCom.serialList(), 'Serial port to use for communication with the printer', type = 'preference')\r
c = configBase.SettingRow(left, 'Baudrate', 'serial_baud', '250000', 'Speed of the serial port communication\nNeeds to match your firmware settings\nCommon values are 250000, 115200, 57600', type = 'preference')\r
self.machineCom = None\r
self.machineConnected = False\r
self.thread = None\r
+ self.gcode = None\r
self.gcodeList = None\r
self.printIdx = None\r
self.bufferLineCount = 4\r
\r
def UpdateProgress(self):\r
status = ""\r
+ if self.gcode != None:\r
+ status += "Filament: %.2fm %.2fg\n" % (self.gcode.extrusionAmount / 1000, self.gcode.calculateWeight() * 1000)\r
+ status += "Print time: %02d:%02d\n" % (int(self.gcode.totalMoveTimeMinute / 60), int(self.gcode.totalMoveTimeMinute % 60))\r
if self.printIdx == None:\r
self.progress.SetValue(0)\r
+ if self.gcodeList != None:\r
+ status += 'Line: -/%d\n' % (len(self.gcodeList))\r
else:\r
self.progress.SetValue(self.printIdx)\r
status += 'Line: %d/%d\n' % (self.printIdx, len(self.gcodeList))\r
gcodeList.append(line)\r
gcode = gcodeInterpreter.gcode()\r
gcode.loadList(gcodeList)\r
- print gcode.extrusionAmount\r
- print gcode.totalMoveTimeMinute\r
print "Loaded: %s (%d)" % (filename, len(gcodeList))\r
self.progress.SetRange(len(gcodeList))\r
+ self.gcode = gcode\r
self.gcodeList = gcodeList\r
self.UpdateButtonStates()\r
self.UpdateProgress()\r
\r
def sendLine(self, lineNr):\r
if lineNr >= len(self.gcodeList):\r
- return\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
+ return True\r
\r
def PrinterMonitor(self):\r
skipCount = 0\r
line = self.machineCom.readline()\r
if line == None:\r
self.machineConnected = False\r
- wx.CallAfter(self.UpdateButtonState)\r
+ wx.CallAfter(self.UpdateButtonStates)\r
return\r
if self.machineConnected:\r
while self.sendCnt > 0:\r
self.sendCnt -= 1\r
elif line.startswith("start"):\r
self.machineConnected = True\r
- wx.CallAfter(self.UpdateButtonState)\r
+ wx.CallAfter(self.UpdateButtonStates)\r
if self.printIdx != None:\r
if line.startswith("ok"):\r
if skipCount > 0:\r
skipCount -= 1\r
else:\r
- self.sendLine(self.printIdx)\r
- self.printIdx += 1\r
+ if self.sendLine(self.printIdx):\r
+ self.printIdx += 1\r
wx.CallAfter(self.UpdateProgress)\r
elif "resend" in line.lower() or "rs" in line:\r
try:\r
lineNr=int(line.split()[1])\r
self.printIdx = lineNr\r
#we should actually resend the line here, but we also get an "ok" for each error from Marlin. And thus we'll resend on the OK.\r
+\r
import os
from util import util3d
+from util import profile
class gcodePath():
def __init__(self, newType, pathType, startPoint):
def loadList(self, l):
self._load(l)
+ def calculateWeight(self):
+ #Calculates the weight of the filament in kg
+ radius = float(profile.getProfileSetting('filament_diameter')) / 2
+ volumeM3 = (self.extrusionAmount * (math.pi * radius * radius)) / (1000*1000*1000)
+ return volumeM3 * float(profile.getPreference('filament_density'))
+
def _load(self, gcodeFile):
filePos = 0
pos = util3d.Vector3()