Merge pull request #490 from markwal/master

Add back placeholder expansion for start/end gcode
This commit is contained in:
awhiemstra 2015-11-16 15:09:58 +01:00
commit d39e8b7613
3 changed files with 40 additions and 3 deletions

View file

@ -273,4 +273,4 @@ class CuraEngineBackend(Backend):
self._process.terminate()
except: # terminating a process that is already terminating causes an exception, silently ignore this.
pass
self.slicingCancelled.emit()
self.slicingCancelled.emit()

View file

@ -2,6 +2,8 @@
# Cura is released under the terms of the AGPLv3 or higher.
import numpy
from string import Formatter
import traceback
from UM.Job import Job
from UM.Application import Application
@ -14,6 +16,19 @@ from cura.OneAtATimeIterator import OneAtATimeIterator
from . import Cura_pb2
## Formatter class that handles token expansion in start/end gcod
class GcodeStartEndFormatter(Formatter):
def get_value(self, key, args, kwargs):
if isinstance(key, str):
try:
return kwargs[key]
except KeyError:
Logger.log("w", "Unable to replace '%s' placeholder in start/end gcode", key)
return "{" + key + "}"
else:
Logger.log("w", "Incorrectly formatted placeholder '%s' in start/end gcode", key)
return "{" + str(key) + "}"
## Job class that handles sending the current scene data to CuraEngine
class StartSliceJob(Job):
def __init__(self, profile, socket):
@ -90,12 +105,28 @@ class StartSliceJob(Job):
self.setResult(True)
def _expandGcodeTokens(self, key, value, settings):
try:
# any setting can be used as a token
fmt = GcodeStartEndFormatter()
return str(fmt.format(value, **settings)).encode("utf-8")
except:
Logger.log("w", "Unabled to do token replacement on start/end gcode %s", traceback.format_exc())
return str(value).encode("utf-8")
def _sendSettings(self, profile):
msg = Cura_pb2.SettingList()
for key, value in profile.getAllSettingValues(include_machine = True).items():
settings = profile.getAllSettingValues(include_machine = True)
start_gcode = settings["machine_start_gcode"]
settings["material_bed_temp_prepend"] = not "{material_bed_temperature}" in start_gcode
settings["material_print_temp_prepend"] = not "{material_print_temperature" in start_gcode
for key, value in settings.items():
s = msg.settings.add()
s.name = key
s.value = str(value).encode("utf-8")
if key == "machine_start_gcode" or key == "machine_end_gcode":
s.value = self._expandGcodeTokens(key, value, settings)
else:
s.value = str(value).encode("utf-8")
self._socket.sendMessage(msg)

View file

@ -17,6 +17,12 @@
"description": "Gcode commands to be executed at the very end - separated by \\n.",
"default": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84"
},
"material_bed_temp_wait": {
"default": true
},
"material_print_temp_wait": {
"default": true
},
"machine_width": {
"description": "The width (X-direction) of the printable area.",
"default": 100