[Bf-blender-cvs] [139cdff657b] functions: object transforms node
Jacques Lucke
noreply at git.blender.org
Mon Feb 11 18:30:34 CET 2019
Commit: 139cdff657b3456a897f3e34bd9beacd6c19686a
Author: Jacques Lucke
Date: Mon Feb 11 18:01:48 2019 +0100
Branches: functions
https://developer.blender.org/rB139cdff657b3456a897f3e34bd9beacd6c19686a
object transforms node
===================================================================
M release/scripts/startup/function_nodes/base.py
M release/scripts/startup/function_nodes/menu.py
M release/scripts/startup/function_nodes/nodes/__init__.py
A release/scripts/startup/function_nodes/nodes/object_transforms.py
M source/blender/blenlib/BLI_listbase_wrapper.hpp
M source/blender/functions/function_nodes/function_nodes.cpp
===================================================================
diff --git a/release/scripts/startup/function_nodes/base.py b/release/scripts/startup/function_nodes/base.py
index 36cde50e660..b0b960d8b9e 100644
--- a/release/scripts/startup/function_nodes/base.py
+++ b/release/scripts/startup/function_nodes/base.py
@@ -19,6 +19,12 @@ class FunctionNode:
def get_sockets():
return [], []
+ def draw_buttons(self, context, layout):
+ self.draw(layout)
+
+ def draw(self, layout):
+ pass
+
class DataSocket:
color = (0, 0, 0, 0)
diff --git a/release/scripts/startup/function_nodes/menu.py b/release/scripts/startup/function_nodes/menu.py
index c8b32175db0..d588a959264 100644
--- a/release/scripts/startup/function_nodes/menu.py
+++ b/release/scripts/startup/function_nodes/menu.py
@@ -15,6 +15,7 @@ def draw_menu(self, context):
insert_node(layout, "fn_AddFloatsNode", "Add Floats")
insert_node(layout, "fn_CombineVectorNode", "Combine Vector")
insert_node(layout, "fn_SeparateVectorNode", "Separate Vector")
+ insert_node(layout, "fn_ObjectTransformsNode", "Object Transforms")
def insert_node(layout, type, text, settings = {}, icon = "NONE"):
operator = layout.operator("node.add_node", text = text, icon = icon)
diff --git a/release/scripts/startup/function_nodes/nodes/__init__.py b/release/scripts/startup/function_nodes/nodes/__init__.py
index ce73c7da5b3..bd1fcec971d 100644
--- a/release/scripts/startup/function_nodes/nodes/__init__.py
+++ b/release/scripts/startup/function_nodes/nodes/__init__.py
@@ -5,4 +5,5 @@ from . import (
add_floats,
combine_vector,
separate_vector,
+ object_transforms,
)
\ No newline at end of file
diff --git a/release/scripts/startup/function_nodes/nodes/object_transforms.py b/release/scripts/startup/function_nodes/nodes/object_transforms.py
new file mode 100644
index 00000000000..a80f552f270
--- /dev/null
+++ b/release/scripts/startup/function_nodes/nodes/object_transforms.py
@@ -0,0 +1,22 @@
+import bpy
+from bpy.props import *
+from .. base import FunctionNode
+
+class ObjectTransformsNode(bpy.types.Node, FunctionNode):
+ bl_idname = "fn_ObjectTransformsNode"
+ bl_label = "Object Transforms"
+
+ object = PointerProperty(
+ name="Object",
+ type=bpy.types.Object,
+ )
+
+ def get_sockets(self):
+ return [], [
+ ("fn_VectorSocket", "Location"),
+ ]
+
+ def draw(self, layout):
+ layout.prop(self, "object", text="")
+
+bpy.utils.register_class(ObjectTransformsNode)
\ No newline at end of file
diff --git a/source/blender/blenlib/BLI_listbase_wrapper.hpp b/source/blender/blenlib/BLI_listbase_wrapper.hpp
index 6a25196245a..8fd1ff1996a 100644
--- a/source/blender/blenlib/BLI_listbase_wrapper.hpp
+++ b/source/blender/blenlib/BLI_listbase_wrapper.hpp
@@ -10,7 +10,10 @@ namespace BLI {
public:
ListBaseWrapper(ListBase *listbase)
- : m_listbase(listbase) {}
+ : m_listbase(listbase)
+ {
+ BLI_assert(listbase);
+ }
class Iterator {
private:
diff --git a/source/blender/functions/function_nodes/function_nodes.cpp b/source/blender/functions/function_nodes/function_nodes.cpp
index eac43169258..509b339b432 100644
--- a/source/blender/functions/function_nodes/function_nodes.cpp
+++ b/source/blender/functions/function_nodes/function_nodes.cpp
@@ -7,6 +7,8 @@
#include "RNA_access.h"
+#include "DNA_object_types.h"
+
namespace FN::FunctionNodes {
using SocketMap = SmallMap<bNodeSocket *, Socket>;
@@ -94,6 +96,26 @@ namespace FN::FunctionNodes {
}
};
+ class ObjectTransforms : public FN::TupleCallBody {
+ private:
+ Object *m_object;
+
+ public:
+ ObjectTransforms(Object *object)
+ : m_object(object) {}
+
+ void call(const FN::Tuple &UNUSED(fn_in), FN::Tuple &fn_out) const override
+ {
+ if (m_object) {
+ Vector position = *(Vector *)m_object->loc;
+ fn_out.set<Vector>(0, position);
+ }
+ else {
+ fn_out.set<Vector>(0, Vector());
+ }
+ }
+ };
+
static void insert_add_floats_node(
const FunctionNodeTree &UNUSED(tree),
@@ -131,6 +153,22 @@ namespace FN::FunctionNodes {
map_node_sockets(socket_map, bnode, node);
}
+ static void insert_object_transforms_node(
+ const FunctionNodeTree &tree,
+ SharedDataFlowGraph &graph,
+ SocketMap &socket_map,
+ bNode *bnode)
+ {
+ PointerRNA ptr;
+ RNA_pointer_create(&tree.orig_tree()->id, &RNA_Node, bnode, &ptr);
+ Object *object = (Object *)RNA_pointer_get(&ptr, "object").id.data;
+
+ auto fn = SharedFunction::New("Object Transforms", signature_from_node(bnode));
+ fn->add_body(new ObjectTransforms(object));
+ const Node *node = graph->insert(fn);
+ map_node_sockets(socket_map, bnode, node);
+ }
+
class FloatSocketInput : public FN::TupleCallBody {
private:
@@ -265,6 +303,7 @@ namespace FN::FunctionNodes {
inserters.add("fn_SeparateVectorNode", insert_separate_vector_node);
inserters.add("fn_FunctionOutputNode", insert_output_node);
inserters.add("fn_FunctionInputNode", insert_input_node);
+ inserters.add("fn_ObjectTransformsNode", insert_object_transforms_node);
SharedDataFlowGraph graph = SharedDataFlowGraph::New();
More information about the Bf-blender-cvs
mailing list