chiark / gitweb /
Updated print window with statistics about the print. Filament used, and estimated...
authordaid <daid303@gmail.com>
Tue, 3 Apr 2012 10:06:02 +0000 (12:06 +0200)
committerdaid <daid303@gmail.com>
Tue, 3 Apr 2012 10:06:02 +0000 (12:06 +0200)
Cura/gui/preferencesDialog.py
Cura/gui/printWindow.py
Cura/util/gcodeInterpreter.py
Cura/util/profile.py

index 564a583c5728457373c0943e2897165ed742a21b..782ee338667782238b859967d4c79b31b0a3c06d 100644 (file)
@@ -25,6 +25,10 @@ class preferencesDialog(configBase.configWindowBase):
                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
index f4c22e03024a8a1b12edbd6c780a9c3dc346e198..ea86a6c9df04381ce87845d2646375a6ad644e5e 100644 (file)
@@ -24,6 +24,7 @@ class printWindow(wx.Frame):
                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
@@ -78,8 +79,13 @@ class printWindow(wx.Frame):
        \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
@@ -131,19 +137,19 @@ class printWindow(wx.Frame):
                                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
@@ -151,7 +157,7 @@ class printWindow(wx.Frame):
                        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
@@ -160,14 +166,14 @@ class printWindow(wx.Frame):
                                        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
@@ -177,3 +183,4 @@ class printWindow(wx.Frame):
                                                        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
index 06ebd5ac6d795fc4e708ab1a171070c65dea8105..3570d49e99d8e7b7979bb86ce982cd87d4d852ad 100644 (file)
@@ -7,6 +7,7 @@ import re
 import os
 
 from util import util3d
+from util import profile
 
 class gcodePath():
        def __init__(self, newType, pathType, startPoint):
@@ -31,6 +32,12 @@ class gcode():
        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()
index 2548ec8141614d7628e196f89dda0cf0060b7d6f..5845e14cc30bcfe33114a9791b5e4be8c20a8e9e 100644 (file)
@@ -69,6 +69,7 @@ preferencesDefaultSettings = {
        'machine_width': '205',\r
        'machine_depth': '205',\r
        'machine_height': '200',\r
+       'filament_density': '1300',\r
        'steps_per_e': '0',\r
        'serial_port': 'AUTO',\r
        'serial_baud': '250000',\r