chiark / gitweb /
Remove use of logfile to store model errors. Added print time and filament usage...
authordaid <daid303@gmail.com>
Thu, 5 Jul 2012 12:12:13 +0000 (14:12 +0200)
committerdaid <daid303@gmail.com>
Thu, 5 Jul 2012 12:12:13 +0000 (14:12 +0200)
Cura/gui/preview3d.py
Cura/gui/projectPlanner.py
Cura/gui/sliceProgessPanel.py
Cura/util/profile.py

index 436ca81ec5e6e4f537e7bf437d6c9fe47d7f48e9..846017acf247f8a8b3313b06cb21964a344d8154 100644 (file)
@@ -209,7 +209,6 @@ class previewPanel(wx.Panel):
                        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
@@ -246,21 +245,20 @@ class previewPanel(wx.Panel):
                        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
index 4588cc99fd6deddddcdfcc5a0fe3af0b2ad350b7..ff3703a6407be3f40819464a320b06aa141bec72 100644 (file)
@@ -1018,6 +1018,7 @@ class ProjectSliceProgressWindow(wx.Frame):
                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
index b195c9d63e42a3ce9fffe4a7036ba538a9313485..a1f36aa51313a2cf5e2b1fea50b39d9f2dcf33d3 100644 (file)
@@ -156,17 +156,19 @@ class WorkerThread(threading.Thread):
                                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()
index f40f0e33a993cc930a72458a1760b34d944980b7..52178579424e7105bbfdc9c8b00b9f77875f9ab5 100644 (file)
@@ -83,6 +83,9 @@ alterationDefault = {
 #######################################################################################\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
@@ -392,6 +395,14 @@ def replaceTagMatch(m):
                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
@@ -404,6 +415,20 @@ def replaceTagMatch(m):
                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