[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