mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-07 06:57:28 -06:00
Gix buildplate handling in Material profile
CURA-4606
This commit is contained in:
parent
220e4a64c6
commit
c54679ba2d
1 changed files with 60 additions and 25 deletions
|
@ -205,7 +205,7 @@ class XmlMaterialProfile(InstanceContainer):
|
|||
self._addSettingElement(builder, instance)
|
||||
|
||||
machine_container_map = {}
|
||||
machine_nozzle_map = {}
|
||||
machine_variant_map = {}
|
||||
|
||||
variant_manager = CuraApplication.getInstance().getVariantManager()
|
||||
material_manager = CuraApplication.getInstance().getMaterialManager()
|
||||
|
@ -225,13 +225,14 @@ class XmlMaterialProfile(InstanceContainer):
|
|||
if definition_id not in machine_container_map:
|
||||
machine_container_map[definition_id] = container
|
||||
|
||||
if definition_id not in machine_nozzle_map:
|
||||
machine_nozzle_map[definition_id] = {}
|
||||
if definition_id not in machine_variant_map:
|
||||
machine_variant_map[definition_id] = {}
|
||||
|
||||
variant_name = container.getMetaDataEntry("variant_name")
|
||||
if variant_name:
|
||||
machine_nozzle_map[definition_id][variant_name] = variant_manager.getVariantNode(definition_id,
|
||||
variant_name)
|
||||
variant_dict = {"variant_node": variant_manager.getVariantNode(definition_id, variant_name),
|
||||
"material_container": container}
|
||||
machine_variant_map[definition_id][variant_name] = variant_dict
|
||||
continue
|
||||
|
||||
machine_container_map[definition_id] = container
|
||||
|
@ -265,28 +266,60 @@ 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_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": hotend_name})
|
||||
buildplate_dict = {}
|
||||
for variant_name, variant_dict in machine_variant_map[definition_id].items():
|
||||
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 = variant_node.metadata.get("compatible")
|
||||
if compatible is not None:
|
||||
builder.start("setting", {"key": "hardware compatible"})
|
||||
if compatible:
|
||||
builder.data("yes")
|
||||
else:
|
||||
builder.data("no")
|
||||
builder.end("setting")
|
||||
# Compatible is a special case, as it's added as a meta data entry (instead of an instance).
|
||||
material_container = variant_dict["material_container"]
|
||||
compatible = container.getMetaDataEntry("compatible")
|
||||
if compatible is not None:
|
||||
builder.start("setting", {"key": "hardware compatible"})
|
||||
if compatible:
|
||||
builder.data("yes")
|
||||
else:
|
||||
builder.data("no")
|
||||
builder.end("setting")
|
||||
|
||||
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
|
||||
for instance in material_container.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
|
||||
|
||||
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")
|
||||
|
||||
|
@ -842,6 +875,8 @@ class XmlMaterialProfile(InstanceContainer):
|
|||
continue
|
||||
|
||||
settings = buildplate.iterfind("./um:setting", cls.__namespaces)
|
||||
buildplate_compatibility = True
|
||||
buildplate_recommended = True
|
||||
for entry in settings:
|
||||
key = entry.get("key")
|
||||
if key == "hardware compatible":
|
||||
|
@ -849,8 +884,8 @@ class XmlMaterialProfile(InstanceContainer):
|
|||
elif key == "hardware recommended":
|
||||
buildplate_recommended = cls._parseCompatibleValue(entry.text)
|
||||
|
||||
buildplate_map["buildplate_compatible"][buildplate_id] = buildplate_map["buildplate_compatible"]
|
||||
buildplate_map["buildplate_recommended"][buildplate_id] = buildplate_map["buildplate_recommended"]
|
||||
buildplate_map["buildplate_compatible"][buildplate_id] = buildplate_compatibility
|
||||
buildplate_map["buildplate_recommended"][buildplate_id] = buildplate_recommended
|
||||
|
||||
for hotend in machine.iterfind("./um:hotend", cls.__namespaces):
|
||||
hotend_name = hotend.get("id")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue