From 82224c0ed0800e439342bb1f2b70d3762b239cb9 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 12 Jun 2017 10:55:59 +0200 Subject: [PATCH 1/3] Copy material into metadata if machine has specific material profiles when duplicating a quality profile CURA-3929 --- cura/Settings/ContainerManager.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index fc256e37be..dd4872b05b 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -929,6 +929,11 @@ class ContainerManager(QObject): quality_changes.setDefinition(self._container_registry.findContainers(id = "fdmprinter")[0]) else: quality_changes.setDefinition(QualityManager.getInstance().getParentMachineDefinition(machine_definition)) + whole_machine_definition = QualityManager.getInstance().getWholeMachineDefinition(machine_definition) + + if whole_machine_definition.getMetaDataEntry("has_materials"): + quality_changes.addMetaDataEntry("material", quality_container.getMetaDataEntry("material")) + from cura.CuraApplication import CuraApplication quality_changes.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) return quality_changes From a306b4dadacf6361d084afe95ea88e19b9a01014 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 12 Jun 2017 13:53:35 +0200 Subject: [PATCH 2/3] We now properly fall back if no basic material is found CURA-3911 --- cura/QualityManager.py | 9 ++++----- cura/Settings/MachineManager.py | 2 ++ 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/cura/QualityManager.py b/cura/QualityManager.py index ecea46a352..f13181ef06 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -101,12 +101,11 @@ class QualityManager: if quality_type: criteria["quality_type"] = quality_type result = self._getFilteredContainersForStack(machine_definition, material_containers, **criteria) - # Fall back to using generic materials and qualities if nothing could be found. if not result and material_containers and len(material_containers) == 1: basic_materials = self._getBasicMaterials(material_containers[0]) - result = self._getFilteredContainersForStack(machine_definition, basic_materials, **criteria) - + if basic_materials: + result = self._getFilteredContainersForStack(machine_definition, basic_materials, **criteria) return result[0] if result else None ## Find all suitable qualities for a combination of machine and material. @@ -179,7 +178,6 @@ class QualityManager: definition_id = material_container.getDefinition().getMetaDataEntry("quality_definition", material_container.getDefinition().getId()) else: definition_id = "fdmprinter" - if base_material: # There is a basic material specified criteria = { "type": "material", "name": base_material, "definition": definition_id } @@ -226,13 +224,13 @@ class QualityManager: # Stick the material IDs in a set material_ids = set() + for material_instance in material_containers: if material_instance is not None: # Add the parent material too. for basic_material in self._getBasicMaterials(material_instance): material_ids.add(basic_material.getId()) material_ids.add(material_instance.getId()) - containers = ContainerRegistry.getInstance().findInstanceContainers(**criteria) result = [] @@ -241,6 +239,7 @@ class QualityManager: if filter_by_material and container.getMetaDataEntry("material") not in material_ids and "global_quality" not in kwargs: continue result.append(container) + return result ## Get the parent machine definition of a machine definition. diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 8738b044fb..a5b4deb1bb 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -753,7 +753,9 @@ class MachineManager(QObject): candidate_quality = quality_manager.findQualityByQualityType(quality_type, quality_manager.getWholeMachineDefinition(machine_definition), [material_container]) + if not candidate_quality or isinstance(candidate_quality, type(self._empty_quality_changes_container)): + Logger.log("d", "Attempting to find fallback quality") # Fall back to a quality (which must be compatible with all other extruders) new_qualities = quality_manager.findAllUsableQualitiesForMachineAndExtruders( self._global_container_stack, ExtruderManager.getInstance().getExtruderStacks()) From 9a54ff426bc3b5d3ebf077cb5a3d90a00e653892 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 12 Jun 2017 15:14:25 +0200 Subject: [PATCH 3/3] FindAllQualitiesForMachineMaterial only looks with basic materials if it found them CURA-3911 --- cura/QualityManager.py | 3 ++- cura/Settings/MachineManager.py | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/QualityManager.py b/cura/QualityManager.py index f13181ef06..97cf2a356a 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -118,7 +118,8 @@ class QualityManager: result = self._getFilteredContainersForStack(machine_definition, [material_container], **criteria) if not result: basic_materials = self._getBasicMaterials(material_container) - result = self._getFilteredContainersForStack(machine_definition, basic_materials, **criteria) + if basic_materials: + result = self._getFilteredContainersForStack(machine_definition, basic_materials, **criteria) return result diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index a5b4deb1bb..33372a3228 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -759,7 +759,6 @@ class MachineManager(QObject): # Fall back to a quality (which must be compatible with all other extruders) new_qualities = quality_manager.findAllUsableQualitiesForMachineAndExtruders( self._global_container_stack, ExtruderManager.getInstance().getExtruderStacks()) - if new_qualities: new_quality_id = new_qualities[0].getId() # Just pick the first available one else: