From d5878772e8edd70eeaf7b93bc49fc726005ce4ad Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 12 Jun 2018 16:12:03 +0200 Subject: [PATCH] Fix reading flow temperature graph from XML files These have their own nice little subtags that we don't even parse. Contributes to issue CURA-5034. --- .../XmlMaterialProfile/XmlMaterialProfile.py | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index dfb07a1129..2d53a70efe 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -563,7 +563,16 @@ class XmlMaterialProfile(InstanceContainer): for entry in settings: key = entry.get("key") if key in self.__material_settings_setting_map: - common_setting_values[self.__material_settings_setting_map[key]] = entry.text + if key == "processing temperature graph": #This setting has no setting text but subtags. + graph_nodes = entry.iterfind("./um:point", self.__namespaces) + graph_points = [] + for graph_node in graph_nodes: + flow = float(graph_node.get("flow")) + temperature = float(graph_node.get("temperature")) + graph_points.append([flow, temperature]) + common_setting_values[self.__material_settings_setting_map[key]] = str(graph_points) + else: + common_setting_values[self.__material_settings_setting_map[key]] = entry.text elif key in self.__unmapped_settings: if key == "hardware compatible": common_compatibility = self._parseCompatibleValue(entry.text) @@ -596,7 +605,16 @@ class XmlMaterialProfile(InstanceContainer): for entry in settings: key = entry.get("key") if key in self.__material_settings_setting_map: - machine_setting_values[self.__material_settings_setting_map[key]] = entry.text + if key == "processing temperature graph": #This setting has no setting text but subtags. + graph_nodes = entry.iterfind("./um:point", self.__namespaces) + graph_points = [] + for graph_node in graph_nodes: + flow = float(graph_node.get("flow")) + temperature = float(graph_node.get("temperature")) + graph_points.append([flow, temperature]) + machine_setting_values[self.__material_settings_setting_map[key]] = str(graph_points) + else: + machine_setting_values[self.__material_settings_setting_map[key]] = entry.text elif key in self.__unmapped_settings: if key == "hardware compatible": machine_compatibility = self._parseCompatibleValue(entry.text) @@ -713,7 +731,16 @@ class XmlMaterialProfile(InstanceContainer): for entry in settings: key = entry.get("key") if key in self.__material_settings_setting_map: - hotend_setting_values[self.__material_settings_setting_map[key]] = entry.text + if key == "processing temperature graph": #This setting has no setting text but subtags. + graph_nodes = entry.iterfind("./um:point", self.__namespaces) + graph_points = [] + for graph_node in graph_nodes: + flow = float(graph_node.get("flow")) + temperature = float(graph_node.get("temperature")) + graph_points.append([flow, temperature]) + hotend_setting_values[self.__material_settings_setting_map[key]] = str(graph_points) + else: + hotend_setting_values[self.__material_settings_setting_map[key]] = entry.text elif key in self.__unmapped_settings: if key == "hardware compatible": hotend_compatibility = self._parseCompatibleValue(entry.text)