[Tizen] Added function to set a collider mesh on the ModelNode and signal to Model 10/302310/1 accepted/tizen/7.0/unified/20231207.071842
authorAdam Bialogonski <adam.b@samsung.com>
Tue, 14 Nov 2023 11:54:04 +0000 (11:54 +0000)
committerhuiyu.eun <huiyu.eun@samsung.com>
Tue, 5 Dec 2023 07:16:03 +0000 (16:16 +0900)
Change-Id: I0a1cc6633002779a26e7f0fc60f0a67412feb2c4
Signed-off-by: huiyu.eun <huiyu.eun@samsung.com>
dali-csharp-binder/src/model-node-wrap.cpp
dali-csharp-binder/src/model-wrap.cpp

index fb289a6..97d8669 100644 (file)
@@ -17,6 +17,8 @@
 
 // EXTERNAL INCLUDES
 #include <dali-scene3d/public-api/model-components/model-node.h>
+#include <dali-scene3d/public-api/algorithm/navigation-mesh.h>
+#include <dali-scene3d/public-api/loader/navigation-mesh-factory.h>
 
 // INTERNAL INCLUDES
 #include "common.h"
@@ -254,6 +256,57 @@ SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Model_Node_FindChildModelNodeByName(voi
   return new Dali::Scene3D::ModelNode((const Dali::Scene3D::ModelNode&)result);
 }
 
+SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Dali_Model_Node_GetChildModelNodeCount(void* csModelNode)
+{
+  Dali::Scene3D::ModelNode* modelNode = (Dali::Scene3D::ModelNode*)csModelNode;
+
+  if(!modelNode)
+  {
+    SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null Dali::Scene3D::ModelNode", 0);
+    return 0;
+  }
+  {
+    try
+    {
+      return modelNode->GetChildCount();
+    }
+    CALL_CATCH_EXCEPTION(0);
+  }
+}
+
+SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Model_Node_GetChildModelNodeAt(void* csModelNode, uint32_t index)
+{
+  Dali::Scene3D::ModelNode* modelNode = (Dali::Scene3D::ModelNode*)csModelNode;
+  Dali::Scene3D::ModelNode result;
+
+  if(!modelNode)
+  {
+    SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null Dali::Scene3D::ModelNode", 0);
+    return nullptr;
+  }
+  {
+    try
+    {
+      Dali::Actor actor = modelNode->GetChildAt(index);
+      result = Dali::Scene3D::ModelNode::DownCast(actor);
+    }
+    CALL_CATCH_EXCEPTION(nullptr);
+  }
+  return new Dali::Scene3D::ModelNode((const Dali::Scene3D::ModelNode&)result);
+}
+
+SWIGEXPORT void SWIGSTDCALL CSharp_Dali_ModelNode_SetColliderMesh(void *modelNodePtr, void* vertexPtr, void* normalPtr, unsigned long vertexCount, void* indexPtr, unsigned long indexCount) {
+  Dali::Scene3D::ModelNode *modelNode = (Dali::Scene3D::ModelNode *) modelNodePtr;
+  auto vertices = reinterpret_cast<Dali::Vector3*>(vertexPtr);
+  auto normals = reinterpret_cast<Dali::Vector3*>(normalPtr);
+  auto indices = reinterpret_cast<uint32_t*>(indexPtr);
+
+  try {
+    auto colliderMesh = Dali::Scene3D::Loader::NavigationMeshFactory::CreateFromVertexFaceList(vertices, normals, vertexCount, indices, indexCount);
+    modelNode->SetColliderMesh(std::move(colliderMesh));
+  } CALL_CATCH_EXCEPTION();
+}
+
 #ifdef __cplusplus
 }
 #endif
index e177c21..e975c00 100644 (file)
@@ -743,6 +743,8 @@ SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Model_LoadFacialAnimation_2(void* csMod
   return new Dali::Animation((const Dali::Animation&)result);
 }
 
+GENERATE_SIGNAL(Dali::Scene3D::Model*, bool (*)(Dali::Scene3D::Model, Dali::Scene3D::ModelNode), Dali_Model, MeshHitSignal);
+
 #ifdef __cplusplus
 }
 #endif