|
@@ -325,10 +325,13 @@ inline size_t WriteArray(IOStream * stream, const T* in, unsigned int size)
|
|
|
{
|
|
|
AssbinChunkWriter chunk( container, ASSBIN_CHUNK_AINODE );
|
|
|
|
|
|
+ size_t nb_metadata = (node->mMetaData != NULL ? node->mMetaData->mNumProperties : 0);
|
|
|
+
|
|
|
Write<aiString>(&chunk,node->mName);
|
|
|
Write<aiMatrix4x4>(&chunk,node->mTransformation);
|
|
|
Write<unsigned int>(&chunk,node->mNumChildren);
|
|
|
Write<unsigned int>(&chunk,node->mNumMeshes);
|
|
|
+ Write<unsigned int>(&chunk,nb_metadata);
|
|
|
|
|
|
for (unsigned int i = 0; i < node->mNumMeshes;++i) {
|
|
|
Write<unsigned int>(&chunk,node->mMeshes[i]);
|
|
@@ -337,6 +340,39 @@ inline size_t WriteArray(IOStream * stream, const T* in, unsigned int size)
|
|
|
for (unsigned int i = 0; i < node->mNumChildren;++i) {
|
|
|
WriteBinaryNode( &chunk, node->mChildren[i] );
|
|
|
}
|
|
|
+
|
|
|
+ for (unsigned int i = 0; i < nb_metadata; ++i) {
|
|
|
+ const aiString& key = node->mMetaData->mKeys[i];
|
|
|
+ aiMetadataType type = node->mMetaData->mValues[i].mType;
|
|
|
+ void* value = node->mMetaData->mValues[i].mData;
|
|
|
+
|
|
|
+ Write<aiString>(&chunk, key);
|
|
|
+ Write<uint16_t>(&chunk, type);
|
|
|
+
|
|
|
+ switch (type) {
|
|
|
+ case AI_BOOL:
|
|
|
+ Write<bool>(&chunk, *((bool*) value));
|
|
|
+ break;
|
|
|
+ case AI_INT32:
|
|
|
+ Write<int32_t>(&chunk, *((int32_t*) value));
|
|
|
+ break;
|
|
|
+ case AI_UINT64:
|
|
|
+ Write<uint64_t>(&chunk, *((uint64_t*) value));
|
|
|
+ break;
|
|
|
+ case AI_FLOAT:
|
|
|
+ Write<float>(&chunk, *((float*) value));
|
|
|
+ break;
|
|
|
+ case AI_DOUBLE:
|
|
|
+ Write<double>(&chunk, *((double*) value));
|
|
|
+ break;
|
|
|
+ case AI_AISTRING:
|
|
|
+ Write<aiString>(&chunk, *((aiString*) value));
|
|
|
+ break;
|
|
|
+ case AI_AIVECTOR3D:
|
|
|
+ Write<aiVector3D>(&chunk, *((aiVector3D*) value));
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// -----------------------------------------------------------------------------------
|