From 0d8b625bf8acea9c32156d7779a31289360d5389 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 26 Apr 2019 15:25:31 +0200 Subject: [PATCH 1/2] Properly cache slice values to speed up sending the slice --- plugins/CuraEngineBackend/StartSliceJob.py | 33 +++++++++++++--------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index d9e1a7806d..9442613207 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -334,21 +334,23 @@ class StartSliceJob(Job): return result + def _cacheAllExtruderSettings(self): + global_stack = cast(ContainerStack, CuraApplication.getInstance().getGlobalContainerStack()) + + # NB: keys must be strings for the string formatter + self._all_extruders_settings = { + "-1": self._buildReplacementTokens(global_stack) + } + for extruder_stack in ExtruderManager.getInstance().getActiveExtruderStacks(): + extruder_nr = extruder_stack.getProperty("extruder_nr", "value") + self._all_extruders_settings[str(extruder_nr)] = self._buildReplacementTokens(extruder_stack) + ## Replace setting tokens in a piece of g-code. # \param value A piece of g-code to replace tokens in. # \param default_extruder_nr Stack nr to use when no stack nr is specified, defaults to the global stack def _expandGcodeTokens(self, value: str, default_extruder_nr: int = -1) -> str: if not self._all_extruders_settings: - global_stack = cast(ContainerStack, CuraApplication.getInstance().getGlobalContainerStack()) - - # NB: keys must be strings for the string formatter - self._all_extruders_settings = { - "-1": self._buildReplacementTokens(global_stack) - } - - for extruder_stack in ExtruderManager.getInstance().getActiveExtruderStacks(): - extruder_nr = extruder_stack.getProperty("extruder_nr", "value") - self._all_extruders_settings[str(extruder_nr)] = self._buildReplacementTokens(extruder_stack) + self._cacheAllExtruderSettings() try: # any setting can be used as a token @@ -364,8 +366,10 @@ class StartSliceJob(Job): def _buildExtruderMessage(self, stack: ContainerStack) -> None: message = self._slice_message.addRepeatedMessage("extruders") message.id = int(stack.getMetaDataEntry("position")) - - settings = self._buildReplacementTokens(stack) + if not self._all_extruders_settings: + self._cacheAllExtruderSettings() + extruder_nr = stack.getProperty("extruder_nr", "value") + settings = self._all_extruders_settings[str(extruder_nr)].copy() # Also send the material GUID. This is a setting in fdmprinter, but we have no interface for it. settings["material_guid"] = stack.material.getMetaDataEntry("GUID", "") @@ -389,7 +393,10 @@ class StartSliceJob(Job): # The settings are taken from the global stack. This does not include any # per-extruder settings or per-object settings. def _buildGlobalSettingsMessage(self, stack: ContainerStack) -> None: - settings = self._buildReplacementTokens(stack) + if not self._all_extruders_settings: + self._cacheAllExtruderSettings() + + settings = self._all_extruders_settings["-1"].copy() # Pre-compute material material_bed_temp_prepend and material_print_temp_prepend start_gcode = settings["machine_start_gcode"] From 04c39824cb8f30df43c15c1b2132073b75c43cb0 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 26 Apr 2019 15:39:28 +0200 Subject: [PATCH 2/2] Fix typing --- plugins/CuraEngineBackend/StartSliceJob.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 9442613207..b88a4a33d2 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -355,6 +355,8 @@ class StartSliceJob(Job): try: # any setting can be used as a token fmt = GcodeStartEndFormatter(default_extruder_nr = default_extruder_nr) + if self._all_extruders_settings is None: + return "" settings = self._all_extruders_settings.copy() settings["default_extruder_nr"] = default_extruder_nr return str(fmt.format(value, **settings)) @@ -368,6 +370,10 @@ class StartSliceJob(Job): message.id = int(stack.getMetaDataEntry("position")) if not self._all_extruders_settings: self._cacheAllExtruderSettings() + + if self._all_extruders_settings is None: + return + extruder_nr = stack.getProperty("extruder_nr", "value") settings = self._all_extruders_settings[str(extruder_nr)].copy() @@ -396,6 +402,9 @@ class StartSliceJob(Job): if not self._all_extruders_settings: self._cacheAllExtruderSettings() + if self._all_extruders_settings is None: + return + settings = self._all_extruders_settings["-1"].copy() # Pre-compute material material_bed_temp_prepend and material_print_temp_prepend