Skip to content

Commit

Permalink
Add mName member to aiMesh.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
aramis_acg committed May 10, 2010
1 parent 35f6851 commit 261f49c
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 7 deletions.
19 changes: 12 additions & 7 deletions code/JoinVerticesProcess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
// ------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions code/SortByPTypeProcess.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
6 changes: 6 additions & 0 deletions code/SplitLargeMeshes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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 + (
Expand Down Expand Up @@ -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())
{
Expand Down
2 changes: 2 additions & 0 deletions code/ValidateDataStructure.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
Binary file modified doc/AssimpDoc_Html/AssimpDoc.chm
Binary file not shown.
13 changes: 13 additions & 0 deletions include/aiMesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 261f49c

Please sign in to comment.