PLYLoader: improve readability by refactorings.
parent
23892a6ded
commit
7c71f0b7a9
|
@ -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<aiVector3D> 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<aiVector3D> 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<PLY::Face>* avFaces,
|
|||
for (std::vector<PLY::Face>::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<aiVector3D>* 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<PLY::Element>::const_iterator i = pcDOM->alElements.begin();
|
||||
i != pcDOM->alElements.end();++i,++_i)
|
||||
|
|
Loading…
Reference in New Issue