mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-18 04:25:56 +08:00
Add filtering to extruderValues()
This commit is contained in:
parent
af11d85ac9
commit
aac3077f9d
@ -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:
|
||||||
|
@ -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":
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user