[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