Make IsVerbose accessible outside the exporter
parent
84c0d6b95a
commit
01d0f06d3a
|
@ -315,34 +315,6 @@ const aiExportDataBlob* Exporter::ExportToBlob( const aiScene* pScene, const cha
|
||||||
return pimpl->blob;
|
return pimpl->blob;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
|
||||||
bool IsVerboseFormat(const aiMesh* mesh) {
|
|
||||||
// avoid slow vector<bool> specialization
|
|
||||||
std::vector<unsigned int> seen(mesh->mNumVertices,0);
|
|
||||||
for(unsigned int i = 0; i < mesh->mNumFaces; ++i) {
|
|
||||||
const aiFace& f = mesh->mFaces[i];
|
|
||||||
for(unsigned int j = 0; j < f.mNumIndices; ++j) {
|
|
||||||
if(++seen[f.mIndices[j]] == 2) {
|
|
||||||
// found a duplicate index
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
|
||||||
bool IsVerboseFormat(const aiScene* pScene) {
|
|
||||||
for(unsigned int i = 0; i < pScene->mNumMeshes; ++i) {
|
|
||||||
if(!IsVerboseFormat(pScene->mMeshes[i])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
aiReturn Exporter::Export( const aiScene* pScene, const char* pFormatId, const char* pPath,
|
aiReturn Exporter::Export( const aiScene* pScene, const char* pFormatId, const char* pPath,
|
||||||
unsigned int pPreprocessing, const ExportProperties* pProperties) {
|
unsigned int pPreprocessing, const ExportProperties* pProperties) {
|
||||||
|
@ -352,7 +324,7 @@ aiReturn Exporter::Export( const aiScene* pScene, const char* pFormatId, const c
|
||||||
// format. They will likely not be aware that there is a flag in the scene to indicate
|
// format. They will likely not be aware that there is a flag in the scene to indicate
|
||||||
// this, however. To avoid surprises and bug reports, we check for duplicates in
|
// this, however. To avoid surprises and bug reports, we check for duplicates in
|
||||||
// meshes upfront.
|
// meshes upfront.
|
||||||
const bool is_verbose_format = !(pScene->mFlags & AI_SCENE_FLAGS_NON_VERBOSE_FORMAT) || IsVerboseFormat(pScene);
|
const bool is_verbose_format = !(pScene->mFlags & AI_SCENE_FLAGS_NON_VERBOSE_FORMAT) || MakeVerboseFormatProcess::IsVerboseFormat(pScene);
|
||||||
|
|
||||||
pimpl->mProgressHandler->UpdateFileWrite(0, 4);
|
pimpl->mProgressHandler->UpdateFileWrite(0, 4);
|
||||||
|
|
||||||
|
|
|
@ -224,3 +224,32 @@ bool MakeVerboseFormatProcess::MakeVerboseFormat(aiMesh* pcMesh)
|
||||||
}
|
}
|
||||||
return (pcMesh->mNumVertices != iOldNumVertices);
|
return (pcMesh->mNumVertices != iOldNumVertices);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
bool IsMeshInVerboseFormat(const aiMesh* mesh) {
|
||||||
|
// avoid slow vector<bool> specialization
|
||||||
|
std::vector<unsigned int> seen(mesh->mNumVertices,0);
|
||||||
|
for(unsigned int i = 0; i < mesh->mNumFaces; ++i) {
|
||||||
|
const aiFace& f = mesh->mFaces[i];
|
||||||
|
for(unsigned int j = 0; j < f.mNumIndices; ++j) {
|
||||||
|
if(++seen[f.mIndices[j]] == 2) {
|
||||||
|
// found a duplicate index
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
bool MakeVerboseFormatProcess::IsVerboseFormat(const aiScene* pScene) {
|
||||||
|
for(unsigned int i = 0; i < pScene->mNumMeshes; ++i) {
|
||||||
|
if(!IsMeshInVerboseFormat(pScene->mMeshes[i])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -94,6 +94,13 @@ public:
|
||||||
* @param pScene The imported data to work at. */
|
* @param pScene The imported data to work at. */
|
||||||
void Execute( aiScene* pScene);
|
void Execute( aiScene* pScene);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// -------------------------------------------------------------------
|
||||||
|
/** Checks whether the scene is already in verbose format.
|
||||||
|
* @param pScene The data to check.
|
||||||
|
* @return true if the scene is already in verbose format. */
|
||||||
|
static bool IsVerboseFormat(const aiScene* pScene);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue