Commit: 3111f08ad956352e9dfeedb8600fb35b4e38543d
Author: gaiaclary
Date:   Thu Feb 27 15:23:18 2014 +0100
https://developer.blender.org/rB3111f08ad956352e9dfeedb8600fb35b4e38543d

Fix T38847: Reject reuse of child bones as root bones. That doesn't make sense 
anyways.

===================================================================

M       source/blender/collada/ArmatureImporter.cpp

===================================================================

diff --git a/source/blender/collada/ArmatureImporter.cpp 
b/source/blender/collada/ArmatureImporter.cpp
index 6d4308b..c52ee65 100644
--- a/source/blender/collada/ArmatureImporter.cpp
+++ b/source/blender/collada/ArmatureImporter.cpp
@@ -337,18 +337,23 @@ void ArmatureImporter::create_armature_bones( )
                if (get_armature_for_joint(*ri) != NULL) continue;
                
                Object *ob_arm = joint_parent_map[(*ri)->getUniqueId()];
-
                if (!ob_arm)
                        continue;
 
-               ED_armature_to_edit((bArmature *)ob_arm->data);
+               bArmature * armature = (bArmature *)ob_arm->data;
+               if (!armature)
+                       continue;
+
+               char * bone_name = (char *)bc_get_joint_name(*ri);
+               Bone *bone = BKE_armature_find_bone_name(armature, bone_name);
+               if(bone) {
+                       fprintf(stderr, "Reuse of child bone [%s] as root bone 
in same Armature is not supported.\n", bone_name);
+                       continue;
+               }
 
-               /*
-                * TODO:
-                * check if bones have already been created for a given joint
-                */
+               ED_armature_to_edit(armature);
 
-               create_bone(NULL, *ri , NULL, 
(*ri)->getChildNodes().getCount(), NULL, (bArmature *)ob_arm->data);
+               create_bone(NULL, *ri , NULL, 
(*ri)->getChildNodes().getCount(), NULL, armature);
 
                //leaf bone tails are derived from the matrix, so no need of 
this.
                fix_leaf_bones();
@@ -356,12 +361,12 @@ void ArmatureImporter::create_armature_bones( )
                // exit armature edit mode
                unskinned_armature_map[(*ri)->getUniqueId()] = ob_arm;
 
-               ED_armature_from_edit((bArmature *)ob_arm->data);
+               ED_armature_from_edit(armature);
 
                //This serves no purpose, as pose is automatically reset later, 
in BKE_where_is_bone()
                //set_pose(ob_arm, *ri, NULL, NULL);
 
-               ED_armature_edit_free((bArmature *)ob_arm->data);
+               ED_armature_edit_free(armature);
                DAG_id_tag_update(&ob_arm->id, OB_RECALC_OB | OB_RECALC_DATA);
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to