[Bf-blender-cvs] [44d89807800] functions: cleanup and vectorize Vector Math node

Jacques Lucke noreply at git.blender.org
Sat Apr 6 23:07:22 CEST 2019


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();



More information about the Bf-blender-cvs mailing list