_getBasicMaterial now correctly filters on variants as well

CURA-2248
This commit is contained in:
Jaime van Kessel 2016-10-06 13:49:43 +02:00
parent dadcf45f45
commit fb24e55268

View file

@ -93,8 +93,8 @@ class QualityManager:
# Fall back to using generic materials and qualities if nothing could be found. # Fall back to using generic materials and qualities if nothing could be found.
if not result and material_containers and len(material_containers) == 1: if not result and material_containers and len(material_containers) == 1:
basic_material = self._getBasicMaterial(material_containers[0]) basic_materials = self._getBasicMaterials(material_containers[0])
result = self._getFilteredContainersForStack(machine_definition, [basic_material], **criteria) result = self._getFilteredContainersForStack(machine_definition, basic_materials, **criteria)
return result[0] if result else None return result[0] if result else None
## Find all suitable qualities for a combination of machine and material. ## Find all suitable qualities for a combination of machine and material.
@ -106,8 +106,8 @@ class QualityManager:
criteria = {"type": "quality" } criteria = {"type": "quality" }
result = self._getFilteredContainersForStack(machine_definition, [material_container], **criteria) result = self._getFilteredContainersForStack(machine_definition, [material_container], **criteria)
if not result: if not result:
basic_material = self._getBasicMaterial(material_container) basic_materials = self._getBasicMaterials(material_container)
result = self._getFilteredContainersForStack(machine_definition, [basic_material], **criteria) result = self._getFilteredContainersForStack(machine_definition, basic_materials, **criteria)
return result return result
## Find all quality changes for a machine. ## Find all quality changes for a machine.
@ -157,16 +157,24 @@ class QualityManager:
# #
# This tries to find a generic or basic version of the given material. # This tries to find a generic or basic version of the given material.
# \param material_container \type{InstanceContainer} the material # \param material_container \type{InstanceContainer} the material
# \return \type{Option[InstanceContainer]} the basic material or None if one could not be found. # \return \type{List[InstanceContainer]} the basic material or None if one could not be found.
def _getBasicMaterial(self, material_container): def _getBasicMaterials(self, material_container):
base_material = material_container.getMetaDataEntry("material") base_material = material_container.getMetaDataEntry("material")
if material_container.getDefinition().getMetaDataEntry("has_machine_quality"):
definition_id = material_container.getDefinition().getMetaDataEntry("quality_definition", material_container.getDefinition().getId())
else:
definition_id = "fdmprinter"
if base_material: if base_material:
# There is a basic material specified # There is a basic material specified
criteria = { "type": "material", "name": base_material, "definition": "fdmprinter" } criteria = { "type": "material", "name": base_material, "definition": definition_id }
containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(**criteria) containers = UM.Settings.ContainerRegistry.getInstance().findInstanceContainers(**criteria)
return containers[0] if containers else None containers = [basic_material for basic_material in containers if
basic_material.getMetaDataEntry("variant") == material_container.getMetaDataEntry(
"variant")]
return containers
return None return []
def _getFilteredContainers(self, **kwargs): def _getFilteredContainers(self, **kwargs):
return self._getFilteredContainersForStack(None, None, **kwargs) return self._getFilteredContainersForStack(None, None, **kwargs)