diff options
author | Gaia Clary <gaia.clary@machinimatrix.org> | 2016-09-23 13:56:04 +0300 |
---|---|---|
committer | Gaia Clary <gaia.clary@machinimatrix.org> | 2016-09-24 02:06:32 +0300 |
commit | 4b891b40c218ef5f45706cbc4636a5333469dd1c (patch) | |
tree | 6a62b4f12e0fba5253184555b10826bd4ca6c6ae /source/blender/collada/collada_utils.cpp | |
parent | 25b61662f5b4c9d04a43611927e7748a046f35db (diff) |
Fix: Collada Importer did not import the Blender Profile information correctly when multiple objects are bound to same armature. This caused Bone tails to be placed wrong.
Diffstat (limited to 'source/blender/collada/collada_utils.cpp')
-rw-r--r-- | source/blender/collada/collada_utils.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp index abe5130b9c1..2efa8b21d81 100644 --- a/source/blender/collada/collada_utils.cpp +++ b/source/blender/collada/collada_utils.cpp @@ -412,6 +412,38 @@ int bc_set_layer(int bitfield, int layer, bool enable) return bitfield; } +/* + | This method creates a new extension map when needed. + | Note: The ~BoneExtensionManager destructor takes care + | to delete the created maps when the manager is removed. +*/ +BoneExtensionMap &BoneExtensionManager::getExtensionMap(bArmature *armature) +{ + std::string key = armature->id.name; + BoneExtensionMap *result = extended_bone_maps[key]; + if (result == NULL) + { + result = new BoneExtensionMap(); + extended_bone_maps[key] = result; + } + return *result; +} + +BoneExtensionManager::~BoneExtensionManager() +{ + std::map<std::string, BoneExtensionMap *>::iterator map_it; + for (map_it = extended_bone_maps.begin(); map_it != extended_bone_maps.end(); ++map_it) + { + BoneExtensionMap *extended_bones = map_it->second; + for (BoneExtensionMap::iterator ext_it = extended_bones->begin(); ext_it != extended_bones->end(); ++ext_it) { + if (ext_it->second != NULL) + delete ext_it->second; + } + extended_bones->clear(); + delete extended_bones; + } +} + /** * BoneExtended is a helper class needed for the Bone chain finder * See ArmatureImporter::fix_leaf_bones() |