mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-06 14:37:29 -06:00
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:
parent
37935a8a90
commit
ebe766a7c8
9 changed files with 24 additions and 22 deletions
|
@ -1001,9 +1001,9 @@ class ContainerManager(QObject):
|
||||||
|
|
||||||
# If the machine specifies qualities should be filtered, ensure we match the current criteria.
|
# If the machine specifies qualities should be filtered, ensure we match the current criteria.
|
||||||
if not machine_definition.getMetaDataEntry("has_machine_quality"):
|
if not machine_definition.getMetaDataEntry("has_machine_quality"):
|
||||||
quality_changes.setDefinition(self._container_registry.findDefinitionContainers(id = "fdmprinter")[0])
|
quality_changes.setDefinition("fdmprinter")
|
||||||
else:
|
else:
|
||||||
quality_changes.setDefinition(QualityManager.getInstance().getParentMachineDefinition(machine_definition))
|
quality_changes.setDefinition(QualityManager.getInstance().getParentMachineDefinition(machine_definition).getId())
|
||||||
|
|
||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
quality_changes.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
quality_changes.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
||||||
|
|
|
@ -284,7 +284,7 @@ class CuraContainerRegistry(ContainerRegistry):
|
||||||
|
|
||||||
quality_type_criteria = {"quality_type": quality_type}
|
quality_type_criteria = {"quality_type": quality_type}
|
||||||
if self._machineHasOwnQualities():
|
if self._machineHasOwnQualities():
|
||||||
profile.setDefinition(self._activeQualityDefinition())
|
profile.setDefinition(self._activeQualityDefinition().getId())
|
||||||
if self._machineHasOwnMaterials():
|
if self._machineHasOwnMaterials():
|
||||||
active_material_id = self._activeMaterialId()
|
active_material_id = self._activeMaterialId()
|
||||||
if active_material_id and active_material_id != "empty": # only update if there is an active material
|
if active_material_id and active_material_id != "empty": # only update if there is an active material
|
||||||
|
@ -294,7 +294,7 @@ class CuraContainerRegistry(ContainerRegistry):
|
||||||
quality_type_criteria["definition"] = profile.getDefinition().getId()
|
quality_type_criteria["definition"] = profile.getDefinition().getId()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
profile.setDefinition(ContainerRegistry.getInstance().findDefinitionContainers(id = "fdmprinter")[0])
|
profile.setDefinition(fdmprinter)
|
||||||
quality_type_criteria["definition"] = "fdmprinter"
|
quality_type_criteria["definition"] = "fdmprinter"
|
||||||
|
|
||||||
machine_definition = Application.getInstance().getGlobalContainerStack().getBottom()
|
machine_definition = Application.getInstance().getGlobalContainerStack().getBottom()
|
||||||
|
|
|
@ -56,7 +56,7 @@ class CuraStackBuilder:
|
||||||
new_extruder = cls.createExtruderStack(
|
new_extruder = cls.createExtruderStack(
|
||||||
new_extruder_id,
|
new_extruder_id,
|
||||||
definition = extruder_definition,
|
definition = extruder_definition,
|
||||||
machine_definition = machine_definition,
|
machine_definition_id = machine_definition.getId(),
|
||||||
quality = "default",
|
quality = "default",
|
||||||
material = "default",
|
material = "default",
|
||||||
variant = "default",
|
variant = "default",
|
||||||
|
@ -69,12 +69,13 @@ class CuraStackBuilder:
|
||||||
#
|
#
|
||||||
# \param new_stack_id The ID of the new stack.
|
# \param new_stack_id The ID of the new stack.
|
||||||
# \param definition The definition to base the new stack on.
|
# \param definition The definition to base the new stack on.
|
||||||
# \param machine_definition The machine definition to use for the user container.
|
# \param machine_definition_id The ID of the machine definition to use for
|
||||||
|
# the user container.
|
||||||
# \param kwargs You can add keyword arguments to specify IDs of containers to use for a specific type, for example "variant": "0.4mm"
|
# \param kwargs You can add keyword arguments to specify IDs of containers to use for a specific type, for example "variant": "0.4mm"
|
||||||
#
|
#
|
||||||
# \return A new Global stack instance with the specified parameters.
|
# \return A new Global stack instance with the specified parameters.
|
||||||
@classmethod
|
@classmethod
|
||||||
def createExtruderStack(cls, new_stack_id: str, definition: DefinitionContainerInterface, machine_definition: DefinitionContainerInterface, **kwargs) -> ExtruderStack:
|
def createExtruderStack(cls, new_stack_id: str, definition: DefinitionContainerInterface, machine_definition_id: str, **kwargs) -> ExtruderStack:
|
||||||
stack = ExtruderStack(new_stack_id)
|
stack = ExtruderStack(new_stack_id)
|
||||||
stack.setName(definition.getName())
|
stack.setName(definition.getName())
|
||||||
stack.setDefinition(definition)
|
stack.setDefinition(definition)
|
||||||
|
@ -87,7 +88,7 @@ class CuraStackBuilder:
|
||||||
user_container.addMetaDataEntry("extruder", new_stack_id)
|
user_container.addMetaDataEntry("extruder", new_stack_id)
|
||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
user_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
user_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
||||||
user_container.setDefinition(machine_definition)
|
user_container.setDefinition(machine_definition_id)
|
||||||
|
|
||||||
stack.setUserChanges(user_container)
|
stack.setUserChanges(user_container)
|
||||||
|
|
||||||
|
@ -136,7 +137,7 @@ class CuraStackBuilder:
|
||||||
user_container.addMetaDataEntry("machine", new_stack_id)
|
user_container.addMetaDataEntry("machine", new_stack_id)
|
||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
user_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
user_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
||||||
user_container.setDefinition(definition)
|
user_container.setDefinition(definition.getId())
|
||||||
|
|
||||||
stack.setUserChanges(user_container)
|
stack.setUserChanges(user_container)
|
||||||
|
|
||||||
|
@ -172,8 +173,7 @@ class CuraStackBuilder:
|
||||||
unique_container_name = ContainerRegistry.getInstance().uniqueName(container_name)
|
unique_container_name = ContainerRegistry.getInstance().uniqueName(container_name)
|
||||||
|
|
||||||
definition_changes_container = InstanceContainer(unique_container_name)
|
definition_changes_container = InstanceContainer(unique_container_name)
|
||||||
definition = container_stack.getBottom()
|
definition_changes_container.setDefinition(container_stack.getBottom().getId())
|
||||||
definition_changes_container.setDefinition(definition)
|
|
||||||
definition_changes_container.addMetaDataEntry("type", "definition_changes")
|
definition_changes_container.addMetaDataEntry("type", "definition_changes")
|
||||||
definition_changes_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
definition_changes_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
||||||
|
|
||||||
|
|
|
@ -379,7 +379,7 @@ class ExtruderManager(QObject):
|
||||||
user_profile.addMetaDataEntry("extruder", extruder_stack_id)
|
user_profile.addMetaDataEntry("extruder", extruder_stack_id)
|
||||||
from cura.CuraApplication import CuraApplication
|
from cura.CuraApplication import CuraApplication
|
||||||
user_profile.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
user_profile.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
||||||
user_profile.setDefinition(machine_definition)
|
user_profile.setDefinition(machine_definition.getId())
|
||||||
container_registry.addContainer(user_profile)
|
container_registry.addContainer(user_profile)
|
||||||
container_stack.addContainer(user_profile)
|
container_stack.addContainer(user_profile)
|
||||||
|
|
||||||
|
|
|
@ -124,7 +124,7 @@ class ThreeMFReader(MeshReader):
|
||||||
|
|
||||||
# Get the definition & set it
|
# Get the definition & set it
|
||||||
definition = QualityManager.getInstance().getParentMachineDefinition(global_container_stack.getBottom())
|
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()
|
setting_container = um_node.callDecoration("getStack").getTop()
|
||||||
|
|
||||||
|
|
|
@ -75,9 +75,9 @@ class GCodeWriter(MeshWriter):
|
||||||
def _createFlattenedContainerInstance(self, instance_container1, instance_container2):
|
def _createFlattenedContainerInstance(self, instance_container1, instance_container2):
|
||||||
flat_container = InstanceContainer(instance_container2.getName())
|
flat_container = InstanceContainer(instance_container2.getName())
|
||||||
if instance_container1.getDefinition():
|
if instance_container1.getDefinition():
|
||||||
flat_container.setDefinition(instance_container1.getDefinition())
|
flat_container.setDefinition(instance_container1.getDefinition().getId())
|
||||||
else:
|
else:
|
||||||
flat_container.setDefinition(instance_container2.getDefinition())
|
flat_container.setDefinition(instance_container2.getDefinition().getId())
|
||||||
flat_container.setMetaData(copy.deepcopy(instance_container2.getMetaData()))
|
flat_container.setMetaData(copy.deepcopy(instance_container2.getMetaData()))
|
||||||
|
|
||||||
for key in instance_container2.getAllKeys():
|
for key in instance_container2.getAllKeys():
|
||||||
|
|
|
@ -121,7 +121,7 @@ class LegacyProfileReader(ProfileReader):
|
||||||
Logger.log("e", "Dictionary of Doom has no translation. Is it the correct JSON file?")
|
Logger.log("e", "Dictionary of Doom has no translation. Is it the correct JSON file?")
|
||||||
return None
|
return None
|
||||||
current_printer_definition = global_container_stack.getBottom()
|
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.
|
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]
|
old_setting_expression = dict_of_doom["translation"][new_setting]
|
||||||
compiled = compile(old_setting_expression, new_setting, "eval")
|
compiled = compile(old_setting_expression, new_setting, "eval")
|
||||||
|
|
|
@ -496,8 +496,9 @@ class XmlMaterialProfile(InstanceContainer):
|
||||||
|
|
||||||
meta_data["approximate_diameter"] = str(round(float(property_values.get("diameter", 2.85)))) # In mm
|
meta_data["approximate_diameter"] = str(round(float(property_values.get("diameter", 2.85)))) # In mm
|
||||||
meta_data["properties"] = property_values
|
meta_data["properties"] = property_values
|
||||||
|
meta_data["definition"] = "fdmprinter"
|
||||||
|
|
||||||
self.setDefinition(ContainerRegistry.getInstance().findDefinitionContainers(id = "fdmprinter")[0])
|
self.setDefinition("fdmprinter")
|
||||||
|
|
||||||
common_compatibility = True
|
common_compatibility = True
|
||||||
settings = data.iterfind("./um:settings/um:setting", self.__namespaces)
|
settings = data.iterfind("./um:settings/um:setting", self.__namespaces)
|
||||||
|
@ -569,7 +570,7 @@ class XmlMaterialProfile(InstanceContainer):
|
||||||
is_new_material = True
|
is_new_material = True
|
||||||
|
|
||||||
new_material.setMetaData(copy.deepcopy(self.getMetaData()))
|
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
|
# Don't use setMetadata, as that overrides it for all materials with same base file
|
||||||
new_material.getMetaData()["compatible"] = machine_compatibility
|
new_material.getMetaData()["compatible"] = machine_compatibility
|
||||||
new_material.getMetaData()["machine_manufacturer"] = machine_manufacturer
|
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
|
# 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.setName(self.getName())
|
||||||
new_hotend_material.setMetaData(copy.deepcopy(self.getMetaData()))
|
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"])
|
new_hotend_material.addMetaDataEntry("variant", variant_containers[0]["id"])
|
||||||
# Don't use setMetadata, as that overrides it for all materials with same base file
|
# Don't use setMetadata, as that overrides it for all materials with same base file
|
||||||
new_hotend_material.getMetaData()["compatible"] = hotend_compatibility
|
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["approximate_diameter"] = str(round(float(property_values.get("diameter", 2.85)))) # In mm
|
||||||
base_metadata["properties"] = property_values
|
base_metadata["properties"] = property_values
|
||||||
|
base_metadata["definition"] = "fdmprinter"
|
||||||
|
|
||||||
compatible_entries = data.iterfind("./um:settings/um:setting[@key='hardware compatible']", cls.__namespaces)
|
compatible_entries = data.iterfind("./um:settings/um:setting[@key='hardware compatible']", cls.__namespaces)
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -74,7 +74,7 @@ def test_addContainerGoodSettingVersion(container_registry, definition_container
|
||||||
|
|
||||||
instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance")
|
instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance")
|
||||||
instance.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
instance.addMetaDataEntry("setting_version", CuraApplication.SettingVersion)
|
||||||
instance.setDefinition(definition_container)
|
instance.setDefinition(definition_container.getId())
|
||||||
|
|
||||||
mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting containers get registered.
|
mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting containers get registered.
|
||||||
with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container):
|
with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container):
|
||||||
|
@ -89,7 +89,7 @@ def test_addContainerNoSettingVersion(container_registry, definition_container):
|
||||||
|
|
||||||
instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance")
|
instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance")
|
||||||
#Don't add setting_version metadata.
|
#Don't add setting_version metadata.
|
||||||
instance.setDefinition(definition_container)
|
instance.setDefinition(definition_container.getId())
|
||||||
|
|
||||||
mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting container should not get registered.
|
mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting container should not get registered.
|
||||||
with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container):
|
with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container):
|
||||||
|
@ -104,7 +104,7 @@ def test_addContainerBadSettingVersion(container_registry, definition_container)
|
||||||
|
|
||||||
instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance")
|
instance = UM.Settings.InstanceContainer.InstanceContainer(container_id = "Test Instance")
|
||||||
instance.addMetaDataEntry("setting_version", 9001) #Wrong version!
|
instance.addMetaDataEntry("setting_version", 9001) #Wrong version!
|
||||||
instance.setDefinition(definition_container)
|
instance.setDefinition(definition_container.getId())
|
||||||
|
|
||||||
mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting container should not get registered.
|
mock_super_add_container = unittest.mock.MagicMock() #Take the role of the Uranium-ContainerRegistry where the resulting container should not get registered.
|
||||||
with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container):
|
with unittest.mock.patch("UM.Settings.ContainerRegistry.ContainerRegistry.addContainer", mock_super_add_container):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue