Commit: 44d8980780025ea95f7dc30141175e1a48560177
Author: Jacques Lucke
Date:   Sat Apr 6 23:07:12 2019 +0200
Branches: functions
https://developer.blender.org/rB44d8980780025ea95f7dc30141175e1a48560177

cleanup and vectorize Vector Math node

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

M       release/scripts/startup/function_nodes/declaration/vectorized.py
M       release/scripts/startup/function_nodes/nodes/combine_vector.py
M       release/scripts/startup/function_nodes/nodes/get_list_element.py
M       release/scripts/startup/function_nodes/nodes/list_length.py
M       release/scripts/startup/function_nodes/nodes/separate_vector.py
M       release/scripts/startup/function_nodes/nodes/vector_math.py
M       release/scripts/startup/function_nodes/socket_builder.py
M       source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp

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

diff --git a/release/scripts/startup/function_nodes/declaration/vectorized.py 
b/release/scripts/startup/function_nodes/declaration/vectorized.py
index 5d745ac2819..f6714a869e8 100644
--- a/release/scripts/startup/function_nodes/declaration/vectorized.py
+++ b/release/scripts/startup/function_nodes/declaration/vectorized.py
@@ -22,10 +22,6 @@ class VectorizedDeclBase:
     def amount(self):
         return 1
 
-    @staticmethod
-    def Property():
-        return StringProperty(default="BASE")
-
     def get_type_and_name(self):
         if self.is_vectorized():
             return self.list_type, self.list_name
@@ -55,6 +51,10 @@ class VectorizedInputDecl(VectorizedDeclBase, 
SocketDeclBase):
         else:
             assert False
 
+    @staticmethod
+    def Property():
+        return StringProperty(default="BASE")
+
 
 class VectorizedOutputDecl(VectorizedDeclBase, SocketDeclBase):
     def __init__(self,
diff --git a/release/scripts/startup/function_nodes/nodes/combine_vector.py 
b/release/scripts/startup/function_nodes/nodes/combine_vector.py
index 88fc0da0036..6fab136b5ab 100644
--- a/release/scripts/startup/function_nodes/nodes/combine_vector.py
+++ b/release/scripts/startup/function_nodes/nodes/combine_vector.py
@@ -6,9 +6,9 @@ class CombineVectorNode(bpy.types.Node, FunctionNode):
     bl_idname = "fn_CombineVectorNode"
     bl_label = "Combine Vector"
 
-    use_list__x: SocketBuilder.VectorizedInputProperty()
-    use_list__y: SocketBuilder.VectorizedInputProperty()
-    use_list__z: SocketBuilder.VectorizedInputProperty()
+    use_list__x: SocketBuilder.VectorizedProperty()
+    use_list__y: SocketBuilder.VectorizedProperty()
+    use_list__z: SocketBuilder.VectorizedProperty()
 
     def declaration(self, builder):
         builder.vectorized_input(
diff --git a/release/scripts/startup/function_nodes/nodes/get_list_element.py 
b/release/scripts/startup/function_nodes/nodes/get_list_element.py
index f1384297423..4db5d58207e 100644
--- a/release/scripts/startup/function_nodes/nodes/get_list_element.py
+++ b/release/scripts/startup/function_nodes/nodes/get_list_element.py
@@ -6,7 +6,7 @@ class GetListElementNode(bpy.types.Node, FunctionNode):
     bl_idname = "fn_GetListElementNode"
     bl_label = "Get List Element"
 
-    active_type: SocketBuilder.ListTypeProperty()
+    active_type: SocketBuilder.DynamicListProperty()
 
     def declaration(self, builder: SocketBuilder):
         builder.dynamic_list_input("list", "List", "active_type")
diff --git a/release/scripts/startup/function_nodes/nodes/list_length.py 
b/release/scripts/startup/function_nodes/nodes/list_length.py
index 8899d65cacf..05549fda79a 100644
--- a/release/scripts/startup/function_nodes/nodes/list_length.py
+++ b/release/scripts/startup/function_nodes/nodes/list_length.py
@@ -6,7 +6,7 @@ class ListLengthNode(bpy.types.Node, FunctionNode):
     bl_idname = "fn_ListLengthNode"
     bl_label = "List Length"
 
-    active_type: SocketBuilder.ListTypeProperty()
+    active_type: SocketBuilder.DynamicListProperty()
 
     def declaration(self, builder: SocketBuilder):
         builder.dynamic_list_input("list", "List", "active_type")
diff --git a/release/scripts/startup/function_nodes/nodes/separate_vector.py 
b/release/scripts/startup/function_nodes/nodes/separate_vector.py
index e3d5a79043a..9265198329f 100644
--- a/release/scripts/startup/function_nodes/nodes/separate_vector.py
+++ b/release/scripts/startup/function_nodes/nodes/separate_vector.py
@@ -6,7 +6,7 @@ class SeparateVectorNode(bpy.types.Node, FunctionNode):
     bl_idname = "fn_SeparateVectorNode"
     bl_label = "Separate Vector"
 
-    use_list__vector: SocketBuilder.VectorizedInputProperty()
+    use_list__vector: SocketBuilder.VectorizedProperty()
 
     def declaration(self, builder: SocketBuilder):
         builder.vectorized_input(
diff --git a/release/scripts/startup/function_nodes/nodes/vector_math.py 
b/release/scripts/startup/function_nodes/nodes/vector_math.py
index ede35101eb3..95aabdbba8d 100644
--- a/release/scripts/startup/function_nodes/nodes/vector_math.py
+++ b/release/scripts/startup/function_nodes/nodes/vector_math.py
@@ -1,6 +1,7 @@
 import bpy
 from bpy.props import *
 from .. base import FunctionNode
+from .. socket_builder import SocketBuilder
 
 operation_items = [
     ("ADD", "Add", "", "", 1),
@@ -16,10 +17,20 @@ class VectorMathNode(bpy.types.Node, FunctionNode):
         update=FunctionNode.refresh,
     )
 
-    def declaration(self, builder):
-        builder.fixed_input("a", "A", "Vector")
-        builder.fixed_input("b", "B", "Vector")
-        builder.fixed_output("result", "Result", "Vector")
+    use_list__a: SocketBuilder.VectorizedProperty()
+    use_list__b: SocketBuilder.VectorizedProperty()
+
+    def declaration(self, builder: SocketBuilder):
+        builder.vectorized_input(
+            "a", "use_list__a",
+            "A", "A", "Vector")
+        builder.vectorized_input(
+            "b", "use_list__b",
+            "B", "B", "Vector")
+
+        builder.vectorized_output(
+            "result", ["use_list__a", "use_list__b"],
+            "Result", "Result", "Vector")
 
     def draw(self, layout):
         layout.prop(self, "operation", text="")
\ No newline at end of file
diff --git a/release/scripts/startup/function_nodes/socket_builder.py 
b/release/scripts/startup/function_nodes/socket_builder.py
index cad04932848..f26e3615a1a 100644
--- a/release/scripts/startup/function_nodes/socket_builder.py
+++ b/release/scripts/startup/function_nodes/socket_builder.py
@@ -95,7 +95,7 @@ class SocketBuilder:
     ###################################
 
     @staticmethod
-    def ListTypeProperty():
+    def DynamicListProperty():
         return ListSocketDecl.Property()
 
     def dynamic_list_input(self, identifier, name, prop_name):
@@ -147,13 +147,9 @@ class SocketBuilder:
     ##################################
 
     @staticmethod
-    def VectorizedInputProperty():
+    def VectorizedProperty():
         return VectorizedInputDecl.Property()
 
-    @staticmethod
-    def VectorizedOutputProperty():
-        return VectorizedOutputDecl.Property()
-
     def vectorized_input(self, identifier, prop_name, base_name, list_name, 
base_type):
         decl = VectorizedInputDecl(
             self.node, identifier, prop_name,
diff --git 
a/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp 
b/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
index 1aa7670c00c..f273706f7a3 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
@@ -47,6 +47,26 @@ namespace FN { namespace DataFlowNodes {
                builder.map_sockets(node, bnode);
        }
 
+       static bool vectorized_socket_is_list(PointerRNA &ptr, const char 
*prop_name)
+       {
+               BLI_assert(RNA_string_length(&ptr, prop_name) == 
strlen("BASE"));
+               char value[5];
+               RNA_string_get(&ptr, prop_name, value);
+               BLI_assert(STREQ(value, "BASE") || STREQ(value, "LIST"));
+               return STREQ(value, "LIST");
+       }
+
+       static SharedFunction original_or_vectorized(
+               SharedFunction &fn, const SmallVector<bool> vectorized_inputs)
+       {
+               if (vectorized_inputs.contains(true)) {
+                       return Functions::to_vectorized_function(fn, 
vectorized_inputs);
+               }
+               else {
+                       return fn;
+               }
+       }
+
        static SharedFunction &get_vector_math_function(int operation)
        {
                switch (operation)
@@ -63,8 +83,15 @@ namespace FN { namespace DataFlowNodes {
                PointerRNA ptr = builder.get_rna(bnode);
                int operation = RNA_enum_get(&ptr, "operation");
 
-               SharedFunction &fn = get_vector_math_function(operation);
-               Node *node = builder.insert_function(fn, bnode);
+               SmallVector<bool> vectorized_inputs = {
+                       vectorized_socket_is_list(ptr, "use_list__a"),
+                       vectorized_socket_is_list(ptr, "use_list__b"),
+               };
+
+               SharedFunction &original_fn = 
get_vector_math_function(operation);
+               SharedFunction final_fn = original_or_vectorized(original_fn, 
vectorized_inputs);
+
+               Node *node = builder.insert_function(final_fn, bnode);
                builder.map_sockets(node, bnode);
        }
 
@@ -178,34 +205,14 @@ namespace FN { namespace DataFlowNodes {
                builder.map_sockets(node, bnode);
        }
 
-       static bool vectorized_socket_is_list(PointerRNA *ptr, const char 
*prop_name)
-       {
-               BLI_assert(RNA_string_length(ptr, prop_name) == strlen("BASE"));
-               char value[5];
-               RNA_string_get(ptr, prop_name, value);
-               BLI_assert(STREQ(value, "BASE") || STREQ(value, "LIST"));
-               return STREQ(value, "LIST");
-       }
-
-       static SharedFunction original_or_vectorized(
-               SharedFunction &fn, const SmallVector<bool> vectorized_inputs)
-       {
-               if (vectorized_inputs.contains(true)) {
-                       return Functions::to_vectorized_function(fn, 
vectorized_inputs);
-               }
-               else {
-                       return fn;
-               }
-       }
-
        static void INSERT_combine_vector(GraphBuilder &builder, bNode *bnode)
        {
                PointerRNA ptr = builder.get_rna(bnode);
 
                SmallVector<bool> vectorized_inputs = {
-                       vectorized_socket_is_list(&ptr, "use_list__x"),
-                       vectorized_socket_is_list(&ptr, "use_list__y"),
-                       vectorized_socket_is_list(&ptr, "use_list__z"),
+                       vectorized_socket_is_list(ptr, "use_list__x"),
+                       vectorized_socket_is_list(ptr, "use_list__y"),
+                       vectorized_socket_is_list(ptr, "use_list__z"),
                };
 
                SharedFunction &original_fn = 
Functions::GET_FN_combine_vector();
@@ -221,7 +228,7 @@ namespace FN { namespace DataFlowNodes {
                PointerRNA ptr = builder.get_rna(bnode);
 
                SmallVector<bool> vectorized_inputs = {
-                       vectorized_socket_is_list(&ptr, "use_list__vector"),
+                       vectorized_socket_is_list(ptr, "use_list__vector"),
                };
 
                SharedFunction &original_fn = 
Functions::GET_FN_separate_vector();

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to