[Bf-blender-cvs] [d47962f7a9f] functions-experimental-refactor: boolean math nodes

Jacques Lucke noreply at git.blender.org
Fri Nov 8 18:31:15 CET 2019


Commit: d47962f7a9f24afb6bf038b6fea0a503c3e64ac7
Author: Jacques Lucke
Date:   Fri Nov 8 17:11:29 2019 +0100
Branches: functions-experimental-refactor
https://developer.blender.org/rBd47962f7a9f24afb6bf038b6fea0a503c3e64ac7

boolean math nodes

===================================================================

D	release/scripts/startup/nodes/function_nodes/boolean.py
M	release/scripts/startup/nodes/function_nodes/math.py
M	source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc

===================================================================

diff --git a/release/scripts/startup/nodes/function_nodes/boolean.py b/release/scripts/startup/nodes/function_nodes/boolean.py
deleted file mode 100644
index 1e67bc52388..00000000000
--- a/release/scripts/startup/nodes/function_nodes/boolean.py
+++ /dev/null
@@ -1,51 +0,0 @@
-import bpy
-from bpy.props import *
-from .. base import FunctionNode
-from .. node_builder import NodeBuilder
-
-operation_items = [
-    ("AND", "And", "", "", 1),
-    ("OR", "Or", "", "", 2),
-    ("NOT", "Not", "", "", 3),
-]
-single_value_operations = {
-    "NOT"
-}
-class BooleanMathNode(bpy.types.Node, FunctionNode):
-    bl_idname = "fn_BooleanMathNode"
-    bl_label = "Boolean Math"
-
-    search_terms = (
-        ("And", {"operation" : "AND"}),
-        ("Or", {"operation" : "OR"}),
-        ("Not", {"operation" : "NOT"}),
-    )
-
-    operation: EnumProperty(
-        name="Operation",
-        items=operation_items,
-        update=FunctionNode.sync_tree,
-    )
-
-    use_list__a: NodeBuilder.VectorizedProperty()
-    use_list__b: NodeBuilder.VectorizedProperty()
-
-    def declaration(self, builder: NodeBuilder):
-        builder.vectorized_input(
-            "a", "use_list__a",
-            "A", "A", "Boolean")
-        prop_names = ["use_list__a"]
-
-        if self.operation not in single_value_operations:
-            builder.vectorized_input(
-                "b", "use_list__b",
-                "B", "B", "Boolean")
-            prop_names.append("use_list__b")
-
-
-        builder.vectorized_output(
-            "result", prop_names,
-            "Result", "Result", "Boolean")
-
-    def draw(self, layout):
-        layout.prop(self, "operation", text="")
diff --git a/release/scripts/startup/nodes/function_nodes/math.py b/release/scripts/startup/nodes/function_nodes/math.py
index d345a7f4306..bff9f13c404 100644
--- a/release/scripts/startup/nodes/function_nodes/math.py
+++ b/release/scripts/startup/nodes/function_nodes/math.py
@@ -78,3 +78,7 @@ VectorReflectNode = create_two_inputs_math_node("Vector", "fn_ReflectVectorNode"
 VectorProjectNode = create_two_inputs_math_node("Vector", "fn_ProjectVectorNode", "Project Vector")
 VectorDotProductNode = create_two_inputs_other_output_math_node("Vector", "Float", "fn_VectorDotProductNode", "Dot Product") 
 VectorDistanceNode = create_two_inputs_other_output_math_node("Vector", "Float", "fn_VectorDistanceNode", "Vector Distance")
+
+BooleanAndNode = create_variadic_math_node("Boolean", "fn_BooleanAndNode", "And")
+BooleanOrNode = create_variadic_math_node("Boolean", "fn_BooleanOrNode", "Or")
+BooleanNotNode = create_single_input_math_node("Boolean", "fn_BooleanNotNode", "Not")
diff --git a/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc b/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
index 7750feeef7c..303e980da4a 100644
--- a/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
+++ b/source/blender/functions/intern/vtree_multi_function_network/mappings_nodes.cc
@@ -359,6 +359,36 @@ static void INSERT_vector_distance(VTreeMFNetworkBuilder &builder, const VNode &
   insert_two_inputs_math_function<float3, float3, float, float3::distance>(builder, vnode);
 }
 
+static bool bool_and_func_cb(bool a, bool b)
+{
+  return a && b;
+}
+
+static bool bool_or_func_cb(bool a, bool b)
+{
+  return a || b;
+}
+
+static bool bool_not_func_cb(const bool &a)
+{
+  return !a;
+}
+
+static void INSERT_boolean_and(VTreeMFNetworkBuilder &builder, const VNode &vnode)
+{
+  insert_simple_math_function<bool, bool_and_func_cb>(builder, vnode, true);
+}
+
+static void INSERT_boolean_or(VTreeMFNetworkBuilder &builder, const VNode &vnode)
+{
+  insert_simple_math_function<bool, bool_or_func_cb>(builder, vnode, false);
+}
+
+static void INSERT_boolean_not(VTreeMFNetworkBuilder &builder, const VNode &vnode)
+{
+  insert_single_input_math_function<bool, bool_not_func_cb>(builder, vnode);
+}
+
 void add_vtree_node_mapping_info(VTreeMultiFunctionMappings &mappings)
 {
   mappings.vnode_inserters.add_new("fn_CombineVectorNode", INSERT_combine_vector);
@@ -396,6 +426,10 @@ void add_vtree_node_mapping_info(VTreeMultiFunctionMappings &mappings)
   mappings.vnode_inserters.add_new("fn_ProjectVectorNode", INSERT_project_vector);
   mappings.vnode_inserters.add_new("fn_VectorDotProductNode", INSERT_vector_dot_product);
   mappings.vnode_inserters.add_new("fn_VectorDistanceNode", INSERT_vector_distance);
+
+  mappings.vnode_inserters.add_new("fn_BooleanAndNode", INSERT_boolean_and);
+  mappings.vnode_inserters.add_new("fn_BooleanOrNode", INSERT_boolean_or);
+  mappings.vnode_inserters.add_new("fn_BooleanNotNode", INSERT_boolean_not);
 }
 
 };  // namespace FN



More information about the Bf-blender-cvs mailing list