From dec94443db2e51065bca64ca5a5bd993bd5776f4 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Mon, 18 Jul 2016 19:39:47 +0200 Subject: [PATCH 1/2] Initialise extruder quality profile to a profile that is appropriate for this machine/variant/material Fixes CURA-1926 --- cura/Settings/ExtruderManager.py | 33 ++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 079b01598e..c736d89990 100644 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -187,18 +187,27 @@ class ExtruderManager(QObject): # Find a quality to use for this extruder. quality = container_registry.getEmptyInstanceContainer() - # First add any quality. Later, overwrite with preference if the preference is valid. - qualities = container_registry.findInstanceContainers(type = "quality") - if len(qualities) >= 1: - quality = qualities[0] - preferred_quality_id = machine_definition.getMetaDataEntry("preferred_quality") - if preferred_quality_id: - preferred_quality = container_registry.findInstanceContainers(id = preferred_quality_id, type = "quality") - if len(preferred_quality) >= 1: - quality = preferred_quality[0] - else: - UM.Logger.log("w", "The preferred quality \"%s\" of machine %s doesn't exist or is not a quality profile.", preferred_quality_id, machine_id) - # And leave it at the default quality. + search_criteria = { "type": "quality" } + if machine_definition.getMetaDataEntry("has_machine_quality"): + search_criteria["definition"] = machine_definition.id + if machine_definition.getMetaDataEntry("has_materials") and material: + search_criteria["material"] = material.id + else: + search_criteria["definition"] = "fdmprinter" + + preferred_quality = machine_definition.getMetaDataEntry("preferred_quality") + if preferred_quality: + search_criteria["id"] = preferred_quality + + containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(**search_criteria) + if not containers and preferred_quality: + UM.Logger.log("w", "The preferred quality \"%s\" of machine %s doesn't exist or is not a quality profile.", preferred_quality, machine_id) + search_criteria.pop("id", None) + containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(**search_criteria) + if containers: + quality = containers[0] + + container_stack.addContainer(containers[0]) container_stack.addContainer(quality) user_profile = container_registry.findInstanceContainers(type = "user", extruder = extruder_stack_id) From 4b7066e55bd222ae8c1cf3a7880bce276e9ab200 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Tue, 19 Jul 2016 08:29:47 +0200 Subject: [PATCH 2/2] Fix adding quality profile to stack twice CURA-1926 --- cura/Settings/ExtruderManager.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index c736d89990..744a6811c5 100644 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -207,7 +207,6 @@ class ExtruderManager(QObject): if containers: quality = containers[0] - container_stack.addContainer(containers[0]) container_stack.addContainer(quality) user_profile = container_registry.findInstanceContainers(type = "user", extruder = extruder_stack_id)