From cb068791e12fd81d1cd2dae11f8eb8f80c7e8061 Mon Sep 17 00:00:00 2001 From: "Eunki, Hong" Date: Tue, 14 Mar 2023 14:03:13 +0900 Subject: [PATCH] Load facial animation from json Bind facial animation generator Change-Id: I45aef3c6d26a0fac50bfc0c076c5bc3f6336fe8d Signed-off-by: Eunki, Hong --- dali-csharp-binder/src/model-wrap.cpp | 43 +++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/dali-csharp-binder/src/model-wrap.cpp b/dali-csharp-binder/src/model-wrap.cpp index 382cd33..8b22301 100644 --- a/dali-csharp-binder/src/model-wrap.cpp +++ b/dali-csharp-binder/src/model-wrap.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ // EXTERNAL INCLUDES #include #include +#include // INTERNAL INCLUDES #include "common.h" @@ -386,7 +387,7 @@ SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Model_GenerateCamera(void* csModel, uns SWIGEXPORT bool SWIGSTDCALL CSharp_Dali_Model_ApplyCamera(void* csModel, unsigned int index, void* csCameraActor) { - Dali::Scene3D::Model* model = (Dali::Scene3D::Model*)csModel; + Dali::Scene3D::Model* model = (Dali::Scene3D::Model*)csModel; Dali::CameraActor* cameraActor = (Dali::CameraActor*)csCameraActor; bool result; @@ -431,14 +432,46 @@ SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Model_LoadBvhAnimation_1(void* csModel, // csScale is option. if(csScale != nullptr) { - scale = Dali::Vector3(*static_cast(csScale)); + scale = Dali::Vector3(*static_cast(csScale)); + } + std::string filename(csFileName); + { + try + { + Dali::Scene3D::Loader::AnimationDefinition animationDefinition = Dali::Scene3D::Loader::LoadBvh(filename, "LoadedBvhAnimation", scale); + Dali::Scene3D::Loader::AnimatedProperty::GetActor getActor = [&model](const Dali::Scene3D::Loader::AnimatedProperty& property) -> Dali::Actor { + return model->FindChildByName(property.mNodeName); + }; + result = animationDefinition.ReAnimate(getActor); + } + CALL_CATCH_EXCEPTION(0); } + + return new Dali::Animation((const Dali::Animation&)result); +} + +SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Model_LoadFacialAnimation_1(void* csModel, char* csFileName) +{ + Dali::Scene3D::Model* model = (Dali::Scene3D::Model*)csModel; + Dali::Animation result; + + if(!model) + { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null Dali::Scene3D::Model", 0); + return 0; + } + if(!csFileName) + { + SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "null string for filename", 0); + return 0; + } + std::string filename(csFileName); { try { - Dali::Scene3D::Loader::AnimationDefinition animationDefinition = Dali::Scene3D::Loader::LoadBvh(filename, "LoadedBvhAnimation", scale); - Dali::Scene3D::Loader::AnimatedProperty::GetActor getActor = [&model](const Dali::Scene3D::Loader::AnimatedProperty& property)->Dali::Actor{ + Dali::Scene3D::Loader::AnimationDefinition animationDefinition = Dali::Scene3D::Loader::LoadFacialAnimation(filename); + Dali::Scene3D::Loader::AnimatedProperty::GetActor getActor = [&model](const Dali::Scene3D::Loader::AnimatedProperty& property) -> Dali::Actor { return model->FindChildByName(property.mNodeName); }; result = animationDefinition.ReAnimate(getActor); -- 2.7.4