207 lines
5.5 KiB
Python
207 lines
5.5 KiB
Python
# boolean_utils.py
|
|
# Combined boolean utility nodes for MachinePaintingNodes
|
|
|
|
import random
|
|
|
|
|
|
class Boolean:
|
|
"""
|
|
Simple standalone Boolean toggle
|
|
MachinePaintingNodes - For use with boolean toggle inputs on nodes.
|
|
"""
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"boolean": ("BOOLEAN", {
|
|
"default": True,
|
|
"label_on": "true",
|
|
"label_off": "false"
|
|
}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("BOOLEAN",)
|
|
RETURN_NAMES = ("boolean",)
|
|
FUNCTION = "execute"
|
|
CATEGORY = "MachinePaintingNodes/Util"
|
|
|
|
def execute(self, boolean=True):
|
|
return (boolean,)
|
|
|
|
@classmethod
|
|
def IS_CHANGED(cls, **kwargs):
|
|
return float("NaN")
|
|
|
|
|
|
class BooleanInvert:
|
|
"""
|
|
Inverts a boolean value. True becomes False, False becomes True.
|
|
"""
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"value": ("BOOLEAN", {"default": False}),
|
|
},
|
|
}
|
|
|
|
RETURN_TYPES = ("BOOLEAN",)
|
|
RETURN_NAMES = ("inverted",)
|
|
FUNCTION = "invert"
|
|
CATEGORY = "MachinePaintingNodes/Util"
|
|
|
|
def invert(self, value):
|
|
return (not value,)
|
|
|
|
|
|
class BooleanSwitchValueOutput:
|
|
TITLE = "Boolean Switch Value - (INT/FLOAT)"
|
|
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"true_value": ("FLOAT", {
|
|
"default": 1.00,
|
|
"min": -9999.0,
|
|
"max": 9999.0,
|
|
"step": 0.01,
|
|
"display": "number"
|
|
}),
|
|
"false_value": ("FLOAT", {
|
|
"default": 0.00,
|
|
"min": -9999.0,
|
|
"max": 9999.0,
|
|
"step": 0.01,
|
|
"display": "number"
|
|
}),
|
|
},
|
|
"optional": {
|
|
"boolean": ("BOOLEAN", {"label": "boolean"}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("INT", "FLOAT")
|
|
RETURN_NAMES = ("INT", "FLOAT")
|
|
FUNCTION = "switch"
|
|
CATEGORY = "MachinePaintingNodes/Util"
|
|
|
|
def switch(self, true_value=1.00, false_value=0.00, boolean=None):
|
|
value = boolean if boolean is not None else True
|
|
result = true_value if value else false_value
|
|
return (int(result), float(result))
|
|
|
|
|
|
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 = "MachinePaintingNodes/Util"
|
|
|
|
@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")
|
|
return float("inf")
|
|
|
|
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:
|
|
return (False,)
|
|
elif in_true:
|
|
return (True,)
|
|
elif in_false:
|
|
return (False,)
|
|
else:
|
|
return (False,)
|
|
|
|
|
|
class BooleanMasterSwitch:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"master": ("BOOLEAN", {
|
|
"default": True,
|
|
"label_on": "TRUE",
|
|
"label_off": "FALSE"
|
|
}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("BOOLEAN",)
|
|
RETURN_NAMES = ("out_1",)
|
|
FUNCTION = "execute"
|
|
CATEGORY = "MachinePaintingNodes/Util"
|
|
|
|
OUTPUT_IS_LIST = (True,)
|
|
OUTPUT_MAX_LIST_LENGTH = 25
|
|
|
|
def execute(self, master: bool):
|
|
return ([master],)
|
|
|
|
@classmethod
|
|
def IS_CHANGED(cls, **kwargs):
|
|
return float("NaN")
|