[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