[Bf-blender-cvs] [3111f08] master: Fix T38847: Reject reuse of child bones as root bones. That doesn't make sense anyways.
gaiaclary
noreply at git.blender.org
Thu Feb 27 15:23:55 CET 2014
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);
}
}
More information about the Bf-blender-cvs
mailing list