Browse Source

ColladaExporter: use actual mesh names when available

Chris Weermann (TGE) 6 years ago
parent
commit
38153748ab
1 changed files with 7 additions and 4 deletions
  1. 7 4
      code/Collada/ColladaExporter.cpp

+ 7 - 4
code/Collada/ColladaExporter.cpp

@@ -93,6 +93,7 @@ void ExportSceneCollada(const char* pFile, IOSystem* pIOSystem, const aiScene* p
 } // end of namespace Assimp
 } // end of namespace Assimp
 
 
 // ------------------------------------------------------------------------------------------------
 // ------------------------------------------------------------------------------------------------
+// Encodes a string into a valid XML ID using the xsd:ID schema qualifications.
 const std::string XMLIDEncode(const std::string& name)
 const std::string XMLIDEncode(const std::string& name)
 {
 {
     const char XML_ID_CHARS[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-.";
     const char XML_ID_CHARS[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_-.";
@@ -875,7 +876,7 @@ void ColladaExporter::WriteControllerLibrary()
 void ColladaExporter::WriteController( size_t pIndex)
 void ColladaExporter::WriteController( size_t pIndex)
 {
 {
     const aiMesh* mesh = mScene->mMeshes[pIndex];
     const aiMesh* mesh = mScene->mMeshes[pIndex];
-    const std::string idstr = GetMeshId( pIndex);
+    const std::string idstr = mesh->mName.length == 0 ? GetMeshId(pIndex) : mesh->mName.C_Str();
     const std::string idstrEscaped = XMLIDEncode(idstr);
     const std::string idstrEscaped = XMLIDEncode(idstr);
 
 
     if ( mesh->mNumFaces == 0 || mesh->mNumVertices == 0 )
     if ( mesh->mNumFaces == 0 || mesh->mNumVertices == 0 )
@@ -1046,7 +1047,7 @@ void ColladaExporter::WriteGeometryLibrary()
 void ColladaExporter::WriteGeometry( size_t pIndex)
 void ColladaExporter::WriteGeometry( size_t pIndex)
 {
 {
     const aiMesh* mesh = mScene->mMeshes[pIndex];
     const aiMesh* mesh = mScene->mMeshes[pIndex];
-    const std::string idstr = GetMeshId( pIndex);
+    const std::string idstr = mesh->mName.length == 0 ? GetMeshId(pIndex) : mesh->mName.C_Str();
     const std::string geometryName = XMLEscape(idstr);
     const std::string geometryName = XMLEscape(idstr);
     const std::string geometryId = XMLIDEncode(idstr);
     const std::string geometryId = XMLIDEncode(idstr);
 
 
@@ -1641,15 +1642,17 @@ void ColladaExporter::WriteNode( const aiScene* pScene, aiNode* pNode)
         if( mesh->mNumFaces == 0 || mesh->mNumVertices == 0 )
         if( mesh->mNumFaces == 0 || mesh->mNumVertices == 0 )
             continue;
             continue;
 
 
+        const std::string meshName = mesh->mName.length == 0 ? GetMeshId(pNode->mMeshes[a]) : mesh->mName.C_Str();
+
         if( mesh->mNumBones == 0 )
         if( mesh->mNumBones == 0 )
         {
         {
-            mOutput << startstr << "<instance_geometry url=\"#" << XMLIDEncode(GetMeshId( pNode->mMeshes[a])) << "\">" << endstr;
+            mOutput << startstr << "<instance_geometry url=\"#" << XMLIDEncode(meshName) << "\">" << endstr;
             PushTag();
             PushTag();
         }
         }
         else
         else
         {
         {
             mOutput << startstr
             mOutput << startstr
-                    << "<instance_controller url=\"#" << XMLIDEncode(GetMeshId( pNode->mMeshes[a])) << "-skin\">"
+                    << "<instance_controller url=\"#" << XMLIDEncode(meshName) << "-skin\">"
                     << endstr;
                     << endstr;
             PushTag();
             PushTag();