Revision: 26280
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26280
Author:   aligorith
Date:     2010-01-26 10:25:32 +0100 (Tue, 26 Jan 2010)

Log Message:
-----------
Finishing off the Transform code changes for Degrees/Radians:

Added flags for the mapping function offering more control over what values 
were affected and when. In the WIP code, the values for unselected verts were 
getting the restoration conversion being repeatedly applied, resulting in the 
values tending to zero.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/animation/anim_draw.c
    trunk/blender/source/blender/editors/include/ED_anim_api.h
    trunk/blender/source/blender/editors/space_graph/graph_draw.c
    trunk/blender/source/blender/editors/space_graph/graph_edit.c
    trunk/blender/source/blender/editors/space_graph/graph_select.c
    trunk/blender/source/blender/editors/transform/transform_conversions.c
    trunk/blender/source/blender/editors/transform/transform_generics.c

Modified: trunk/blender/source/blender/editors/animation/anim_draw.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_draw.c  2010-01-26 
08:41:16 UTC (rev 26279)
+++ trunk/blender/source/blender/editors/animation/anim_draw.c  2010-01-26 
09:25:32 UTC (rev 26280)
@@ -42,6 +42,7 @@
 #include "MEM_guardedalloc.h"
 
 #include "BLI_blenlib.h"
+#include "BLI_math.h"
 
 #include "BKE_animsys.h"
 #include "BKE_action.h"
@@ -360,44 +361,56 @@
 /* helper function for ANIM_unit_mapping_apply_fcurve -> mapping callback for 
unit mapping */
 static short bezt_unit_mapping_apply (BeztEditData *bed, BezTriple *bezt)
 {
-       /* mapping factor is stored in f1, only_keys option is stored in i1 */
-       short only_keys= (short)bed->i1;
+       /* mapping factor is stored in f1, flags are stored in i1 */
+       short only_keys= (bed->i1 & ANIM_UNITCONV_ONLYKEYS);
+       short sel_vs= (bed->i1 & ANIM_UNITCONV_SELVERTS);
        float fac= bed->f1;
        
        /* adjust BezTriple handles only if allowed to */
        if (only_keys == 0) {
-               bezt->vec[0][1] *= fac;
-               bezt->vec[2][1] *= fac;
+               if ((sel_vs==0) || (bezt->f1 & SELECT)) 
+                       bezt->vec[0][1] *= fac;
+               if ((sel_vs==0) || (bezt->f3 & SELECT)) 
+                       bezt->vec[2][1] *= fac;
        }
        
-       bezt->vec[1][1] *= fac;
+       if ((sel_vs == 0) || (bezt->f2 & SELECT))
+               bezt->vec[1][1] *= fac;
        
        return 0;
 }
 
 /* Apply/Unapply units conversions to keyframes */
-void ANIM_unit_mapping_apply_fcurve (Scene *scene, ID *id, FCurve *fcu, short 
restore, short only_keys)
+void ANIM_unit_mapping_apply_fcurve (Scene *scene, ID *id, FCurve *fcu, short 
flag)
 {
        BeztEditData bed;
+       BeztEditFunc sel_cb;
        float fac;
        
        /* calculate mapping factor, and abort if nothing to change */
-       fac= ANIM_unit_mapping_get_factor(scene, id, fcu, restore);
+       fac= ANIM_unit_mapping_get_factor(scene, id, fcu, (flag & 
ANIM_UNITCONV_RESTORE));
        if (fac == 1.0f)
                return;
        
        /* init edit data 
         *      - mapping factor is stored in f1
-        *      - only_keys is stored in 'i1'
+        *      - flags are stored in 'i1'
         */
        memset(&bed, 0, sizeof(BeztEditData));
        bed.f1= (float)fac;
-       bed.i1= (int)only_keys;
+       bed.i1= (int)flag;
        
+       /* only selected? */
+       if (flag & ANIM_UNITCONV_ONLYSEL)
+               sel_cb= ANIM_editkeyframes_ok(BEZT_OK_SELECTED);
+       else
+               sel_cb= NULL;
+       
        /* apply to F-Curve */
-       ANIM_fcurve_keys_bezier_loop(&bed, fcu, NULL, bezt_unit_mapping_apply, 
NULL);
+       ANIM_fcurve_keys_bezier_loop(&bed, fcu, sel_cb, 
bezt_unit_mapping_apply, NULL);
        
        // FIXME: loop here for samples should be generalised
+       // TODO: only sel?
        if (fcu->fpt) {
                FPoint *fpt;
                int i;

Modified: trunk/blender/source/blender/editors/include/ED_anim_api.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_anim_api.h  2010-01-26 
08:41:16 UTC (rev 26279)
+++ trunk/blender/source/blender/editors/include/ED_anim_api.h  2010-01-26 
09:25:32 UTC (rev 26280)
@@ -467,11 +467,23 @@
 /* ------------- Unit Conversion Mappings ------------- */
 /* anim_draw.c */
 
+/* flags for conversion mapping */
+typedef enum eAnimUnitConv_Flags {
+               /* restore to original internal values */
+       ANIM_UNITCONV_RESTORE   = (1<<0),
+               /* ignore handles (i.e. only touch main keyframes) */
+       ANIM_UNITCONV_ONLYKEYS  = (1<<1),
+               /* only touch selected BezTriples */
+       ANIM_UNITCONV_ONLYSEL   = (1<<2),
+               /* only touch selected vertices */
+       ANIM_UNITCONV_SELVERTS  = (1<<3),
+} eAnimUnitConv_Flags;
+
 /* Get unit conversion factor for given ID + F-Curve */
 float ANIM_unit_mapping_get_factor(struct Scene *scene, struct ID *id, struct 
FCurve *fcu, short restore);
 
 /* Apply/Unapply units conversions to keyframes */
-void ANIM_unit_mapping_apply_fcurve(struct Scene *scene, struct ID *id, struct 
FCurve *fcu, short restore, short only_keys);
+void ANIM_unit_mapping_apply_fcurve(struct Scene *scene, struct ID *id, struct 
FCurve *fcu, short flag);
 
 /* ------------- Utility macros ----------------------- */
 

Modified: trunk/blender/source/blender/editors/space_graph/graph_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_draw.c       
2010-01-26 08:41:16 UTC (rev 26279)
+++ trunk/blender/source/blender/editors/space_graph/graph_draw.c       
2010-01-26 09:25:32 UTC (rev 26280)
@@ -561,7 +561,7 @@
        glBegin(GL_LINE_STRIP);
        
        /* apply unit mapping */
-       ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 0, 0);
+       ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 0);
        
        /* extrapolate to left? - left-side of view comes before first 
keyframe? */
        if (prevfpt->vec[0] > v2d->cur.xmin) {
@@ -622,7 +622,7 @@
        }
        
        /* unapply unit mapping */
-       ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 1, 0);
+       ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 
ANIM_UNITCONV_RESTORE);
        
        glEnd();
 }
@@ -641,7 +641,7 @@
        glBegin(GL_LINE_STRIP);
        
        /* apply unit mapping */
-       ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 0, 0);
+       ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 0);
        
        /* extrapolate to left? */
        if (prevbezt->vec[1][0] > v2d->cur.xmin) {
@@ -775,7 +775,7 @@
        }
        
        /* unapply unit mapping */
-       ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 1, 0);
+       ANIM_unit_mapping_apply_fcurve(ac->scene, id, fcu, 
ANIM_UNITCONV_RESTORE);
        
        glEnd();
 } 
@@ -912,7 +912,7 @@
                        }
                        else if ( ((fcu->bezt) || (fcu->fpt)) && (fcu->totvert) 
) { 
                                /* apply unit mapping */
-                               ANIM_unit_mapping_apply_fcurve(ac->scene, 
ale->id, fcu, 0, 0);
+                               ANIM_unit_mapping_apply_fcurve(ac->scene, 
ale->id, fcu, 0);
                                
                                if (fcu->bezt) {
                                        /* only draw handles/vertices on 
keyframes */
@@ -928,7 +928,7 @@
                                }
                                
                                /* unapply unit mapping */
-                               ANIM_unit_mapping_apply_fcurve(ac->scene, 
ale->id, fcu, 1, 0);
+                               ANIM_unit_mapping_apply_fcurve(ac->scene, 
ale->id, fcu, ANIM_UNITCONV_RESTORE);
                        }
                }
                

Modified: trunk/blender/source/blender/editors/space_graph/graph_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_edit.c       
2010-01-26 08:41:16 UTC (rev 26279)
+++ trunk/blender/source/blender/editors/space_graph/graph_edit.c       
2010-01-26 09:25:32 UTC (rev 26280)
@@ -1574,7 +1574,7 @@
                AnimData *adt= ANIM_nla_mapping_get(&ac, ale);
                
                /* apply unit corrections */
-               ANIM_unit_mapping_apply_fcurve(ac.scene, ale->id, 
ale->key_data, 0, 1);
+               ANIM_unit_mapping_apply_fcurve(ac.scene, ale->id, 
ale->key_data, ANIM_UNITCONV_ONLYKEYS);
                
                if (adt) {
                        ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 
1); 
@@ -1585,7 +1585,7 @@
                        ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, 
bezt_calc_average, NULL);
                
                /* unapply unit corrections */
-               ANIM_unit_mapping_apply_fcurve(ac.scene, ale->id, 
ale->key_data, 1, 1);
+               ANIM_unit_mapping_apply_fcurve(ac.scene, ale->id, 
ale->key_data, ANIM_UNITCONV_RESTORE|ANIM_UNITCONV_ONLYKEYS);
        }
        
        BLI_freelistN(&anim_data);
@@ -1667,7 +1667,7 @@
                AnimData *adt= ANIM_nla_mapping_get(ac, ale);
                
                /* apply unit corrections */
-               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, 0, 0);
+               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, 0);
                
                if (adt) {
                        ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 
1); 
@@ -1678,7 +1678,7 @@
                        ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, 
edit_cb, calchandles_fcurve);
                        
                /* apply unit corrections */
-               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, 1, 0);
+               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, ANIM_UNITCONV_RESTORE);
        }
        
        BLI_freelistN(&anim_data);
@@ -1791,7 +1791,7 @@
                AnimData *adt= ANIM_nla_mapping_get(ac, ale);
                
                /* apply unit corrections */
-               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, 0, 1);
+               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, ANIM_UNITCONV_ONLYKEYS);
                
                if (adt) {
                        ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 0, 
1); 
@@ -1802,7 +1802,7 @@
                        ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, 
edit_cb, calchandles_fcurve);
                        
                /* unapply unit corrections */
-               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, 1, 1);
+               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, ANIM_UNITCONV_ONLYKEYS|ANIM_UNITCONV_RESTORE);
        }
        
        BLI_freelistN(&anim_data);

Modified: trunk/blender/source/blender/editors/space_graph/graph_select.c
===================================================================
--- trunk/blender/source/blender/editors/space_graph/graph_select.c     
2010-01-26 08:41:16 UTC (rev 26279)
+++ trunk/blender/source/blender/editors/space_graph/graph_select.c     
2010-01-26 09:25:32 UTC (rev 26280)
@@ -248,7 +248,7 @@
                FCurve *fcu= (FCurve *)ale->key_data;
                
                /* apply unit corrections */
-               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, 0, 1);
+               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, ANIM_UNITCONV_ONLYKEYS);
                
                /* apply NLA mapping to all the keyframes, since it's easier 
than trying to
                 * guess when a callback might use something different
@@ -287,7 +287,7 @@
                        ANIM_nla_mapping_apply_fcurve(adt, ale->key_data, 1, 1);
                        
                /* unapply unit corrections */
-               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, 1, 1);
+               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, ANIM_UNITCONV_RESTORE|ANIM_UNITCONV_ONLYKEYS);
        }
        
        /* cleanup */
@@ -609,7 +609,7 @@
                AnimData *adt= ANIM_nla_mapping_get(ac, ale);
                
                /* apply unit corrections */
-               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, 0, 0);
+               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, 0);
                
                /* try to progressively get closer to the right point... */
                if (fcu->bezt) {
@@ -679,7 +679,7 @@
                }
                
                /* unapply unit corrections */
-               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, 1, 0);
+               ANIM_unit_mapping_apply_fcurve(ac->scene, ale->id, 
ale->key_data, ANIM_UNITCONV_RESTORE);
        }
        
        /* free channels */

Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c      
2010-01-26 08:41:16 UTC (rev 26279)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c      
2010-01-26 09:25:32 UTC (rev 26280)
@@ -3495,7 +3495,7 @@

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to