Add mName member to aiMesh.

JoinVerticesProcess and SortByPType copy the mesh name to all clone or sub meshes they create.
JoinVerticesProcess' verbose output now prints mesh name, no longer using sprintf (TinyFormatter's age has come).

WARN: This is a public API change (not a breaking one, however).

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@719 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
pull/1/head
aramis_acg 2010-05-10 13:59:29 +00:00
parent 35f6851dba
commit 261f49c468
6 changed files with 36 additions and 7 deletions

View File

@ -49,6 +49,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "JoinVerticesProcess.h"
#include "ProcessHelper.h"
#include "Vertex.h"
#include "TinyFormatter.h"
using namespace Assimp;
// ------------------------------------------------------------------------------------------------
@ -251,13 +252,17 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex)
}
if (!DefaultLogger::isNullLogger() && DefaultLogger::get()->getLogSeverity() == Logger::VERBOSE) {
char szBuff[128]; // should be sufficiently large in every case
::sprintf(szBuff,"Mesh %i | Verts in: %i out: %i | ~%.1f%%",
meshIndex,
pMesh->mNumVertices,
(int)uniqueVertices.size(),
((pMesh->mNumVertices - uniqueVertices.size()) / (float)pMesh->mNumVertices) * 100.f);
DefaultLogger::get()->debug(szBuff);
DefaultLogger::get()->debug((Formatter::format(),
"Mesh ",meshIndex,
" (",
(pMesh->mName.length ? pMesh->mName.data : "unnamed"),
") | Verts in: ",pMesh->mNumVertices,
" out: ",
uniqueVertices.size(),
" | ~",
((pMesh->mNumVertices - uniqueVertices.size()) / (float)pMesh->mNumVertices) * 100.f,
"%"
));
}
// replace vertex data with the unique data sets

View File

@ -221,6 +221,9 @@ void SortByPTypeProcess::Execute( aiScene* pScene)
outMeshes.push_back(new aiMesh());
aiMesh* out = outMeshes.back();
// the name carries the adjacency information between the meshes
out->mName = mesh->mName;
// copy data members
out->mPrimitiveTypes = 1u << real;
out->mMaterialIndex = mesh->mMaterialIndex;

View File

@ -168,6 +168,9 @@ void SplitLargeMeshesProcess_Triangle::SplitMesh(
pcMesh->mNumFaces = iOutFaceNum;
pcMesh->mMaterialIndex = pMesh->mMaterialIndex;
// the name carries the adjacency information between the meshes
pcMesh->mName = pMesh->mName;
if (i == iSubMeshes-1)
{
pcMesh->mNumFaces = iOutFaceNum + (
@ -442,6 +445,9 @@ void SplitLargeMeshesProcess_Vertex::SplitMesh(
pcMesh->mNumVertices = 0;
pcMesh->mMaterialIndex = pMesh->mMaterialIndex;
// the name carries the adjacency information between the meshes
pcMesh->mName = pMesh->mName;
typedef std::vector<aiVertexWeight> BoneWeightList;
if (pMesh->HasBones())
{

View File

@ -318,6 +318,8 @@ void ValidateDSProcess::Validate( const aiMesh* pMesh)
pMesh->mMaterialIndex,mScene->mNumMaterials-1);
}
Validate(&pMesh->mName);
for (unsigned int i = 0; i < pMesh->mNumFaces; ++i)
{
aiFace& face = pMesh->mFaces[i];

Binary file not shown.

View File

@ -440,6 +440,19 @@ struct aiMesh
*/
unsigned int mMaterialIndex;
/** Name of the mesh. Meshes can be named, but this is not a
* requirement and leaving this field empty is totally fine.
* There are mainly three uses for mesh names:
* - some formats name nodes and meshes independently.
* - importers tend to split meshes up to meet the
* one-material-per-mesh requirement. Assigning
* the same (dummy) name to each of the result meshes
* aids the caller at recovering the original mesh
* partitioning.
* - Vertex animations refer to meshes by their names.
**/
aiString mName;
#ifdef __cplusplus
//! Default constructor. Initializes all members to 0