Gix buildplate handling in Material profile

CURA-4606
This commit is contained in:
Lipu Fei 2018-03-12 15:25:07 +01:00
parent 220e4a64c6
commit c54679ba2d

View file

@ -205,7 +205,7 @@ class XmlMaterialProfile(InstanceContainer):
self._addSettingElement(builder, instance) self._addSettingElement(builder, instance)
machine_container_map = {} machine_container_map = {}
machine_nozzle_map = {} machine_variant_map = {}
variant_manager = CuraApplication.getInstance().getVariantManager() variant_manager = CuraApplication.getInstance().getVariantManager()
material_manager = CuraApplication.getInstance().getMaterialManager() material_manager = CuraApplication.getInstance().getMaterialManager()
@ -225,13 +225,14 @@ class XmlMaterialProfile(InstanceContainer):
if definition_id not in machine_container_map: if definition_id not in machine_container_map:
machine_container_map[definition_id] = container machine_container_map[definition_id] = container
if definition_id not in machine_nozzle_map: if definition_id not in machine_variant_map:
machine_nozzle_map[definition_id] = {} machine_variant_map[definition_id] = {}
variant_name = container.getMetaDataEntry("variant_name") variant_name = container.getMetaDataEntry("variant_name")
if variant_name: if variant_name:
machine_nozzle_map[definition_id][variant_name] = variant_manager.getVariantNode(definition_id, variant_dict = {"variant_node": variant_manager.getVariantNode(definition_id, variant_name),
variant_name) "material_container": container}
machine_variant_map[definition_id][variant_name] = variant_dict
continue continue
machine_container_map[definition_id] = container machine_container_map[definition_id] = container
@ -265,28 +266,60 @@ class XmlMaterialProfile(InstanceContainer):
self._addSettingElement(builder, instance) self._addSettingElement(builder, instance)
# Find all hotend sub-profiles corresponding to this material and machine and add them to this profile. # Find all hotend sub-profiles corresponding to this material and machine and add them to this profile.
for hotend_name, variant_node in machine_nozzle_map[definition_id].items(): buildplate_dict = {}
# The hotend identifier is not the containers name, but its "name". for variant_name, variant_dict in machine_variant_map[definition_id].items():
builder.start("hotend", {"id": hotend_name}) variant_type = variant_dict["variant_node"].metadata["hardware_type"]
from cura.Machines.VariantManager import VariantType
variant_type = VariantType(variant_type)
if variant_type == VariantType.NOZZLE:
# The hotend identifier is not the containers name, but its "name".
builder.start("hotend", {"id": variant_name})
# Compatible is a special case, as it's added as a meta data entry (instead of an instance). # Compatible is a special case, as it's added as a meta data entry (instead of an instance).
compatible = variant_node.metadata.get("compatible") material_container = variant_dict["material_container"]
if compatible is not None: compatible = container.getMetaDataEntry("compatible")
builder.start("setting", {"key": "hardware compatible"}) if compatible is not None:
if compatible: builder.start("setting", {"key": "hardware compatible"})
builder.data("yes") if compatible:
else: builder.data("yes")
builder.data("no") else:
builder.end("setting") builder.data("no")
builder.end("setting")
for instance in variant_node.getContainer().findInstances(): for instance in material_container.findInstances():
if container.getInstance(instance.definition.key) and container.getProperty(instance.definition.key, "value") == instance.value: 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. # If the settings match that of the machine profile, just skip since we inherit the machine profile.
continue continue
self._addSettingElement(builder, instance) self._addSettingElement(builder, instance)
builder.end("hotend") if material_container.getMetaDataEntry("buildplate_compatible") and not buildplate_dict:
buildplate_dict["buildplate_compatible"] = material_container.getMetaDataEntry("buildplate_compatible")
buildplate_dict["buildplate_recommended"] = material_container.getMetaDataEntry("buildplate_recommended")
buildplate_dict["material_container"] = material_container
builder.end("hotend")
if buildplate_dict:
for variant_name in buildplate_dict["buildplate_compatible"]:
builder.start("buildplate", {"id": variant_name})
material_container = buildplate_dict["material_container"]
buildplate_compatible_dict = material_container.getMetaDataEntry("buildplate_compatible")
buildplate_recommended_dict = material_container.getMetaDataEntry("buildplate_recommended")
if buildplate_compatible_dict:
compatible = buildplate_compatible_dict[variant_name]
recommended = buildplate_recommended_dict[variant_name]
builder.start("setting", {"key": "hardware compatible"})
builder.data("yes" if compatible else "no")
builder.end("setting")
builder.start("setting", {"key": "hardware recommended"})
builder.data("yes" if recommended else "no")
builder.end("setting")
builder.end("buildplate")
builder.end("machine") builder.end("machine")
@ -842,6 +875,8 @@ class XmlMaterialProfile(InstanceContainer):
continue continue
settings = buildplate.iterfind("./um:setting", cls.__namespaces) settings = buildplate.iterfind("./um:setting", cls.__namespaces)
buildplate_compatibility = True
buildplate_recommended = True
for entry in settings: for entry in settings:
key = entry.get("key") key = entry.get("key")
if key == "hardware compatible": if key == "hardware compatible":
@ -849,8 +884,8 @@ class XmlMaterialProfile(InstanceContainer):
elif key == "hardware recommended": elif key == "hardware recommended":
buildplate_recommended = cls._parseCompatibleValue(entry.text) buildplate_recommended = cls._parseCompatibleValue(entry.text)
buildplate_map["buildplate_compatible"][buildplate_id] = buildplate_map["buildplate_compatible"] buildplate_map["buildplate_compatible"][buildplate_id] = buildplate_compatibility
buildplate_map["buildplate_recommended"][buildplate_id] = buildplate_map["buildplate_recommended"] buildplate_map["buildplate_recommended"][buildplate_id] = buildplate_recommended
for hotend in machine.iterfind("./um:hotend", cls.__namespaces): for hotend in machine.iterfind("./um:hotend", cls.__namespaces):
hotend_name = hotend.get("id") hotend_name = hotend.get("id")