From b944db3e7904da8233c124ff0f3a0a1ecf55c3dd Mon Sep 17 00:00:00 2001 From: sabrina-shanman Date: Wed, 11 Sep 2019 16:50:21 -0700 Subject: [PATCH] std::vector-ize joints and materials in hfm::Model --- interface/src/avatar/AvatarDoctor.cpp | 4 ++-- .../src/avatars-renderer/SkeletonModel.cpp | 2 +- libraries/baking/src/MaterialBaker.cpp | 2 +- libraries/baking/src/MaterialBaker.h | 2 +- libraries/baking/src/ModelBaker.cpp | 2 +- libraries/fbx/src/FBXSerializer.cpp | 9 ++++++--- libraries/fbx/src/GLTFSerializer.cpp | 6 +++--- libraries/fbx/src/OBJSerializer.cpp | 13 +++++++------ libraries/hfm/src/hfm/HFM.h | 4 ++-- libraries/model-baker/src/model-baker/Baker.cpp | 4 ++-- 10 files changed, 26 insertions(+), 22 deletions(-) diff --git a/interface/src/avatar/AvatarDoctor.cpp b/interface/src/avatar/AvatarDoctor.cpp index 01a40e89fd..a12b4dfcc0 100644 --- a/interface/src/avatar/AvatarDoctor.cpp +++ b/interface/src/avatar/AvatarDoctor.cpp @@ -99,12 +99,12 @@ void AvatarDoctor::startDiagnosing() { } // RIG - if (avatarModel.joints.isEmpty()) { + if (avatarModel.joints.empty()) { addError("Avatar has no rig.", "no-rig"); } else { auto jointNames = avatarModel.getJointNames(); - if (avatarModel.joints.length() > NETWORKED_JOINTS_LIMIT) { + if (avatarModel.joints.size() > NETWORKED_JOINTS_LIMIT) { addError(tr( "Avatar has over %n bones.", "", NETWORKED_JOINTS_LIMIT), "maximum-bone-limit"); } // Avatar does not have Hips bone mapped diff --git a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp index 40b65c54a1..d082d515fc 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/SkeletonModel.cpp @@ -312,7 +312,7 @@ void SkeletonModel::computeBoundingShape() { } const HFMModel& hfmModel = getHFMModel(); - if (hfmModel.joints.isEmpty() || _rig.indexOfJoint("Hips") == -1) { + if (hfmModel.joints.empty() || _rig.indexOfJoint("Hips") == -1) { // rootJointIndex == -1 if the avatar model has no skeleton return; } diff --git a/libraries/baking/src/MaterialBaker.cpp b/libraries/baking/src/MaterialBaker.cpp index 9a1b1b2d24..d177ddf358 100644 --- a/libraries/baking/src/MaterialBaker.cpp +++ b/libraries/baking/src/MaterialBaker.cpp @@ -258,7 +258,7 @@ void MaterialBaker::addTexture(const QString& materialName, image::TextureUsage: } }; -void MaterialBaker::setMaterials(const QHash& materials, const QString& baseURL) { +void MaterialBaker::setMaterials(const std::vector& materials, const QString& baseURL) { _materialResource = NetworkMaterialResourcePointer(new NetworkMaterialResource(), [](NetworkMaterialResource* ptr) { ptr->deleteLater(); }); for (auto& material : materials) { _materialResource->parsedMaterials.names.push_back(material.name.toStdString()); diff --git a/libraries/baking/src/MaterialBaker.h b/libraries/baking/src/MaterialBaker.h index 04782443f0..bb47941af6 100644 --- a/libraries/baking/src/MaterialBaker.h +++ b/libraries/baking/src/MaterialBaker.h @@ -32,7 +32,7 @@ public: bool isURL() const { return _isURL; } QString getBakedMaterialData() const { return _bakedMaterialData; } - void setMaterials(const QHash& materials, const QString& baseURL); + void setMaterials(const std::vector& materials, const QString& baseURL); void setMaterials(const NetworkMaterialResourcePointer& materialResource); NetworkMaterialResourcePointer getNetworkMaterialResource() const { return _materialResource; } diff --git a/libraries/baking/src/ModelBaker.cpp b/libraries/baking/src/ModelBaker.cpp index 9d6a368e1c..38ebf6dfce 100644 --- a/libraries/baking/src/ModelBaker.cpp +++ b/libraries/baking/src/ModelBaker.cpp @@ -259,7 +259,7 @@ void ModelBaker::bakeSourceCopy() { return; } - if (!_hfmModel->materials.isEmpty()) { + if (!_hfmModel->materials.empty()) { _materialBaker = QSharedPointer( new MaterialBaker(_modelURL.fileName(), true, _bakedOutputDir), &MaterialBaker::deleteLater diff --git a/libraries/fbx/src/FBXSerializer.cpp b/libraries/fbx/src/FBXSerializer.cpp index de6ab545e5..81444f8c6b 100644 --- a/libraries/fbx/src/FBXSerializer.cpp +++ b/libraries/fbx/src/FBXSerializer.cpp @@ -1357,11 +1357,11 @@ HFMModel* FBXSerializer::extractHFMModel(const hifi::VariantHash& mapping, const } } - hfmModel.joints.append(joint); + hfmModel.joints.push_back(joint); } // NOTE: shapeVertices are in joint-frame - hfmModel.shapeVertices.resize(std::max(1, hfmModel.joints.size()) ); + hfmModel.shapeVertices.resize(std::max((size_t)1, hfmModel.joints.size()) ); hfmModel.bindExtents.reset(); hfmModel.meshExtents.reset(); @@ -1400,7 +1400,10 @@ HFMModel* FBXSerializer::extractHFMModel(const hifi::VariantHash& mapping, const } } #endif - hfmModel.materials = _hfmMaterials; + + for (auto materialIt = _hfmMaterials.cbegin(); materialIt != _hfmMaterials.cend(); ++materialIt) { + hfmModel.materials.push_back(materialIt.value()); + } // see if any materials have texture children bool materialsHaveTextures = checkMaterialsHaveTextures(_hfmMaterials, _textureFilenames, _connectionChildMap); diff --git a/libraries/fbx/src/GLTFSerializer.cpp b/libraries/fbx/src/GLTFSerializer.cpp index e42b516559..4c4050c935 100755 --- a/libraries/fbx/src/GLTFSerializer.cpp +++ b/libraries/fbx/src/GLTFSerializer.cpp @@ -1002,8 +1002,8 @@ bool GLTFSerializer::buildGeometry(HFMModel& hfmModel, const hifi::VariantHash& for (int i = 0; i < materialIDs.size(); ++i) { QString& matid = materialIDs[i]; - hfmModel.materials[matid] = HFMMaterial(); - HFMMaterial& hfmMaterial = hfmModel.materials[matid]; + hfmModel.materials.emplace_back(); + HFMMaterial& hfmMaterial = hfmModel.materials.back(); hfmMaterial._material = std::make_shared(); hfmMaterial.name = hfmMaterial.materialID = matid; setHFMMaterial(hfmMaterial, _file.materials[i]); @@ -2036,7 +2036,7 @@ void GLTFSerializer::hfmDebugDump(const HFMModel& hfmModel) { qCDebug(modelformat) << " meshExtents.size() = " << hfmModel.meshExtents.size(); qCDebug(modelformat) << " jointIndices.size() =" << hfmModel.jointIndices.size(); - qCDebug(modelformat) << " joints.count() =" << hfmModel.joints.count(); + qCDebug(modelformat) << " joints.count() =" << hfmModel.joints.size(); qCDebug(modelformat) << "---------------- Meshes ----------------"; qCDebug(modelformat) << " meshes.count() =" << hfmModel.meshes.size(); qCDebug(modelformat) << " blendshapeChannelNames = " << hfmModel.blendshapeChannelNames; diff --git a/libraries/fbx/src/OBJSerializer.cpp b/libraries/fbx/src/OBJSerializer.cpp index 5f60fe7927..d6be066674 100644 --- a/libraries/fbx/src/OBJSerializer.cpp +++ b/libraries/fbx/src/OBJSerializer.cpp @@ -892,11 +892,12 @@ HFMModel::Pointer OBJSerializer::read(const hifi::ByteArray& data, const hifi::V continue; } - HFMMaterial& hfmMaterial = hfmModel.materials[materialID] = HFMMaterial(objMaterial.diffuseColor, - objMaterial.specularColor, - objMaterial.emissiveColor, - objMaterial.shininess, - objMaterial.opacity); + hfmModel.materials.emplace_back(objMaterial.diffuseColor, + objMaterial.specularColor, + objMaterial.emissiveColor, + objMaterial.shininess, + objMaterial.opacity); + HFMMaterial& hfmMaterial = hfmModel.materials.back(); hfmMaterial.name = materialID; hfmMaterial.materialID = materialID; @@ -1046,7 +1047,7 @@ void hfmDebugDump(const HFMModel& hfmModel) { } qCDebug(modelformat) << " jointIndices =" << hfmModel.jointIndices; - qCDebug(modelformat) << " joints.count() =" << hfmModel.joints.count(); + qCDebug(modelformat) << " joints.count() =" << hfmModel.joints.size(); foreach (HFMJoint joint, hfmModel.joints) { diff --git a/libraries/hfm/src/hfm/HFM.h b/libraries/hfm/src/hfm/HFM.h index fcbdd32150..b49e53ad4c 100644 --- a/libraries/hfm/src/hfm/HFM.h +++ b/libraries/hfm/src/hfm/HFM.h @@ -316,12 +316,12 @@ public: std::vector meshes; - QVector joints; + std::vector joints; QHash jointIndices; ///< 1-based, so as to more easily detect missing indices bool hasSkeletonJoints; QVector scripts; - QHash materials; + std::vector materials; glm::mat4 offset; // This includes offset, rotation, and scale as specified by the FST file diff --git a/libraries/model-baker/src/model-baker/Baker.cpp b/libraries/model-baker/src/model-baker/Baker.cpp index e1b2ff97cf..50221c4481 100644 --- a/libraries/model-baker/src/model-baker/Baker.cpp +++ b/libraries/model-baker/src/model-baker/Baker.cpp @@ -40,7 +40,7 @@ namespace baker { for (int i = 0; i < hfmModelIn->meshes.size(); i++) { blendshapesPerMesh.push_back(hfmModelIn->meshes[i].blendshapes.toStdVector()); } - output.edit4() = hfmModelIn->joints.toStdVector(); + output.edit4() = hfmModelIn->joints; } }; @@ -108,7 +108,7 @@ namespace baker { void run(const BakeContextPointer& context, const Input& input, Output& output) { auto hfmModelOut = input.get0(); hfmModelOut->meshes = input.get1(); - hfmModelOut->joints = QVector::fromStdVector(input.get2()); + hfmModelOut->joints = input.get2(); hfmModelOut->jointRotationOffsets = input.get3(); hfmModelOut->jointIndices = input.get4(); hfmModelOut->flowData = input.get5();