diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index e26dab7399..be5a10e293 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -228,16 +228,23 @@ class CuraContainerRegistry(ContainerRegistry): Logger.log("e", "Incorrect profile [%s]. Could not find global profile", file_name) return { "status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "This profile {0} contains incorrect data, could not import it.", file_name)} - profile_definition = global_profile.getMetaDataEntry("definition") - expected_machine_definition = "fdmprinter" + + # In a profile we can have the quality_definition metadata, but if not, we get the definition + profile_definition = global_profile.getMetaDataEntry("quality_definition") + if not profile_definition: + profile_definition = global_profile.getMetaDataEntry("definition") + + # The expected machine definition may be the quality_definition if defined or the current definition id + expected_machine_definition = None if parseBool(global_container_stack.getMetaDataEntry("has_machine_quality", "False")): expected_machine_definition = global_container_stack.getMetaDataEntry("quality_definition") - if not expected_machine_definition: - expected_machine_definition = global_container_stack.definition.getId() + if not expected_machine_definition: + expected_machine_definition = global_container_stack.definition.getId() + if expected_machine_definition is not None and profile_definition is not None and profile_definition != expected_machine_definition: Logger.log("e", "Profile [%s] is for machine [%s] but the current active machine is [%s]. Will not import the profile", file_name, profile_definition, expected_machine_definition) return { "status": "error", - "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "The machine defined in profile {0} doesn't match with your current machine, could not import it.", file_name)} + "message": catalog.i18nc("@info:status Don't translate the XML tags or !", "The machine defined in profile {0} ({1}) doesn't match with your current machine ({2}), could not import it.", file_name, profile_definition, expected_machine_definition)} name_seed = os.path.splitext(os.path.basename(file_name))[0] new_name = self.uniqueName(name_seed) diff --git a/plugins/GCodeWriter/GCodeWriter.py b/plugins/GCodeWriter/GCodeWriter.py index d06332bec1..368942fd08 100644 --- a/plugins/GCodeWriter/GCodeWriter.py +++ b/plugins/GCodeWriter/GCodeWriter.py @@ -5,6 +5,7 @@ from UM.Mesh.MeshWriter import MeshWriter from UM.Logger import Logger from UM.Application import Application from UM.Settings.InstanceContainer import InstanceContainer +from UM.Util import parseBool from cura.Settings.ExtruderManager import ExtruderManager @@ -120,6 +121,10 @@ class GCodeWriter(MeshWriter): if flat_global_container.getMetaDataEntry("quality_type", None) is None: flat_global_container.addMetaDataEntry("quality_type", stack.quality.getMetaDataEntry("quality_type", "normal")) + # Ensure that quality_definition is set. (Can happen if we have empty quality changes). + if parseBool(stack.getMetaDataEntry("has_machine_quality", "False")): + flat_global_container.addMetaDataEntry("quality_definition", stack.getMetaDataEntry("quality_definition")) + serialized = flat_global_container.serialize() data = {"global_quality": serialized}