Set definition by their ID

The new function for setting the definition just adds the ID to the metadata.

Contributes to issue CURA-4243.
This commit is contained in:
Ghostkeeper 2017-11-24 16:45:09 +01:00
parent 37935a8a90
commit ebe766a7c8
No known key found for this signature in database
GPG key ID: 5252B696FB5E7C7A
9 changed files with 24 additions and 22 deletions

View file

@ -124,7 +124,7 @@ class ThreeMFReader(MeshReader):
# Get the definition & set it
definition = QualityManager.getInstance().getParentMachineDefinition(global_container_stack.getBottom())
um_node.callDecoration("getStack").getTop().setDefinition(definition)
um_node.callDecoration("getStack").getTop().setDefinition(definition.getId())
setting_container = um_node.callDecoration("getStack").getTop()

View file

@ -75,9 +75,9 @@ class GCodeWriter(MeshWriter):
def _createFlattenedContainerInstance(self, instance_container1, instance_container2):
flat_container = InstanceContainer(instance_container2.getName())
if instance_container1.getDefinition():
flat_container.setDefinition(instance_container1.getDefinition())
flat_container.setDefinition(instance_container1.getDefinition().getId())
else:
flat_container.setDefinition(instance_container2.getDefinition())
flat_container.setDefinition(instance_container2.getDefinition().getId())
flat_container.setMetaData(copy.deepcopy(instance_container2.getMetaData()))
for key in instance_container2.getAllKeys():

View file

@ -121,7 +121,7 @@ class LegacyProfileReader(ProfileReader):
Logger.log("e", "Dictionary of Doom has no translation. Is it the correct JSON file?")
return None
current_printer_definition = global_container_stack.getBottom()
profile.setDefinition(current_printer_definition)
profile.setDefinition(current_printer_definition.getId())
for new_setting in dict_of_doom["translation"]: # Evaluate all new settings that would get a value from the translations.
old_setting_expression = dict_of_doom["translation"][new_setting]
compiled = compile(old_setting_expression, new_setting, "eval")

View file

@ -496,8 +496,9 @@ class XmlMaterialProfile(InstanceContainer):
meta_data["approximate_diameter"] = str(round(float(property_values.get("diameter", 2.85)))) # In mm
meta_data["properties"] = property_values
meta_data["definition"] = "fdmprinter"
self.setDefinition(ContainerRegistry.getInstance().findDefinitionContainers(id = "fdmprinter")[0])
self.setDefinition("fdmprinter")
common_compatibility = True
settings = data.iterfind("./um:settings/um:setting", self.__namespaces)
@ -569,7 +570,7 @@ class XmlMaterialProfile(InstanceContainer):
is_new_material = True
new_material.setMetaData(copy.deepcopy(self.getMetaData()))
new_material.setDefinition(definition)
new_material.setDefinition(machine_id)
# Don't use setMetadata, as that overrides it for all materials with same base file
new_material.getMetaData()["compatible"] = machine_compatibility
new_material.getMetaData()["machine_manufacturer"] = machine_manufacturer
@ -623,7 +624,7 @@ class XmlMaterialProfile(InstanceContainer):
# Update the private directly, as we want to prevent the lookup that is done when using setName
new_hotend_material.setName(self.getName())
new_hotend_material.setMetaData(copy.deepcopy(self.getMetaData()))
new_hotend_material.setDefinition(definition)
new_hotend_material.setDefinition(machine_id)
new_hotend_material.addMetaDataEntry("variant", variant_containers[0]["id"])
# Don't use setMetadata, as that overrides it for all materials with same base file
new_hotend_material.getMetaData()["compatible"] = hotend_compatibility
@ -706,6 +707,7 @@ class XmlMaterialProfile(InstanceContainer):
base_metadata["approximate_diameter"] = str(round(float(property_values.get("diameter", 2.85)))) # In mm
base_metadata["properties"] = property_values
base_metadata["definition"] = "fdmprinter"
compatible_entries = data.iterfind("./um:settings/um:setting[@key='hardware compatible']", cls.__namespaces)
try: