obj.filename = filelist[idx]\r
\r
self.gcodeFilename = sliceRun.getExportFilename(filelist[0])\r
- self.logFilename = sliceRun.getExportFilename(filelist[0], "log")\r
#Do the STL file loading in a background thread so we don't block the UI.\r
if self.loadThread != None and self.loadThread.isAlive():\r
self.loadThread.join()\r
self.gcodeDirty = False\r
self.gcode = gcode\r
self.gcodeDirty = True\r
- wx.CallAfter(self.updateToolbar)\r
- wx.CallAfter(self.glCanvas.Refresh)\r
- elif not os.path.isfile(self.gcodeFilename):\r
- self.gcode = None\r
- \r
- if os.path.isfile(self.logFilename):\r
+\r
errorList = []\r
- for line in open(self.logFilename, "rt"):\r
- res = re.search('Model error\(([a-z ]*)\): \(([0-9\.\-e]*), ([0-9\.\-e]*), ([0-9\.\-e]*)\) \(([0-9\.\-e]*), ([0-9\.\-e]*), ([0-9\.\-e]*)\)', line)\r
+ for line in open(self.gcodeFilename, "rt"):\r
+ res = re.search(';Model error\(([a-z ]*)\): \(([0-9\.\-e]*), ([0-9\.\-e]*), ([0-9\.\-e]*)\) \(([0-9\.\-e]*), ([0-9\.\-e]*), ([0-9\.\-e]*)\)', line)\r
if res != None:\r
v1 = util3d.Vector3(float(res.group(2)), float(res.group(3)), float(res.group(4)))\r
v2 = util3d.Vector3(float(res.group(5)), float(res.group(6)), float(res.group(7)))\r
errorList.append([v1, v2])\r
self.errorList = errorList\r
+\r
+ wx.CallAfter(self.updateToolbar)\r
wx.CallAfter(self.glCanvas.Refresh)\r
+ elif not os.path.isfile(self.gcodeFilename):\r
+ self.gcode = None\r
\r
def loadProgress(self, progress):\r
pass\r
cost = gcode.calculateCost()\r
if cost != False:\r
status += "\nCost: %s" % (cost)\r
+ profile.replaceGCodeTags(self.resultFilename, gcode)\r
wx.CallAfter(self.statusText.SetLabel, status)\r
wx.CallAfter(self.OnSliceDone)\r
\r
return
line = p.stdout.readline()
self.returnCode = p.wait()
- logfile = open(sliceRun.getExportFilename(self.filelist[self.fileIdx], "log"), "w")
- for logLine in self.progressLog:
- logfile.write(logLine)
- logfile.write('\n')
- logfile.close()
self.fileIdx += 1
if self.fileIdx == len(self.cmdList):
if len(self.filelist) > 1:
self._stitchMultiExtruder()
+ gcodeFilename = sliceRun.getExportFilename(self.filelist[0])
+ gcodefile = open(gcodeFilename, "a")
+ for logLine in self.progressLog:
+ if logLine.startswith('Model error('):
+ gcodefile.write(';%s\n' % (logLine))
+ gcodefile.close()
self.gcode = gcodeInterpreter.gcode()
- self.gcode.load(sliceRun.getExportFilename(self.filelist[0]))
+ self.gcode.load(gcodeFilename)
+ profile.replaceGCodeTags(gcodeFilename, self.gcode)
wx.CallAfter(self.notifyWindow.OnSliceDone, self)
else:
self.run()
#######################################################################################\r
'start.gcode': """;Sliced at: {day} {date} {time}\r
;Basic settings: Layer height: {layer_height} Walls: {wall_thickness} Fill: {fill_density}\r
+;Print time: {print_time}\r
+;Filament used: {filament_amount}m {filament_weight}g\r
+;Filament cost: {filament_cost}\r
G21 ;metric values\r
G90 ;absolute positioning\r
M107 ;start with the fan off\r
return time.strftime('%d %b %Y')\r
if tag == 'day':\r
return time.strftime('%a')\r
+ if tag == 'print_time':\r
+ return '#P_TIME#'\r
+ if tag == 'filament_amount':\r
+ return '#F_AMNT#'\r
+ if tag == 'filament_weight':\r
+ return '#F_WGHT#'\r
+ if tag == 'filament_cost':\r
+ return '#F_COST#'\r
if tag in ['print_speed', 'retraction_speed', 'travel_speed', 'max_z_speed', 'bottom_layer_speed', 'cool_min_feedrate']:\r
f = getProfileSettingFloat(tag) * 60\r
elif isProfileSetting(tag):\r
return str(int(f))\r
return str(f)\r
\r
+def replaceGCodeTags(filename, gcodeInt):\r
+ f = open(filename, 'r+')\r
+ data = f.read(2048)\r
+ data = data.replace('#P_TIME#', ('%5d:%02d' % (int(gcodeInt.totalMoveTimeMinute / 60), int(gcodeInt.totalMoveTimeMinute % 60)))[-8:])\r
+ data = data.replace('#F_AMNT#', ('%8.2f' % (gcodeInt.extrusionAmount / 1000))[-8:])\r
+ data = data.replace('#F_WGHT#', ('%8.2f' % (gcodeInt.calculateWeight() * 1000))[-8:])\r
+ cost = gcodeInt.calculateCost()\r
+ if cost == False:\r
+ cost = 'Unknown'\r
+ data = data.replace('#F_COST#', ('%8s' % (cost.split(' ')[0]))[-8:])\r
+ f.seek(0)\r
+ f.write(data)\r
+ f.close()\r
+\r
### Get aleration raw contents. (Used internally in Cura)\r
def getAlterationFile(filename):\r
#Check if we have a configuration file loaded, else load the default.\r