diff --git a/interface/src/renderer/FBXReader.cpp b/interface/src/renderer/FBXReader.cpp index 63e3afc8cf..1058bd02d9 100644 --- a/interface/src/renderer/FBXReader.cpp +++ b/interface/src/renderer/FBXReader.cpp @@ -548,17 +548,18 @@ public: }; void appendModelIDs(const QString& parentID, const QMultiHash& childMap, - QHash& models, QVector& modelIDs) { - if (models.contains(parentID)) { + QHash& models, QSet& remainingModels, QVector& modelIDs) { + if (remainingModels.contains(parentID)) { modelIDs.append(parentID); + remainingModels.remove(parentID); } int parentIndex = modelIDs.size() - 1; foreach (const QString& childID, childMap.values(parentID)) { - if (models.contains(childID)) { + if (remainingModels.contains(childID)) { FBXModel& model = models[childID]; if (model.parentIndex == -1) { model.parentIndex = parentIndex; - appendModelIDs(childID, childMap, models, modelIDs); + appendModelIDs(childID, childMap, models, remainingModels, modelIDs); } } } @@ -1101,8 +1102,12 @@ FBXGeometry extractFBXGeometry(const FBXNode& node, const QVariantHash& mapping) // get the list of models in depth-first traversal order QVector modelIDs; - if (!models.isEmpty()) { - QString top = models.constBegin().key(); + QSet remainingModels; + for (QHash::const_iterator model = models.constBegin(); model != models.constEnd(); model++) { + remainingModels.insert(model.key()); + } + while (!remainingModels.isEmpty()) { + QString top = *remainingModels.constBegin(); forever { foreach (const QString& name, parentMap.values(top)) { if (models.contains(name)) { @@ -1115,7 +1120,7 @@ FBXGeometry extractFBXGeometry(const FBXNode& node, const QVariantHash& mapping) outerContinue: ; } - appendModelIDs(top, childMap, models, modelIDs); + appendModelIDs(top, childMap, models, remainingModels, modelIDs); } // convert the models to joints