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
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):
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)
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)
self._callback(-1.0)
self._process = None
except MemoryError:
+ traceback.print_exc()
self._result.addLog("MemoryError")
self._callback(-1.0)
finally:
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()