chiark / gitweb /
Fixing issue #850 as well as fixing plugins with UltiGCode.
authordaid <daid303@gmail.com>
Mon, 12 Jan 2015 06:46:13 +0000 (07:46 +0100)
committerdaid <daid303@gmail.com>
Mon, 12 Jan 2015 06:46:13 +0000 (07:46 +0100)
Cura/util/bigDataStorage.py
Cura/util/sliceEngine.py

index cfd347362fdb71ced7d66da5a03bb515b5415669..d1c4c86bceb6161fe3a787411ec10036c1cd8f51 100644 (file)
@@ -35,14 +35,16 @@ class BigDataStorage(object):
                                ret = self.activeRead(size)\r
                return ret\r
 \r
-       def replaceAtStart(self, key, value):\r
+       def replaceAtStart(self, dictionary):\r
                data = self._list[0].getvalue()\r
                block0 = data[0:2048]\r
-               value = (value + ' ' * len(key))[:len(key)]\r
-               block0 = block0.replace(key, value)\r
+               block1 = StringIO.StringIO()\r
+               block1.write(data[2048:])\r
+               self._list.insert(1, block1)\r
+               for key, value in dictionary.items():\r
+                       block0 = block0.replace(key, str(value))\r
                self._list[0] = StringIO.StringIO()\r
                self._list[0].write(block0)\r
-               self._list[0].write(data[2048:])\r
 \r
        def __len__(self):\r
                ret = 0\r
index 1a4e904c3d86487d3ac574e75960bb9a75eafcc8..5490390c255d563f18c229c4c194c60bea9340ac 100644 (file)
@@ -100,6 +100,9 @@ class EngineResult(object):
                        return None
                return _('%0.2f meter %0.0f gram') % (float(self._filamentMM[e]) / 1000.0, self.getFilamentWeight(e) * 1000.0)
 
+       def getFilamentAmountMeters(self, e=0):
+               return float(self._filamentMM[e]) / 1000.0
+
        def getLog(self):
                return self._engineLog
 
@@ -118,10 +121,13 @@ class EngineResult(object):
        def setHash(self, hash):
                self._modelHash = hash
 
+       def addReplaceTag(self, key, value):
+               self._replaceInfo[key] = value
+
+       def applyReplaceTags(self):
+               self._gcodeData.replaceAtStart(self._replaceInfo)
+
        def setFinished(self, result):
-               if result:
-                       for k, v in self._replaceInfo.items():
-                               self._gcodeData.replaceAtStart(k, v)
                self._finished = result
 
        def isFinished(self):
@@ -404,6 +410,11 @@ class Engine(object):
                        returnCode = self._process.wait()
                        logThread.join()
                        if returnCode == 0:
+                               self._result.addReplaceTag('#P_TIME#', self._result.getPrintTime())
+                               self._result.addReplaceTag('#F_AMNT#', self._result.getFilamentAmountMeters(0))
+                               self._result.addReplaceTag('#F_WGHT#', math.round(self._result.getFilamentWeight(0) * 1000.0))
+                               self._result.addReplaceTag('#F_COST#', self._result.getFilamentCost(0))
+                               self._result.applyReplaceTags()
                                plugin_error = pluginInfo.runPostProcessingPlugins(self._result)
                                if plugin_error is not None:
                                        print plugin_error
@@ -452,7 +463,7 @@ class Engine(object):
                                        radius = profile.getProfileSettingFloat('filament_diameter') / 2.0
                                        self._result._filamentMM[1] /= (math.pi * radius * radius)
                        elif line.startswith('Replace:'):
-                               self._result._replaceInfo[line.split(':')[1].strip()] = line.split(':')[2].strip()
+                               self._result.addReplaceTag(line.split(':')[1].strip(), line.split(':')[2].strip())
                        else:
                                self._result.addLog(line)
                        line = stderr.readline()