Merge branch 'CURA-10599_fix_exclude_materials' of github.com:Ultimaker/Cura into 5.4

This commit is contained in:
Jaime van Kessel 2023-06-14 11:14:34 +02:00
commit 5d0d1d485b
No known key found for this signature in database
GPG key ID: C85F7A3AF1BAA7C4
3 changed files with 12 additions and 2 deletions

View file

@ -14,6 +14,7 @@ from cura.Machines.QualityChangesGroup import QualityChangesGroup # To construc
from cura.Machines.QualityGroup import QualityGroup # To construct groups of quality profiles that belong together. from cura.Machines.QualityGroup import QualityGroup # To construct groups of quality profiles that belong together.
from cura.Machines.QualityNode import QualityNode from cura.Machines.QualityNode import QualityNode
from cura.Machines.VariantNode import VariantNode from cura.Machines.VariantNode import VariantNode
from cura.Machines.MaterialNode import MaterialNode
import UM.FlameProfiler import UM.FlameProfiler
@ -167,13 +168,20 @@ class MachineNode(ContainerNode):
return self.global_qualities.get(self.preferred_quality_type, next(iter(self.global_qualities.values()))) return self.global_qualities.get(self.preferred_quality_type, next(iter(self.global_qualities.values())))
def isExcludedMaterial(self, material: MaterialNode) -> bool:
"""Returns whether the material should be excluded from the list of materials."""
for exclude_material in self.exclude_materials:
if exclude_material in material["id"]:
return True
return False
@UM.FlameProfiler.profile @UM.FlameProfiler.profile
def _loadAll(self) -> None: def _loadAll(self) -> None:
"""(Re)loads all variants under this printer.""" """(Re)loads all variants under this printer."""
container_registry = ContainerRegistry.getInstance() container_registry = ContainerRegistry.getInstance()
if not self.has_variants: if not self.has_variants:
self.variants["empty"] = VariantNode("empty_variant", machine = self) self.variants["empty"] = VariantNode("empty_variant", machine=self)
self.variants["empty"].materialsChanged.connect(self.materialsChanged) self.variants["empty"].materialsChanged.connect(self.materialsChanged)
else: else:
# Find all the variants for this definition ID. # Find all the variants for this definition ID.

View file

@ -60,7 +60,7 @@ class VariantNode(ContainerNode):
materials = list(materials_per_base_file.values()) materials = list(materials_per_base_file.values())
# Filter materials based on the exclude_materials property. # Filter materials based on the exclude_materials property.
filtered_materials = [material for material in materials if material["id"] not in self.machine.exclude_materials] filtered_materials = [material for material in materials if not self.machine.isExcludedMaterial(material)]
for material in filtered_materials: for material in filtered_materials:
base_file = material["base_file"] base_file = material["base_file"]

View file

@ -46,6 +46,7 @@ def getInstanceContainerSideEffect(*args, **kwargs):
def machine_node(): def machine_node():
mocked_machine_node = MagicMock() mocked_machine_node = MagicMock()
mocked_machine_node.container_id = "machine_1" mocked_machine_node.container_id = "machine_1"
mocked_machine_node.isExcludedMaterial = MagicMock(return_value=False)
mocked_machine_node.preferred_material = "preferred_material" mocked_machine_node.preferred_material = "preferred_material"
return mocked_machine_node return mocked_machine_node
@ -95,6 +96,7 @@ def test_variantNodeInit(container_registry, machine_node):
def test_variantNodeInit_excludedMaterial(container_registry, machine_node): def test_variantNodeInit_excludedMaterial(container_registry, machine_node):
machine_node.exclude_materials = ["material_1"] machine_node.exclude_materials = ["material_1"]
machine_node.isExcludedMaterial = MagicMock(side_effect=lambda material: material["id"] == "material_1")
node = createVariantNode("variant_1", machine_node, container_registry) node = createVariantNode("variant_1", machine_node, container_registry)
assert "material_1" not in node.materials assert "material_1" not in node.materials