chiark / gitweb /
Merge tag '15.01-RC8' into upstream
[cura.git] / Cura / util / sliceEngine.py
index 1989d692d4fb2344db46f3bb24153746c4fbeb91..ee884bd8bd9edf07d10cda5703ca56834d8fb685 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):
@@ -292,7 +298,10 @@ class Engine(object):
        def _runEngine(self, scene, overrides, old_thread, pluginConfig):
                if old_thread is not None:
                        if self._process is not None:
-                               self._process.terminate()
+                               try:
+                                       self._process.terminate()
+                               except:
+                                       pass
                        old_thread.join()
                self._callback(-1.0)
 
@@ -405,6 +414,11 @@ class Engine(object):
                        logThread.join()
                        self._result.addLog("Slicer process returned : %d" % returnCode)
                        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.floor(self._result.getFilamentWeight(0) * 1000.0))
+                               self._result.addReplaceTag('#F_COST#', self._result.getFilamentCost(0))
+                               self._result.applyReplaceTags()
                                plugin_error = pluginInfo.runPostProcessingPlugins(self._result, pluginConfig)
                                if plugin_error is not None:
                                        self._result.addLog(plugin_error)
@@ -414,6 +428,7 @@ class Engine(object):
                                self._callback(-1.0)
                        self._process = None
                except MemoryError:
+                       traceback.print_exc()
                        self._result.addLog("MemoryError")
                        self._callback(-1.0)
                finally:
@@ -457,7 +472,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()