Bind bvh and facial animations loader from buffer 56/291556/2
authorEunki, Hong <eunkiki.hong@samsung.com>
Tue, 18 Apr 2023 08:19:57 +0000 (17:19 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Wed, 19 Apr 2023 01:56:41 +0000 (10:56 +0900)
Change-Id: Icd479e52ab95b42d0faacb843f00e9fa8507aac1
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali-csharp-binder/src/model-wrap.cpp

index daae521..1b4992c 100644 (file)
@@ -521,6 +521,45 @@ SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Model_LoadBvhAnimation_1(void* csModel,
   return new Dali::Animation((const Dali::Animation&)result);
 }
 
+SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Model_LoadBvhAnimation_2(void* csModel, char* csBuffer, int csBufferLength, void* csScale)
+{
+  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(!csBuffer)
+  {
+    SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "null string for buffer", 0);
+    return 0;
+  }
+
+  Dali::Vector3 scale = Dali::Vector3::ONE;
+  // csScale is option.
+  if(csScale != nullptr)
+  {
+    scale = Dali::Vector3(*static_cast<const Dali::Vector3*>(csScale));
+  }
+
+  const uint8_t* rawBuffer = reinterpret_cast<const uint8_t*>(csBuffer);
+  {
+    try
+    {
+      Dali::Scene3D::Loader::AnimationDefinition        animationDefinition = Dali::Scene3D::Loader::LoadBvhFromBuffer(rawBuffer, csBufferLength, "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;
@@ -553,6 +592,38 @@ SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Model_LoadFacialAnimation_1(void* csMod
   return new Dali::Animation((const Dali::Animation&)result);
 }
 
+SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Model_LoadFacialAnimation_2(void* csModel, char* csBuffer, int csBufferLength)
+{
+  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(!csBuffer)
+  {
+    SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "null string for buffer", 0);
+    return 0;
+  }
+
+  const uint8_t* rawBuffer = reinterpret_cast<const uint8_t*>(csBuffer);
+  {
+    try
+    {
+      Dali::Scene3D::Loader::AnimationDefinition        animationDefinition = Dali::Scene3D::Loader::LoadFacialAnimationFromBuffer(rawBuffer, csBufferLength);
+      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);
+}
+
 #ifdef __cplusplus
 }
 #endif