diff --git a/plugins/CuraEngineBackend/Cura.proto b/plugins/CuraEngineBackend/Cura.proto index 0c4803cc19..289c0a98a0 100644 --- a/plugins/CuraEngineBackend/Cura.proto +++ b/plugins/CuraEngineBackend/Cura.proto @@ -13,6 +13,7 @@ message Slice repeated ObjectList object_lists = 1; // The meshgroups to be printed one after another SettingList global_settings = 2; // The global settings used for the whole print job repeated Extruder extruders = 3; // The settings sent to each extruder object + repeated SettingExtruder global_inherits_stack = 4; //From which stack the setting would inherit if not defined in a stack. } message Extruder @@ -108,8 +109,14 @@ message Setting { bytes value = 2; // The value of the setting } +message SettingExtruder { + string name = 1; //The setting key. + + int32 extruder = 2; //From which extruder stack the setting should inherit. +} + message GCodePrefix { - bytes data = 2; // Header string to be prenpended before the rest of the gcode sent from the engine + bytes data = 2; //Header string to be prepended before the rest of the g-code sent from the engine. } message SlicingFinished { diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index a96b9ef857..689346448d 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -134,6 +134,7 @@ class StartSliceJob(Job): return self._buildGlobalSettingsMessage(stack) + self._buildGlobalInheritsStackMessage(stack) for extruder_stack in cura.Settings.ExtruderManager.getInstance().getMachineExtruders(stack.getId()): self._buildExtruderMessage(extruder_stack) @@ -216,6 +217,21 @@ class StartSliceJob(Job): else: setting_message.value = str(value).encode("utf-8") + ## Sends for some settings which extruder they should fallback to if not + # set. + # + # This is only set for settings that have the global_inherits_stack + # property. + # + # \param stack The global stack with all settings, from which to read the + # global_inherits_stack property. + def _buildGlobalInheritsStackMessage(self, stack): + for key in stack.getAllKeys(): + if stack.hasProperty(key, "global_inherits_stack"): + setting_extruder = self._slice_message.addRepeatedMessage("global_inherits_stack") + setting_extruder.name = key + setting_extruder.extruder = int(stack.getProperty(key, "global_inherits_stack")) + ## Check if a node has per object settings and ensure that they are set correctly in the message # \param node \type{SceneNode} Node to check. # \param message object_lists message to put the per object settings in