[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