mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-25 07:33:57 -06:00
Fix quality lookup
CURA-5694 For a machine, if it has extruder-specific qualities, when we look up extruder qualities, we should NOT fall back to use the global qualities.
This commit is contained in:
parent
5139e61475
commit
d01ec7872d
2 changed files with 23 additions and 11 deletions
|
@ -200,14 +200,19 @@ class QualityManager(QObject):
|
||||||
machine_definition_id = getMachineDefinitionIDForQualitySearch(machine.definition)
|
machine_definition_id = getMachineDefinitionIDForQualitySearch(machine.definition)
|
||||||
|
|
||||||
# This determines if we should only get the global qualities for the global stack and skip the global qualities for the extruder stacks
|
# This determines if we should only get the global qualities for the global stack and skip the global qualities for the extruder stacks
|
||||||
has_variants = machine.getHasVariants()
|
has_machine_specific_qualities = machine.getHasMachineQuality()
|
||||||
has_materials = machine.getHasMaterials()
|
|
||||||
has_variants_or_materials = has_variants or has_materials
|
|
||||||
|
|
||||||
# To find the quality container for the GlobalStack, check in the following fall-back manner:
|
# To find the quality container for the GlobalStack, check in the following fall-back manner:
|
||||||
# (1) the machine-specific node
|
# (1) the machine-specific node
|
||||||
# (2) the generic node
|
# (2) the generic node
|
||||||
machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(machine_definition_id)
|
machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(machine_definition_id)
|
||||||
|
# Check if this machine has specific quality profiles for its extruders, if so, when looking up extruder
|
||||||
|
# qualities, we should not fall back to use the global qualities.
|
||||||
|
has_extruder_specific_qualities = False
|
||||||
|
if machine_node:
|
||||||
|
if machine_node.children_map:
|
||||||
|
has_extruder_specific_qualities = True
|
||||||
|
|
||||||
default_machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(self._default_machine_definition_id)
|
default_machine_node = self._machine_nozzle_buildplate_material_quality_type_to_quality_dict.get(self._default_machine_definition_id)
|
||||||
nodes_to_check = [machine_node, default_machine_node]
|
nodes_to_check = [machine_node, default_machine_node]
|
||||||
|
|
||||||
|
@ -215,12 +220,10 @@ class QualityManager(QObject):
|
||||||
quality_group_dict = {}
|
quality_group_dict = {}
|
||||||
for node in nodes_to_check:
|
for node in nodes_to_check:
|
||||||
if node and node.quality_type_map:
|
if node and node.quality_type_map:
|
||||||
# Only include global qualities
|
quality_node = list(node.quality_type_map.values())[0]
|
||||||
if has_variants_or_materials:
|
is_global_quality = parseBool(quality_node.metadata.get("global_quality", False))
|
||||||
quality_node = list(node.quality_type_map.values())[0]
|
if not is_global_quality:
|
||||||
is_global_quality = parseBool(quality_node.metadata.get("global_quality", False))
|
continue
|
||||||
if not is_global_quality:
|
|
||||||
continue
|
|
||||||
|
|
||||||
for quality_type, quality_node in node.quality_type_map.items():
|
for quality_type, quality_node in node.quality_type_map.items():
|
||||||
quality_group = QualityGroup(quality_node.metadata["name"], quality_type)
|
quality_group = QualityGroup(quality_node.metadata["name"], quality_type)
|
||||||
|
@ -302,9 +305,9 @@ class QualityManager(QObject):
|
||||||
else:
|
else:
|
||||||
nodes_to_check += [default_machine_node]
|
nodes_to_check += [default_machine_node]
|
||||||
|
|
||||||
for node in nodes_to_check:
|
for node_idx, node in enumerate(nodes_to_check):
|
||||||
if node and node.quality_type_map:
|
if node and node.quality_type_map:
|
||||||
if has_variants_or_materials:
|
if has_extruder_specific_qualities:
|
||||||
# Only include variant qualities; skip non global qualities
|
# Only include variant qualities; skip non global qualities
|
||||||
quality_node = list(node.quality_type_map.values())[0]
|
quality_node = list(node.quality_type_map.values())[0]
|
||||||
is_global_quality = parseBool(quality_node.metadata.get("global_quality", False))
|
is_global_quality = parseBool(quality_node.metadata.get("global_quality", False))
|
||||||
|
@ -320,6 +323,12 @@ class QualityManager(QObject):
|
||||||
if position not in quality_group.nodes_for_extruders:
|
if position not in quality_group.nodes_for_extruders:
|
||||||
quality_group.nodes_for_extruders[position] = quality_node
|
quality_group.nodes_for_extruders[position] = quality_node
|
||||||
|
|
||||||
|
# If the machine has its own specific qualities, for extruders, it should skip the global qualities
|
||||||
|
# and use the material/variant specific qualities.
|
||||||
|
if has_extruder_specific_qualities:
|
||||||
|
if node_idx == len(nodes_to_check) - 1:
|
||||||
|
break
|
||||||
|
|
||||||
# Update availabilities for each quality group
|
# Update availabilities for each quality group
|
||||||
self._updateQualityGroupsAvailability(machine, quality_group_dict.values())
|
self._updateQualityGroupsAvailability(machine, quality_group_dict.values())
|
||||||
|
|
||||||
|
|
|
@ -196,6 +196,9 @@ class GlobalStack(CuraContainerStack):
|
||||||
def getHasVariants(self) -> bool:
|
def getHasVariants(self) -> bool:
|
||||||
return parseBool(self.getMetaDataEntry("has_variants", False))
|
return parseBool(self.getMetaDataEntry("has_variants", False))
|
||||||
|
|
||||||
|
def getHasMachineQuality(self) -> bool:
|
||||||
|
return parseBool(self.getMetaDataEntry("has_machine_quality", False))
|
||||||
|
|
||||||
|
|
||||||
## private:
|
## private:
|
||||||
global_stack_mime = MimeType(
|
global_stack_mime = MimeType(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue