86 lines
2.8 KiB
Python
86 lines
2.8 KiB
Python
# boolean_input_value_switch.py
|
|
|
|
import random
|
|
|
|
class BooleanInputValueSwitch:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"FLOAT_input": ("FLOAT", {
|
|
"forceInput": True,
|
|
}),
|
|
"true_min": ("FLOAT", {
|
|
"default": 0.51,
|
|
"min": -9999.0,
|
|
"max": 9999.0,
|
|
"step": 0.01,
|
|
"display": "number"
|
|
}),
|
|
"true_max": ("FLOAT", {
|
|
"default": 1.00,
|
|
"min": -9999.0,
|
|
"max": 9999.0,
|
|
"step": 0.01,
|
|
"display": "number"
|
|
}),
|
|
"false_min": ("FLOAT", {
|
|
"default": 0.00,
|
|
"min": -9999.0,
|
|
"max": 9999.0,
|
|
"step": 0.01,
|
|
"display": "number"
|
|
}),
|
|
"false_max": ("FLOAT", {
|
|
"default": 0.50,
|
|
"min": -9999.0,
|
|
"max": 9999.0,
|
|
"step": 0.01,
|
|
"display": "number"
|
|
}),
|
|
"overlap_behavior": ([
|
|
"randomize",
|
|
"force_true",
|
|
"force_false"
|
|
], {
|
|
"default": "randomize",
|
|
"tooltip": "What to do when value falls in both ranges"
|
|
}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("BOOLEAN",)
|
|
RETURN_NAMES = ("boolean",)
|
|
FUNCTION = "evaluate"
|
|
CATEGORY = "MachinePainting/Utils"
|
|
|
|
# This forces the node to re-run every time when randomize is selected
|
|
@classmethod
|
|
def IS_CHANGED(cls, FLOAT_input, true_min, true_max, false_min, false_max, overlap_behavior, **kwargs):
|
|
if overlap_behavior == "randomize":
|
|
return float("nan") # forces re-execution every single time
|
|
return float("inf") # normal caching when not randomizing
|
|
|
|
def evaluate(self, FLOAT_input,
|
|
true_min=0.51, true_max=1.00,
|
|
false_min=0.00, false_max=0.50,
|
|
overlap_behavior="randomize"):
|
|
|
|
value = FLOAT_input
|
|
|
|
in_true = true_min <= value <= true_max
|
|
in_false = false_min <= value <= false_max
|
|
|
|
if in_true and in_false:
|
|
if overlap_behavior == "randomize":
|
|
return (random.choice([True, False]),)
|
|
elif overlap_behavior == "force_true":
|
|
return (True,)
|
|
else: # force_false
|
|
return (False,)
|
|
elif in_true:
|
|
return (True,)
|
|
elif in_false:
|
|
return (False,)
|
|
else:
|
|
return (False,) |