Browse Source

Allow findDegenerate and SplitLargeMesh to pass point clouds models.
Otherwise the model is removed or crash

Arkeon 7 years ago
parent
commit
9eeaf19eab
2 changed files with 16 additions and 6 deletions
  1. 4 2
      code/FindDegenerates.cpp
  2. 12 4
      code/SplitLargeMeshes.cpp

+ 4 - 2
code/FindDegenerates.cpp

@@ -91,8 +91,10 @@ void FindDegeneratesProcess::SetupProperties(const Importer* pImp) {
 // Executes the post processing step on the given imported data.
 void FindDegeneratesProcess::Execute( aiScene* pScene) {
     ASSIMP_LOG_DEBUG("FindDegeneratesProcess begin");
-    for (unsigned int i = 0; i < pScene->mNumMeshes;++i){
-        if (ExecuteOnMesh(pScene->mMeshes[i])) {
+    for (unsigned int i = 0; i < pScene->mNumMeshes;++i)
+    {
+        //Do not process point cloud, ExecuteOnMesh works only with faces data
+        if ((pScene->mMeshes[i]->mPrimitiveTypes != aiPrimitiveType::aiPrimitiveType_POINT) && ExecuteOnMesh(pScene->mMeshes[i])) {
             removeMesh(pScene, i);
             --i; //the current i is removed, do not skip the next one
         }

+ 12 - 4
code/SplitLargeMeshes.cpp

@@ -377,14 +377,22 @@ void SplitLargeMeshesProcess_Vertex::Execute( aiScene* pScene)
 {
     std::vector<std::pair<aiMesh*, unsigned int> > avList;
 
-    if (0xffffffff == this->LIMIT)return;
+    if (0xffffffff == this->LIMIT)
+        return;
 
     ASSIMP_LOG_DEBUG("SplitLargeMeshesProcess_Vertex begin");
+
+    //Check for point cloud first, 
+    //Do not process point cloud, splitMesh works only with faces data
+    for (unsigned int a = 0; a < pScene->mNumMeshes; a++) {
+        if ((pScene->mMeshes[a]->mPrimitiveTypes == aiPrimitiveType::aiPrimitiveType_POINT))
+            return;
+    }
+
     for( unsigned int a = 0; a < pScene->mNumMeshes; a++)
-        this->SplitMesh(a, pScene->mMeshes[a],avList);
+        this->SplitMesh(a, pScene->mMeshes[a], avList);
 
-    if (avList.size() != pScene->mNumMeshes)
-    {
+    if (avList.size() != pScene->mNumMeshes) {
         // it seems something has been split. rebuild the mesh list
         delete[] pScene->mMeshes;
         pScene->mNumMeshes = (unsigned int)avList.size();