diff --git a/pandatool/src/assimp/assimpLoader.cxx b/pandatool/src/assimp/assimpLoader.cxx index 2ffb6fd237..82383f0d32 100644 --- a/pandatool/src/assimp/assimpLoader.cxx +++ b/pandatool/src/assimp/assimpLoader.cxx @@ -39,6 +39,7 @@ #include "pvector.h" #include "cmath.h" #include "deg_2_rad.h" +#include "string_utils.h" #include "pandaIOSystem.h" #include "pandaLogger.h" @@ -1040,6 +1041,44 @@ load_node(const aiNode &node, PandaNode *parent) { parent->add_child(pnode); } + if (node.mMetaData != nullptr) { + for (unsigned i = 0; i < node.mMetaData->mNumProperties; ++i) { + const aiMetadataEntry &entry = node.mMetaData->mValues[i]; + std::string value; + switch (entry.mType) { + //case AI_BOOL: + // value = (*static_cast(entry.mData)) ? "1" : ""; + // break; + case (aiMetadataType)1: // AI_INT32 + value = format_string(*static_cast(entry.mData)); + break; + case AI_UINT64: + value = format_string(*static_cast(entry.mData)); + break; + case AI_FLOAT: + value = format_string(*static_cast(entry.mData)); + break; + case AI_AISTRING: + { + const aiString *str = static_cast(entry.mData); + value = std::string(str->data, str->length); + } + break; + default: + // Special case because AI_DOUBLE was added in Assimp 4.0 with the same + // value as AI_AISTRING. Defined as if so that we don't get a duplicate + // case error with moder ncompilers. + if (entry.mType == (aiMetadataType)4) { + value = format_string(*static_cast(entry.mData)); + break; + } + continue; + } + const aiString &key = node.mMetaData->mKeys[i]; + pnode->set_tag(std::string(key.data, key.length), std::move(value)); + } + } + // Load in the transformation matrix. const aiMatrix4x4 &t = node.mTransformation; if (!t.IsIdentity()) {