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);


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

Reply via email to