[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24890] trunk/blender/source/blender: Pose Bone "Local Location" option.

Brecht Van Lommel brecht at blender.org
Wed Nov 25 15:59:03 CET 2009


Revision: 24890
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24890
Author:   blendix
Date:     2009-11-25 15:59:02 +0100 (Wed, 25 Nov 2009)

Log Message:
-----------
Pose Bone "Local Location" option. This is enabled by default, disabling it
puts the bone location in pose space rather than local bone space.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/armature.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/makesdna/DNA_armature_types.h
    trunk/blender/source/blender/makesrna/intern/rna_armature.c

Modified: trunk/blender/source/blender/blenkernel/intern/armature.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/armature.c	2009-11-25 14:27:50 UTC (rev 24889)
+++ trunk/blender/source/blender/blenkernel/intern/armature.c	2009-11-25 14:59:02 UTC (rev 24890)
@@ -2247,7 +2247,12 @@
 			mul_serie_m4(pchan->pose_mat, parchan->pose_mat, offs_bone, pchan->chan_mat, NULL, NULL, NULL, NULL, NULL);
 	}
 	else {
-		mul_m4_m4m4(pchan->pose_mat, pchan->chan_mat, bone->arm_mat);
+		if(bone->flag & BONE_NO_LOCAL_LOCATION) {
+			mul_m4_m4m4(pchan->pose_mat, pchan->chan_mat, bone->arm_mat);
+			add_v3_v3v3(pchan->pose_mat[3], bone->arm_mat[3], pchan->chan_mat[3]);
+		}
+		else
+			mul_m4_m4m4(pchan->pose_mat, pchan->chan_mat, bone->arm_mat);
 		
 		/* only rootbones get the cyclic offset (unless user doesn't want that) */
 		if ((bone->flag & BONE_NO_CYCLICOFFSET) == 0)

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c	2009-11-25 14:27:50 UTC (rev 24889)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c	2009-11-25 14:59:02 UTC (rev 24890)
@@ -545,7 +545,7 @@
 static void add_pose_transdata(TransInfo *t, bPoseChannel *pchan, Object *ob, TransData *td)
 {
 	Bone *bone= pchan->bone;
-	float pmat[3][3], omat[3][3];
+	float pmat[3][3], omat[3][3], bmat[3][3];
 	float cmat[3][3], tmat[3][3];
 	float vec[3];
 
@@ -619,13 +619,18 @@
 			mul_serie_m3(td->mtx, pchan->bone->bone_mat, pmat, omat, 0,0,0,0,0);    // dang mulserie swaps args
 	}
 	else {
+		if (t->mode==TFM_TRANSLATION && (pchan->bone->flag & BONE_NO_LOCAL_LOCATION))
+			unit_m3(bmat);
+		else
+			copy_m3_m3(bmat, pchan->bone->bone_mat);
+
 		if (constraints_list_needinv(t, &pchan->constraints)) {
 			copy_m3_m4(tmat, pchan->constinv);
 			invert_m3_m3(cmat, tmat);
-			mul_serie_m3(td->mtx, pchan->bone->bone_mat, omat, cmat, 0,0,0,0,0);    // dang mulserie swaps args
+			mul_serie_m3(td->mtx, bmat, omat, cmat, 0,0,0,0,0);    // dang mulserie swaps args
 		}
 		else
-			mul_m3_m3m3(td->mtx, omat, pchan->bone->bone_mat);  // Mat3MulMat3 has swapped args!
+			mul_m3_m3m3(td->mtx, omat, bmat);  // Mat3MulMat3 has swapped args!
 	}
 
 	invert_m3_m3(td->smtx, td->mtx);

Modified: trunk/blender/source/blender/makesdna/DNA_armature_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_armature_types.h	2009-11-25 14:27:50 UTC (rev 24889)
+++ trunk/blender/source/blender/makesdna/DNA_armature_types.h	2009-11-25 14:59:02 UTC (rev 24890)
@@ -171,6 +171,7 @@
 	BONE_EDITMODE_LOCKED		= (1<<19),	/* bone transforms are locked in EditMode */
 	BONE_TRANSFORM_CHILD		= (1<<20),	/* Indicates that a parent is also being transformed */
 	BONE_UNSELECTABLE			= (1<<21),	/* bone cannot be selected */
+	BONE_NO_LOCAL_LOCATION		= (1<<22),	/* bone location is in armature space */
 } eBone_Flag;
 
 #endif

Modified: trunk/blender/source/blender/makesrna/intern/rna_armature.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_armature.c	2009-11-25 14:27:50 UTC (rev 24889)
+++ trunk/blender/source/blender/makesrna/intern/rna_armature.c	2009-11-25 14:59:02 UTC (rev 24890)
@@ -437,6 +437,11 @@
 	RNA_def_property_ui_text(prop, "Inherit Scale", "Bone inherits scaling from parent bone.");
 	RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_SCALE);
 	RNA_def_property_update(prop, 0, "rna_Armature_update_data");
+
+	prop= RNA_def_property(srna, "local_location", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_ui_text(prop, "Local Location", "Bone location is set in local space.");
+	RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", BONE_NO_LOCAL_LOCATION);
+	RNA_def_property_update(prop, 0, "rna_Armature_update_data");
 	
 	prop= RNA_def_property(srna, "draw_wire", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", BONE_DRAWWIRE);





More information about the Bf-blender-cvs mailing list