[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