[Bf-blender-cvs] [ebc898756a9] functions: deform function test
Jacques Lucke
noreply at git.blender.org
Sun Feb 10 20:25:09 CET 2019
Commit: ebc898756a93ef1c4a768d9feb4b0f8cf9b8a4f6
Author: Jacques Lucke
Date: Wed Jan 23 16:24:15 2019 +0100
Branches: functions
https://developer.blender.org/rBebc898756a93ef1c4a768d9feb4b0f8cf9b8a4f6
deform function test
===================================================================
M source/blender/editors/object/object_edit.c
M source/blender/functions/FN_functions.h
M source/blender/functions/intern/c_wrapper.cpp
===================================================================
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index ce47ebea011..5ac3c25517e 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -1748,16 +1748,21 @@ void OBJECT_OT_link_to_collection(wmOperatorType *ot)
static int test_functions_exec(bContext *UNUSED(C), wmOperator *UNUSED(op))
{
- FunctionRef fn = FN_get_add_const_function(100);
+ FunctionRef fn = FN_get_deform_function();
FnInputsRef fn_in = FN_inputs_new(fn);
FnOutputsRef fn_out = FN_outputs_new(fn);
- int value = 42;
- FN_inputs_set_index(fn_in, 0, &value);
+ float input[3] = {1, 2, 3};
+ float control = 10;
+ FN_inputs_set_index(fn_in, 0, input);
+ FN_inputs_set_index(fn_in, 1, &control);
+
FN_function_call(fn, fn_in, fn_out);
- int result;
- FN_outputs_get_index(fn_out, 0, &result);
- printf("Result: %d\n", result);
+
+ float result[3];
+ FN_outputs_get_index(fn_out, 0, result);
+
+ printf("Result: %f %f %f\n", result[0], result[1], result[2]);
printf("Finished\n");
return OPERATOR_FINISHED;
diff --git a/source/blender/functions/FN_functions.h b/source/blender/functions/FN_functions.h
index 01f0974ac68..1a6b708e90d 100644
--- a/source/blender/functions/FN_functions.h
+++ b/source/blender/functions/FN_functions.h
@@ -63,6 +63,7 @@ FnTypeRef FN_type_get_int32(void);
FnTypeRef FN_type_get_float_vector_3d(void);
FunctionRef FN_get_add_const_function(int value);
+FunctionRef FN_get_deform_function();
#ifdef __cplusplus
}
diff --git a/source/blender/functions/intern/c_wrapper.cpp b/source/blender/functions/intern/c_wrapper.cpp
index bc0f669747b..5d11316e1bf 100644
--- a/source/blender/functions/intern/c_wrapper.cpp
+++ b/source/blender/functions/intern/c_wrapper.cpp
@@ -72,3 +72,41 @@ FunctionRef FN_get_add_const_function(int value)
{
return (FunctionRef)AddConstFunction::Create(value);
}
+
+#include <cmath>
+
+class DeformFunction : public FN::Function {
+private:
+ DeformFunction(FN::Signature sig)
+ : Function(sig) {}
+
+public:
+ static DeformFunction *Create()
+ {
+ FN::Signature sig({FN::Types::floatvec3d_ty, FN::Types::float_ty}, {FN::Types::floatvec3d_ty});
+ return new DeformFunction(sig);
+ }
+
+ bool call(const FN::Inputs &fn_in, FN::Outputs &fn_out) override
+ {
+ float vec[3];
+ float control;
+ fn_in.get(0, vec);
+ fn_in.get(1, &control);
+
+ float result[3];
+
+ result[0] = vec[0] * control;
+ result[1] = vec[1] + std::sin(control);
+ result[2] = vec[2];
+
+ fn_out.set(0, result);
+
+ return true;
+ }
+};
+
+FunctionRef FN_get_deform_function()
+{
+ return (FunctionRef)DeformFunction::Create();
+}
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list