Files
2024-07-04 11:34:32 +08:00

3.0 KiB

Documentation

LogicNode节点执行基本逻辑运算,如比较操作(大于、小于、等于)和布尔运算(与、或、异或)。它通过评估条件并根据指定的逻辑确定结果,从而抽象地支持决策过程。

Input types

Required

  • Operation
    • 指定要执行的逻辑运算,包括比较和布尔运算,决定了CompareValue_A和CompareValue_B之间应用的逻辑。
    • Comfy dtype: COMBO[STRING]
    • Python dtype: str
  • CompareValue_A
    • 用于比较或逻辑运算的主要值。
    • Comfy dtype: *
    • Python dtype: object

Optional

  • CompareValue_B
    • 用于比较或逻辑运算的次要值,与CompareValue_A一起用于评估指定的Operation。
    • Comfy dtype: *
    • Python dtype: object
  • OnTrue
    • 如果逻辑运算结果为真时返回的值。
    • Comfy dtype: *
    • Python dtype: object
  • OnFalse
    • 如果逻辑运算结果为假时返回的值。
    • Comfy dtype: *
    • Python dtype: object

Output types

    • 逻辑运算的结果,可以是OnTrue或OnFalse值,具体取决于运算的结果。
    • Comfy dtype: *
    • Python dtype: object

Usage tips

  • Infra type: CPU
  • Common nodes: unknown

Source code

class LogicNode:
    def __init__(self) -> None:
        pass

    @classmethod
    def INPUT_TYPES(cls) -> dict:
        return {
            "required": {
                "Operation": Field.combo([
                    "A > B",
                    "A < B",
                    "A = B",
                    "A AND B",
                    "A OR B",
                    "A XOR B",
                ]),
                "CompareValue_A": Field.any(),
            },
            "optional": {
                "CompareValue_B": Field.any(),
                "OnTrue": Field.any(),
                "OnFalse": Field.any()
            }
        }

    RETURN_TYPES = (ANY,)
    CATEGORY = TREE_FUNCTIONS
    FUNCTION = "do_logic"

    def do_logic(self, CompareValue_A, CompareValue_B = False, OnTrue = False, OnFalse = False, Operation: str = "A AND B") -> tuple:
        match Operation:
            case "A > B":
                value = OnTrue if CompareValue_A > CompareValue_B else OnFalse
            case "A < B":
                value = OnTrue if CompareValue_A < CompareValue_B else OnFalse
            case "A = B":
                value = OnTrue if CompareValue_A == CompareValue_B else OnFalse
            case "A AND B":
                value = OnTrue if CompareValue_A and CompareValue_B else OnFalse
            case "A OR B":
                value = OnTrue if CompareValue_A or CompareValue_B else OnFalse
            case "A XOR B":
                value = OnTrue if not (CompareValue_A and CompareValue_B) and (CompareValue_A or CompareValue_B) else OnFalse
            case _:
                value = None
        return (value, )