From 20e0f8a82af24f32ba34888980f4178d0381bf5a Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Fri, 16 Feb 2018 11:00:48 +0100 Subject: [PATCH] WIP: Fix material serialization --- .../XmlMaterialProfile/XmlMaterialProfile.py | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 36a7733568..f35f15b737 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -190,6 +190,8 @@ class XmlMaterialProfile(InstanceContainer): machine_container_map = {} machine_nozzle_map = {} + variant_manager = CuraApplication.getInstance()._variant_manager + all_containers = registry.findInstanceContainers(GUID = self.getMetaDataEntry("GUID"), base_file = self.getId()) for container in all_containers: definition_id = container.getDefinition().getId() @@ -202,9 +204,10 @@ class XmlMaterialProfile(InstanceContainer): if definition_id not in machine_nozzle_map: machine_nozzle_map[definition_id] = {} - variant = container.getMetaDataEntry("variant") - if variant: - machine_nozzle_map[definition_id][variant] = container + variant_name = container.getMetaDataEntry("variant_name") + if variant_name: + machine_nozzle_map[definition_id][variant_name] = variant_manager.getVariantNode(definition_id, + variant_name) continue machine_container_map[definition_id] = container @@ -236,16 +239,12 @@ class XmlMaterialProfile(InstanceContainer): self._addSettingElement(builder, instance) # Find all hotend sub-profiles corresponding to this material and machine and add them to this profile. - for hotend_id, hotend in machine_nozzle_map[definition_id].items(): - variant_containers = registry.findInstanceContainersMetadata(id = hotend.getMetaDataEntry("variant")) - if not variant_containers: - continue - + for hotend_name, variant_node in machine_nozzle_map[definition_id].items(): # The hotend identifier is not the containers name, but its "name". - builder.start("hotend", {"id": variant_containers[0]["name"]}) + builder.start("hotend", {"id": hotend_name}) # Compatible is a special case, as it's added as a meta data entry (instead of an instance). - compatible = hotend.getMetaDataEntry("compatible") + compatible = variant_node.metadata.get("compatible") if compatible is not None: builder.start("setting", {"key": "hardware compatible"}) if compatible: @@ -254,7 +253,7 @@ class XmlMaterialProfile(InstanceContainer): builder.data("no") builder.end("setting") - for instance in hotend.findInstances(): + for instance in variant_node.getContainer().findInstances(): if container.getInstance(instance.definition.key) and container.getProperty(instance.definition.key, "value") == instance.value: # If the settings match that of the machine profile, just skip since we inherit the machine profile. continue