Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaia Clary <gaia.clary@machinimatrix.org>2016-09-23 13:56:04 +0300
committerGaia Clary <gaia.clary@machinimatrix.org>2016-09-24 02:06:32 +0300
commit4b891b40c218ef5f45706cbc4636a5333469dd1c (patch)
tree6a62b4f12e0fba5253184555b10826bd4ca6c6ae /source/blender/collada/collada_utils.cpp
parent25b61662f5b4c9d04a43611927e7748a046f35db (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.cpp32
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()