mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-15 10:47:49 -06:00
Optimise starting slice job a bit
Moved some common code into a subroutine. Also replaced the start and end g-code directly in the settings list instead of checking for the key at each iteration of the loop.
This commit is contained in:
parent
3af37d5dbc
commit
1d6b7c71cb
1 changed files with 36 additions and 32 deletions
|
@ -208,6 +208,27 @@ class StartSliceJob(Job):
|
||||||
def isCancelled(self):
|
def isCancelled(self):
|
||||||
return self._is_cancelled
|
return self._is_cancelled
|
||||||
|
|
||||||
|
## Creates a dictionary of tokens to replace in g-code pieces.
|
||||||
|
#
|
||||||
|
# This indicates what should be replaced in the start and end g-codes.
|
||||||
|
# \param stack The stack to get the settings from to replace the tokens
|
||||||
|
# with.
|
||||||
|
# \return A dictionary of replacement tokens to the values they should be
|
||||||
|
# replaced with.
|
||||||
|
def _buildReplacementTokens(self, stack) -> dict:
|
||||||
|
result = {}
|
||||||
|
for key in stack.getAllKeys():
|
||||||
|
result[key] = stack.getProperty(key, "value")
|
||||||
|
Job.yieldThread()
|
||||||
|
|
||||||
|
result["print_bed_temperature"] = result["material_bed_temperature"] #Renamed settings.
|
||||||
|
result["print_temperature"] = result["material_print_temperature"]
|
||||||
|
result["time"] = time.strftime("%H:%M:%S") #Some extra settings.
|
||||||
|
result["date"] = time.strftime("%d-%m-%Y")
|
||||||
|
result["day"] = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][int(time.strftime("%w"))]
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
def _expandGcodeTokens(self, key, value, settings):
|
def _expandGcodeTokens(self, key, value, settings):
|
||||||
try:
|
try:
|
||||||
# any setting can be used as a token
|
# any setting can be used as a token
|
||||||
|
@ -222,18 +243,16 @@ class StartSliceJob(Job):
|
||||||
message = self._slice_message.addRepeatedMessage("extruders")
|
message = self._slice_message.addRepeatedMessage("extruders")
|
||||||
message.id = int(stack.getMetaDataEntry("position"))
|
message.id = int(stack.getMetaDataEntry("position"))
|
||||||
|
|
||||||
|
settings = self._buildReplacementTokens(stack)
|
||||||
|
|
||||||
|
#Also send the material GUID. This is a setting in fdmprinter, but we have no interface for it.
|
||||||
material_instance_container = stack.findContainer({"type": "material"})
|
material_instance_container = stack.findContainer({"type": "material"})
|
||||||
|
if material_instance_container:
|
||||||
|
settings["material_guid"] = material_instance_container.getMetaDataEntry("GUID", "")
|
||||||
|
|
||||||
settings = {}
|
#Replace the setting tokens in start and end g-code.
|
||||||
for key in stack.getAllKeys():
|
settings["machine_extruder_start_code"] = self._expandGcodeTokens("machine_extruder_start_code", settings["machine_extruder_start_code"], settings)
|
||||||
settings[key] = stack.getProperty(key, "value")
|
settings["machine_extruder_end_code"] = self._expandGcodeTokens("machine_extruder_end_code", settings["machine_extruder_end_code"], settings)
|
||||||
Job.yieldThread()
|
|
||||||
|
|
||||||
settings["print_bed_temperature"] = settings["material_bed_temperature"] #Renamed settings.
|
|
||||||
settings["print_temperature"] = settings["material_print_temperature"]
|
|
||||||
settings["time"] = time.strftime("%H:%M:%S") #Some extra settings.
|
|
||||||
settings["date"] = time.strftime("%d-%m-%Y")
|
|
||||||
settings["day"] = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][int(time.strftime("%w"))]
|
|
||||||
|
|
||||||
for key, value in settings.items():
|
for key, value in settings.items():
|
||||||
# Do not send settings that are not settable_per_extruder.
|
# Do not send settings that are not settable_per_extruder.
|
||||||
|
@ -241,13 +260,7 @@ class StartSliceJob(Job):
|
||||||
continue
|
continue
|
||||||
setting = message.getMessage("settings").addRepeatedMessage("settings")
|
setting = message.getMessage("settings").addRepeatedMessage("settings")
|
||||||
setting.name = key
|
setting.name = key
|
||||||
if key == "material_guid" and material_instance_container:
|
setting.value = str(value).encode("utf-8")
|
||||||
# Also send the material GUID. This is a setting in fdmprinter, but we have no interface for it.
|
|
||||||
setting.value = str(material_instance_container.getMetaDataEntry("GUID", "")).encode("utf-8")
|
|
||||||
elif key == "machine_extruder_start_code" or key == "machine_extruder_end_code":
|
|
||||||
setting.value = self._expandGcodeTokens(key, value, settings)
|
|
||||||
else:
|
|
||||||
setting.value = str(stack.getProperty(key, "value")).encode("utf-8")
|
|
||||||
Job.yieldThread()
|
Job.yieldThread()
|
||||||
|
|
||||||
## Create extruder message from global stack
|
## Create extruder message from global stack
|
||||||
|
@ -268,11 +281,7 @@ class StartSliceJob(Job):
|
||||||
# The settings are taken from the global stack. This does not include any
|
# The settings are taken from the global stack. This does not include any
|
||||||
# per-extruder settings or per-object settings.
|
# per-extruder settings or per-object settings.
|
||||||
def _buildGlobalSettingsMessage(self, stack):
|
def _buildGlobalSettingsMessage(self, stack):
|
||||||
keys = stack.getAllKeys()
|
settings = self._buildReplacementTokens(stack)
|
||||||
settings = {}
|
|
||||||
for key in keys:
|
|
||||||
settings[key] = stack.getProperty(key, "value")
|
|
||||||
Job.yieldThread()
|
|
||||||
|
|
||||||
start_gcode = settings["machine_start_gcode"]
|
start_gcode = settings["machine_start_gcode"]
|
||||||
#Pre-compute material material_bed_temp_prepend and material_print_temp_prepend
|
#Pre-compute material material_bed_temp_prepend and material_print_temp_prepend
|
||||||
|
@ -281,19 +290,13 @@ class StartSliceJob(Job):
|
||||||
print_temperature_settings = {"material_print_temperature", "material_print_temperature_layer_0", "default_material_print_temperature", "material_initial_print_temperature", "material_final_print_temperature", "material_standby_temperature"}
|
print_temperature_settings = {"material_print_temperature", "material_print_temperature_layer_0", "default_material_print_temperature", "material_initial_print_temperature", "material_final_print_temperature", "material_standby_temperature"}
|
||||||
settings["material_print_temp_prepend"] = all(("{" + setting + "}" not in start_gcode for setting in print_temperature_settings))
|
settings["material_print_temp_prepend"] = all(("{" + setting + "}" not in start_gcode for setting in print_temperature_settings))
|
||||||
|
|
||||||
settings["print_bed_temperature"] = settings["material_bed_temperature"]
|
#Replace the setting tokens in start and end g-code.
|
||||||
settings["print_temperature"] = settings["material_print_temperature"]
|
settings["machine_start_gcode"] = self._expandGcodeTokens("machine_start_gcode", settings["machine_start_gcode"], settings)
|
||||||
|
settings["machine_end_gcode"] = self._expandGcodeTokens("machine_end_gcode", settings["machine_end_gcode"], settings)
|
||||||
settings["time"] = time.strftime('%H:%M:%S')
|
|
||||||
settings["date"] = time.strftime('%d-%m-%Y')
|
|
||||||
settings["day"] = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][int(time.strftime('%w'))]
|
|
||||||
|
|
||||||
for key, value in settings.items(): #Add all submessages for each individual setting.
|
for key, value in settings.items(): #Add all submessages for each individual setting.
|
||||||
setting_message = self._slice_message.getMessage("global_settings").addRepeatedMessage("settings")
|
setting_message = self._slice_message.getMessage("global_settings").addRepeatedMessage("settings")
|
||||||
setting_message.name = key
|
setting_message.name = key
|
||||||
if key == "machine_start_gcode" or key == "machine_end_gcode": #If it's a g-code message, use special formatting.
|
|
||||||
setting_message.value = self._expandGcodeTokens(key, value, settings)
|
|
||||||
else:
|
|
||||||
setting_message.value = str(value).encode("utf-8")
|
setting_message.value = str(value).encode("utf-8")
|
||||||
Job.yieldThread()
|
Job.yieldThread()
|
||||||
|
|
||||||
|
@ -356,3 +359,4 @@ class StartSliceJob(Job):
|
||||||
|
|
||||||
relations_set.add(relation.target.key)
|
relations_set.add(relation.target.key)
|
||||||
self._addRelations(relations_set, relation.target.relations)
|
self._addRelations(relations_set, relation.target.relations)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue