FBX: Fix for loading taking a very long time on models with many duplicate names (issue_2390)

pull/2391/head
Matias 2019-03-27 11:20:16 +01:00
parent a43ac5b3fd
commit ca08c4a209
2 changed files with 10 additions and 7 deletions

View File

@ -410,16 +410,17 @@ namespace Assimp {
void FBXConverter::GetUniqueName(const std::string &name, std::string &uniqueName)
{
int i = 0;
uniqueName = name;
while (mNodeNames.find(uniqueName) != mNodeNames.end())
int i = 0;
auto it = mNodeNameInstances.find(uniqueName);
if (it != mNodeNameInstances.end())
{
++i;
i = it->second + 1;
std::stringstream ext;
ext << name << std::setfill('0') << std::setw(3) << i;
uniqueName = ext.str();
}
mNodeNames.insert(uniqueName);
mNodeNameInstances[name] = i;
}

View File

@ -58,6 +58,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <assimp/texture.h>
#include <assimp/camera.h>
#include <assimp/StringComparison.h>
#include <unordered_map>
struct aiScene;
struct aiNode;
@ -74,8 +75,6 @@ namespace FBX {
class Document;
using NodeNameCache = std::set<std::string>;
/**
* Convert a FBX #Document to #aiScene
* @param out Empty scene to be populated
@ -444,7 +443,10 @@ private:
typedef std::map<std::string, unsigned int> NodeAnimBitMap;
NodeAnimBitMap node_anim_chain_bits;
NodeNameCache mNodeNames;
// number of nodes with the same name
typedef std::unordered_map<std::string, unsigned int> NodeNameMap;
NodeNameMap mNodeNameInstances;
double anim_fps;
aiScene* const out;