Load facial animation from json 27/289727/1
authorEunki, Hong <eunkiki.hong@samsung.com>
Tue, 14 Mar 2023 05:03:13 +0000 (14:03 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Tue, 14 Mar 2023 05:03:13 +0000 (14:03 +0900)
Bind facial animation generator

Change-Id: I45aef3c6d26a0fac50bfc0c076c5bc3f6336fe8d
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali-csharp-binder/src/model-wrap.cpp

index 382cd33..8b22301 100644 (file)
@@ -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 <dali-scene3d/public-api/controls/model/model.h>
 #include <dali-scene3d/public-api/loader/bvh-loader.h>
+#include <dali-scene3d/public-api/loader/facial-animation-loader.h>
 
 // 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<const Dali::Vector3 *>(csScale));
+    scale = Dali::Vector3(*static_cast<const Dali::Vector3*>(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);