diff --git a/code/PlyLoader.cpp b/code/PlyLoader.cpp index 1378d1ebb..15e20b2c4 100644 --- a/code/PlyLoader.cpp +++ b/code/PlyLoader.cpp @@ -122,6 +122,24 @@ const aiImporterDesc* PLYImporter::GetInfo () const return &desc; } +// ------------------------------------------------------------------------------------------------ +static bool isBigEndian( char* szMe ) { + // binary_little_endian + // binary_big_endian + bool isBigEndian( false ); +#if (defined AI_BUILD_BIG_ENDIAN) + if ( 'l' == *szMe || 'L' == *szMe ) { + isBigEndian = true; +} +#else + if ( 'b' == *szMe || 'B' == *szMe ) { + isBigEndian = true; + } +#endif // ! AI_BUILD_BIG_ENDIAN + + return isBigEndian; +} + // ------------------------------------------------------------------------------------------------ // Imports the given file into the given scene structure. void PLYImporter::InternReadFile( const std::string& pFile, @@ -151,33 +169,24 @@ void PLYImporter::InternReadFile( const std::string& pFile, // determine the format of the file data PLY::DOM sPlyDom; - if (TokenMatch(szMe,"format",6)) - { - if (TokenMatch(szMe,"ascii",5)) - { + if (TokenMatch(szMe,"format",6)) { + if (TokenMatch(szMe,"ascii",5)) { SkipLine(szMe,(const char**)&szMe); if(!PLY::DOM::ParseInstance(szMe,&sPlyDom)) throw DeadlyImportError( "Invalid .ply file: Unable to build DOM (#1)"); - } - else if (!::strncmp(szMe,"binary_",7)) + } else if (!::strncmp(szMe,"binary_",7)) { - bool bIsBE = false; - szMe+=7; - - // binary_little_endian - // binary_big_endian -#if (defined AI_BUILD_BIG_ENDIAN) - if ('l' == *szMe || 'L' == *szMe)bIsBE = true; -#else - if ('b' == *szMe || 'B' == *szMe)bIsBE = true; -#endif // ! AI_BUILD_BIG_ENDIAN + szMe += 7; + const bool bIsBE( isBigEndian( szMe ) ); // skip the line, parse the rest of the header and build the DOM SkipLine(szMe,(const char**)&szMe); - if(!PLY::DOM::ParseInstanceBinary(szMe,&sPlyDom,bIsBE)) - throw DeadlyImportError( "Invalid .ply file: Unable to build DOM (#2)"); + if ( !PLY::DOM::ParseInstanceBinary( szMe, &sPlyDom, bIsBE ) ) { + throw DeadlyImportError( "Invalid .ply file: Unable to build DOM (#2)" ); + } + } else { + throw DeadlyImportError( "Invalid .ply file: Unknown file format" ); } - else throw DeadlyImportError( "Invalid .ply file: Unknown file format"); } else { @@ -186,13 +195,14 @@ void PLYImporter::InternReadFile( const std::string& pFile, } this->pcDOM = &sPlyDom; - // now load a list of vertices. This must be sucessfull in order to procede + // now load a list of vertices. This must be successfully in order to procedure std::vector avPositions; this->LoadVertices(&avPositions,false); - if (avPositions.empty()) + if ( avPositions.empty() ) { throw DeadlyImportError( "Invalid .ply file: No vertices found. " - "Unable to parse the data format of the PLY file."); + "Unable to parse the data format of the PLY file." ); + } // now load a list of normals. std::vector avNormals; @@ -246,28 +256,32 @@ void PLYImporter::InternReadFile( const std::string& pFile, ConvertMeshes(&avFaces,&avPositions,&avNormals, &avColors,&avTexCoords,&avMaterials,&avMeshes); - if (avMeshes.empty()) - throw DeadlyImportError( "Invalid .ply file: Unable to extract mesh data "); + if ( avMeshes.empty() ) { + throw DeadlyImportError( "Invalid .ply file: Unable to extract mesh data " ); + } // now generate the output scene object. Fill the material list pScene->mNumMaterials = (unsigned int)avMaterials.size(); pScene->mMaterials = new aiMaterial*[pScene->mNumMaterials]; - for (unsigned int i = 0; i < pScene->mNumMaterials;++i) - pScene->mMaterials[i] = avMaterials[i]; + for ( unsigned int i = 0; i < pScene->mNumMaterials; ++i ) { + pScene->mMaterials[ i ] = avMaterials[ i ]; + } // fill the mesh list pScene->mNumMeshes = (unsigned int)avMeshes.size(); pScene->mMeshes = new aiMesh*[pScene->mNumMeshes]; - for (unsigned int i = 0; i < pScene->mNumMeshes;++i) - pScene->mMeshes[i] = avMeshes[i]; + for ( unsigned int i = 0; i < pScene->mNumMeshes; ++i ) { + pScene->mMeshes[ i ] = avMeshes[ i ]; + } // generate a simple node structure pScene->mRootNode = new aiNode(); pScene->mRootNode->mNumMeshes = pScene->mNumMeshes; pScene->mRootNode->mMeshes = new unsigned int[pScene->mNumMeshes]; - for (unsigned int i = 0; i < pScene->mRootNode->mNumMeshes;++i) - pScene->mRootNode->mMeshes[i] = i; + for ( unsigned int i = 0; i < pScene->mRootNode->mNumMeshes; ++i ) { + pScene->mRootNode->mMeshes[ i ] = i; + } } // ------------------------------------------------------------------------------------------------ @@ -291,7 +305,7 @@ void PLYImporter::ConvertMeshes(std::vector* avFaces, for (std::vector::const_iterator i = avFaces->begin();i != avFaces->end();++i,++iNum) aiSplit[(*i).iMaterialIndex].push_back(iNum); - // now generate submeshes + // now generate sub-meshes for (unsigned int p = 0; p < avMaterials->size();++p) { if (aiSplit[p].size() != 0) @@ -491,7 +505,7 @@ void PLYImporter::LoadVertices(std::vector* pvOut, bool p_bNormals) PLY::ElementInstanceList* pcList = NULL; unsigned int cnt = 0; - // serach in the DOM for a vertex entry + // search in the DOM for a vertex entry unsigned int _i = 0; for (std::vector::const_iterator i = pcDOM->alElements.begin(); i != pcDOM->alElements.end();++i,++_i)