Add filtering to extruderValues()

This commit is contained in:
Frederic98 2024-09-27 16:19:20 +02:00
parent af11d85ac9
commit aac3077f9d
2 changed files with 35 additions and 15 deletions

View File

@ -1,7 +1,7 @@
# Copyright (c) 2018 Ultimaker B.V. # Copyright (c) 2018 Ultimaker B.V.
# Cura is released under the terms of the LGPLv3 or higher. # Cura is released under the terms of the LGPLv3 or higher.
from typing import Any, List, Optional, TYPE_CHECKING from typing import Any, List, Optional, Union, TYPE_CHECKING
from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext
from UM.Settings.SettingFunction import SettingFunction from UM.Settings.SettingFunction import SettingFunction
@ -61,14 +61,20 @@ class CuraFormulaFunctions:
return value return value
def _getActiveExtruders(self, context: Optional["PropertyEvaluationContext"] = None) -> List[str]: def _getActiveExtruders(self, context: Optional["PropertyEvaluationContext"] = None,
where: Union[str, List[str]] = None, where_not: Union[str, List[str]] = None) -> List[str]:
machine_manager = self._application.getMachineManager() machine_manager = self._application.getMachineManager()
extruder_manager = self._application.getExtruderManager() extruder_manager = self._application.getExtruderManager()
global_stack = machine_manager.activeMachine global_stack = machine_manager.activeMachine
if isinstance(where, str):
where = [where]
if isinstance(where_not, str):
where_not = [where_not]
enabled_extruders = [] enabled_extruders = []
used_extruders = [] filtered_extruders = []
for extruder in extruder_manager.getActiveExtruderStacks(): for extruder in extruder_manager.getActiveExtruderStacks():
if not extruder.isEnabled: if not extruder.isEnabled:
continue continue
@ -76,18 +82,22 @@ class CuraFormulaFunctions:
if int(extruder.getMetaDataEntry("position")) >= global_stack.getProperty("machine_extruder_count", "value", context = context): if int(extruder.getMetaDataEntry("position")) >= global_stack.getProperty("machine_extruder_count", "value", context = context):
continue continue
enabled_extruders.append(extruder) enabled_extruders.append(extruder)
if extruder.getProperty("extruder_used", "value"): if where and not all(extruder.getProperty(key, "value", context=context) for key in where):
used_extruders.append(extruder) continue
if where_not and any(extruder.getProperty(key, "value", context=context) for key in where_not):
continue
filtered_extruders.append(extruder)
return used_extruders if used_extruders else enabled_extruders return filtered_extruders if filtered_extruders else enabled_extruders
# Gets all extruder values as a list for the given property. # Gets all extruder values as a list for the given property.
def getValuesInAllExtruders(self, property_key: str, def getValuesInAllExtruders(self, property_key: str,
context: Optional["PropertyEvaluationContext"] = None) -> List[Any]: context: Optional["PropertyEvaluationContext"] = None,
*, where: str = None, where_not: str = None) -> List[Any]:
global_stack = self._application.getMachineManager().activeMachine global_stack = self._application.getMachineManager().activeMachine
result = [] result = []
for extruder in self._getActiveExtruders(context): for extruder in self._getActiveExtruders(context, where=where, where_not=where_not):
value = extruder.getRawProperty(property_key, "value", context = context) value = extruder.getRawProperty(property_key, "value", context = context)
if value is None: if value is None:

View File

@ -300,6 +300,18 @@
"settable_per_meshgroup": false, "settable_per_meshgroup": false,
"type": "[int]" "type": "[int]"
}, },
"extruder_used":
{
"default_value": true,
"description": "Is this extruder used? This setting is controlled by Cura automatically.",
"label": "Extruder Used",
"settable_globally": false,
"settable_per_extruder": true,
"settable_per_mesh": false,
"settable_per_meshgroup": false,
"type": "bool",
"force_depends_on_settings": ["extruders_used"]
},
"machine_nozzle_tip_outer_diameter": "machine_nozzle_tip_outer_diameter":
{ {
"label": "Outer Nozzle Diameter", "label": "Outer Nozzle Diameter",
@ -2487,14 +2499,13 @@
"unit": "\u00b0C", "unit": "\u00b0C",
"type": "float", "type": "float",
"default_value": 0, "default_value": 0,
"resolve": "min(extruderValues('build_volume_temperature'))", "resolve": "min(extruderValues('build_volume_temperature', where='extruder_used'))",
"minimum_value": "-273.15", "minimum_value": "-273.15",
"minimum_value_warning": "0", "minimum_value_warning": "0",
"maximum_value_warning": "285", "maximum_value_warning": "285",
"enabled": "machine_heated_build_volume", "enabled": "machine_heated_build_volume",
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": false, "settable_per_extruder": false
"depends_on_settings": [ "extruders_used" ]
}, },
"material_print_temperature": "material_print_temperature":
{ {
@ -2580,7 +2591,7 @@
"description": "The default temperature used for the heated build plate. This should be the \"base\" temperature of a build plate. All other print temperatures should use offsets based on this value", "description": "The default temperature used for the heated build plate. This should be the \"base\" temperature of a build plate. All other print temperatures should use offsets based on this value",
"unit": "\u00b0C", "unit": "\u00b0C",
"type": "float", "type": "float",
"resolve": "max(extruderValues('default_material_bed_temperature'))", "resolve": "max(extruderValues('default_material_bed_temperature', where='extruder_used'))",
"default_value": 60, "default_value": 60,
"minimum_value": "-273.15", "minimum_value": "-273.15",
"minimum_value_warning": "build_volume_temperature", "minimum_value_warning": "build_volume_temperature",
@ -2599,7 +2610,7 @@
"type": "float", "type": "float",
"default_value": 60, "default_value": 60,
"value": "default_material_bed_temperature", "value": "default_material_bed_temperature",
"resolve": "max(extruderValues('material_bed_temperature'))", "resolve": "max(extruderValues('material_bed_temperature', where='extruder_used'))",
"minimum_value": "-273.15", "minimum_value": "-273.15",
"minimum_value_warning": "build_volume_temperature", "minimum_value_warning": "build_volume_temperature",
"maximum_value_warning": "130", "maximum_value_warning": "130",
@ -2607,8 +2618,7 @@
"enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"", "enabled": "machine_heated_bed and machine_gcode_flavor != \"UltiGCode\"",
"settable_per_mesh": false, "settable_per_mesh": false,
"settable_per_extruder": false, "settable_per_extruder": false,
"settable_per_meshgroup": false, "settable_per_meshgroup": false
"depends_on_settings": [ "extruders_used" ]
}, },
"material_bed_temperature_layer_0": "material_bed_temperature_layer_0":
{ {