[Bf-blender-cvs] [fa483d50d16] functions: pass object into object transforms node

Jacques Lucke noreply at git.blender.org
Tue Jul 9 18:01:51 CEST 2019


Commit: fa483d50d167f936efe49230ab5651d649d1af9a
Author: Jacques Lucke
Date:   Tue Jul 9 16:23:57 2019 +0200
Branches: functions
https://developer.blender.org/rBfa483d50d167f936efe49230ab5651d649d1af9a

pass object into object transforms node

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

M	release/scripts/startup/nodes/function_nodes/object_transforms.py
M	source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
M	source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
M	source/blender/functions/functions/object_input.cpp
M	source/blender/functions/functions/object_input.hpp

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

diff --git a/release/scripts/startup/nodes/function_nodes/object_transforms.py b/release/scripts/startup/nodes/function_nodes/object_transforms.py
index 016fd2dc9db..cbc06c04fc4 100644
--- a/release/scripts/startup/nodes/function_nodes/object_transforms.py
+++ b/release/scripts/startup/nodes/function_nodes/object_transforms.py
@@ -6,13 +6,6 @@ class ObjectTransformsNode(bpy.types.Node, FunctionNode):
     bl_idname = "fn_ObjectTransformsNode"
     bl_label = "Object Transforms"
 
-    object: PointerProperty(
-        name="Object",
-        type=bpy.types.Object,
-    )
-
     def declaration(self, builder):
+        builder.fixed_input("object", "Object", "Object")
         builder.fixed_output("location", "Location", "Vector")
-
-    def draw(self, layout):
-        layout.prop(self, "object", text="")
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 46f254d325b..2a82fc615ea 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
@@ -57,9 +57,7 @@ static SharedFunction get_vectorized_function(SharedFunction &original_fn,
 
 static void INSERT_object_transforms(BTreeGraphBuilder &builder, bNode *bnode)
 {
-  PointerRNA rna = builder.get_rna(bnode);
-  Object *object = (Object *)RNA_pointer_get(&rna, "object").id.data;
-  auto fn = Functions::GET_FN_object_location(object);
+  auto fn = Functions::GET_FN_object_location();
   builder.insert_matching_function(fn, bnode);
 }
 
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp b/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
index 6857fb69705..07be7c0f8f1 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters/sockets.cpp
@@ -35,6 +35,12 @@ static void LOAD_boolean(PointerRNA *rna, Tuple &tuple, uint index)
   tuple.set<bool>(index, value);
 }
 
+static void LOAD_object(PointerRNA *rna, Tuple &tuple, uint index)
+{
+  Object *value = (Object *)RNA_pointer_get(rna, "value").id.data;
+  tuple.set<Object *>(index, value);
+}
+
 template<typename T> static void LOAD_empty_list(PointerRNA *UNUSED(rna), Tuple &tuple, uint index)
 {
   auto list = Types::SharedList<T>::New();
@@ -47,10 +53,12 @@ void initialize_socket_inserters(GraphInserters &inserters)
   inserters.reg_socket_loader("Vector", LOAD_vector);
   inserters.reg_socket_loader("Integer", LOAD_integer);
   inserters.reg_socket_loader("Boolean", LOAD_boolean);
+  inserters.reg_socket_loader("Object", LOAD_object);
   inserters.reg_socket_loader("Float List", LOAD_empty_list<float>);
   inserters.reg_socket_loader("Vector List", LOAD_empty_list<float3>);
   inserters.reg_socket_loader("Integer List", LOAD_empty_list<int32_t>);
   inserters.reg_socket_loader("Boolean List", LOAD_empty_list<bool>);
+  inserters.reg_socket_loader("Object List", LOAD_empty_list<Object *>);
 }
 
 }  // namespace DataFlowNodes
diff --git a/source/blender/functions/functions/object_input.cpp b/source/blender/functions/functions/object_input.cpp
index f0d37f3d8dc..473beabd9f9 100644
--- a/source/blender/functions/functions/object_input.cpp
+++ b/source/blender/functions/functions/object_input.cpp
@@ -11,19 +11,12 @@ namespace Functions {
 
 using namespace Types;
 
-class ObjectTransforms : public TupleCallBody {
- private:
-  Object *m_object;
-
- public:
-  ObjectTransforms(Object *object) : m_object(object)
-  {
-  }
-
-  void call(Tuple &UNUSED(fn_in), Tuple &fn_out, ExecutionContext &UNUSED(ctx)) const override
+class ObjectLocation : public TupleCallBody {
+  void call(Tuple &fn_in, Tuple &fn_out, ExecutionContext &UNUSED(ctx)) const override
   {
-    if (m_object) {
-      float3 position = m_object->loc;
+    Object *object = fn_in.get<Object *>(0);
+    if (object) {
+      float3 position = object->loc;
       fn_out.set<float3>(0, position);
     }
     else {
@@ -32,28 +25,13 @@ class ObjectTransforms : public TupleCallBody {
   }
 };
 
-class ObjectTransformsDependency : public DependenciesBody {
- private:
-  Object *m_object;
-
- public:
-  ObjectTransformsDependency(Object *object) : m_object(object)
-  {
-  }
-
-  void dependencies(Dependencies &deps) const override
-  {
-    deps.add_object_transform_dependency(m_object);
-  }
-};
-
-SharedFunction GET_FN_object_location(Object *object)
+BLI_LAZY_INIT(SharedFunction, GET_FN_object_location)
 {
   FunctionBuilder builder;
+  builder.add_input("Object", GET_TYPE_object());
   builder.add_output("Location", GET_TYPE_float3());
-  auto fn = builder.build("Object Transforms");
-  fn->add_body<ObjectTransforms>(object);
-  fn->add_body<ObjectTransformsDependency>(object);
+  auto fn = builder.build("Object Location");
+  fn->add_body<ObjectLocation>();
   return fn;
 }
 
diff --git a/source/blender/functions/functions/object_input.hpp b/source/blender/functions/functions/object_input.hpp
index 74a015533ce..5e4beb2adbf 100644
--- a/source/blender/functions/functions/object_input.hpp
+++ b/source/blender/functions/functions/object_input.hpp
@@ -2,11 +2,9 @@
 
 #include "FN_core.hpp"
 
-struct Object;
-
 namespace FN {
 namespace Functions {
 
-SharedFunction GET_FN_object_location(struct Object *object);
+SharedFunction &GET_FN_object_location();
 }
 }  // namespace FN



More information about the Bf-blender-cvs mailing list