Allow findDegenerate and SplitLargeMesh to pass point clouds models.
Otherwise the model is removed or crashpull/2148/head
parent
4f03960c88
commit
9eeaf19eab
|
@ -91,8 +91,10 @@ void FindDegeneratesProcess::SetupProperties(const Importer* pImp) {
|
||||||
// Executes the post processing step on the given imported data.
|
// Executes the post processing step on the given imported data.
|
||||||
void FindDegeneratesProcess::Execute( aiScene* pScene) {
|
void FindDegeneratesProcess::Execute( aiScene* pScene) {
|
||||||
ASSIMP_LOG_DEBUG("FindDegeneratesProcess begin");
|
ASSIMP_LOG_DEBUG("FindDegeneratesProcess begin");
|
||||||
for (unsigned int i = 0; i < pScene->mNumMeshes;++i){
|
for (unsigned int i = 0; i < pScene->mNumMeshes;++i)
|
||||||
if (ExecuteOnMesh(pScene->mMeshes[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);
|
removeMesh(pScene, i);
|
||||||
--i; //the current i is removed, do not skip the next one
|
--i; //the current i is removed, do not skip the next one
|
||||||
}
|
}
|
||||||
|
|
|
@ -377,14 +377,22 @@ void SplitLargeMeshesProcess_Vertex::Execute( aiScene* pScene)
|
||||||
{
|
{
|
||||||
std::vector<std::pair<aiMesh*, unsigned int> > avList;
|
std::vector<std::pair<aiMesh*, unsigned int> > avList;
|
||||||
|
|
||||||
if (0xffffffff == this->LIMIT)return;
|
if (0xffffffff == this->LIMIT)
|
||||||
|
return;
|
||||||
|
|
||||||
ASSIMP_LOG_DEBUG("SplitLargeMeshesProcess_Vertex begin");
|
ASSIMP_LOG_DEBUG("SplitLargeMeshesProcess_Vertex begin");
|
||||||
for( unsigned int a = 0; a < pScene->mNumMeshes; a++)
|
|
||||||
this->SplitMesh(a, pScene->mMeshes[a],avList);
|
|
||||||
|
|
||||||
if (avList.size() != pScene->mNumMeshes)
|
//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);
|
||||||
|
|
||||||
|
if (avList.size() != pScene->mNumMeshes) {
|
||||||
// it seems something has been split. rebuild the mesh list
|
// it seems something has been split. rebuild the mesh list
|
||||||
delete[] pScene->mMeshes;
|
delete[] pScene->mMeshes;
|
||||||
pScene->mNumMeshes = (unsigned int)avList.size();
|
pScene->mNumMeshes = (unsigned int)avList.size();
|
||||||
|
|
Loading…
Reference in New Issue