From c2fab4da4728aa95e07f93b6f5cbb79aad28cae8 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 18 Jul 2016 10:25:51 +0200 Subject: [PATCH 1/2] Print information handles single extrusion machines correctly again CURA-1931 and CURA-1038 --- cura/PrintInformation.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index 6ba1274a49..4dedf9db16 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -89,8 +89,12 @@ class PrintInformation(QObject): for index, amount in enumerate(material_amounts): ## Find the right extruder stack. As the list isn't sorted because it's a annoying generator, we do some # list comprehension filtering to solve this for us. - extruder_stack = [extruder for extruder in extruder_stacks if extruder.getMetaDataEntry("position") == str(index)][0] - density = extruder_stack.getMetaDataEntry("properties", {}).get("density", 0) + if extruder_stacks: # Multi extrusion machine + extruder_stack = [extruder for extruder in extruder_stacks if extruder.getMetaDataEntry("position") == str(index)][0] + density = extruder_stack.getMetaDataEntry("properties", {}).get("density", 0) + else: # Machine with no extruder stacks + density = Application.getInstance().getGlobalContainerStack().getMetaDataEntry("properties", {}).get("density", 0) + self._material_weights.append(float(amount) * float(density)) self._material_lengths.append(round((amount / (math.pi * r ** 2)) / 1000, 2)) self.materialLengthsChanged.emit() From 48d39ce3876937b414f76d6bcee70d06bf86565a Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 18 Jul 2016 11:46:12 +0200 Subject: [PATCH 2/2] material_guid is now also a setting in fdmprinter CURA-1836 --- plugins/CuraEngineBackend/StartSliceJob.py | 15 ++++++++------- resources/definitions/fdmprinter.def.json | 8 ++++++++ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 5b715230e2..a726e239e0 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -174,18 +174,19 @@ class StartSliceJob(Job): def _buildExtruderMessage(self, stack): message = self._slice_message.addRepeatedMessage("extruders") message.id = int(stack.getMetaDataEntry("position")) + + material_instance_container = stack.findContainer({"type": "material"}) + for key in stack.getAllKeys(): setting = message.getMessage("settings").addRepeatedMessage("settings") setting.name = key - setting.value = str(stack.getProperty(key, "value")).encode("utf-8") + if key == "material_guid" and material_instance_container: + # 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") + else: + setting.value = str(stack.getProperty(key, "value")).encode("utf-8") Job.yieldThread() - # ALso send the material GUID as a setting. - material_instance_container = stack.findContainer({"type": "material"}) - if material_instance_container: - setting = message.getMessage("settings").addRepeatedMessage("settings") - setting.name = "material_GUID" - setting.value = str(material_instance_container.getMetaDataEntry("GUID", "")).encode("utf-8") ## Sends all global settings to the engine. # # The settings are taken from the global stack. This does not include any diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 8833c175f3..c54b8e85f4 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -57,6 +57,14 @@ "settable_per_extruder": false, "settable_per_meshgroup": false }, + "material_guid": + { + "label": "Material GUID", + "description": "GUID of the material. This is set automatically. ", + "default_value": "", + "type": "str", + "enabled": false + }, "material_bed_temp_wait": { "label": "Wait for bed heatup",