Revision: 18710
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18710
Author:   aligorith
Date:     2009-01-28 07:32:47 +0100 (Wed, 28 Jan 2009)

Log Message:
-----------
Graph Editor: Bringing back editing tools 

* Snap + Mirror Keyframes (Shift-S and Shift-M)
* Set Handle/Interpolation type
* Snap current frame to selected keyframes (Ctrl-Shift-S) from the DopeSheet

* Toggle visibility of all handles (Ctrl H) from AnimSys2 branch also ported

Modified Paths:
--------------
    
branches/blender2.5/blender/source/blender/editors/animation/keyframes_edit.c
    
branches/blender2.5/blender/source/blender/editors/include/ED_keyframes_edit.h
    branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_edit.c
    branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_intern.h
    branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c
    branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_select.c
    
branches/blender2.5/blender/source/blender/editors/transform/transform_conversions.c

Modified: 
branches/blender2.5/blender/source/blender/editors/animation/keyframes_edit.c
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/animation/keyframes_edit.c   
    2009-01-28 03:22:37 UTC (rev 18709)
+++ 
branches/blender2.5/blender/source/blender/editors/animation/keyframes_edit.c   
    2009-01-28 06:32:47 UTC (rev 18710)
@@ -197,7 +197,7 @@
        for (ale= anim_data.first; ale; ale= ale->next) {
                FCurve *fcu= ale->key_data;
                
-               /* make sure keyframes in IPO-curve are all in order, and 
handles are in valid positions */
+               /* make sure keyframes in F-curve are all in order, and handles 
are in valid positions */
                sort_time_fcurve(fcu);
                testhandles_fcurve(fcu);
        }
@@ -308,6 +308,16 @@
        return 0;
 }
 
+static short snap_bezier_horizontal(BeztEditData *bed, BezTriple *bezt)
+{
+       if (bezt->f2 & SELECT) {
+               bezt->vec[0][1]= bezt->vec[2][1]= bezt->vec[1][1];
+               if ((bezt->h1==HD_AUTO) || (bezt->h1==HD_VECT)) bezt->h1= 
HD_ALIGN;
+               if ((bezt->h2==HD_AUTO) || (bezt->h2==HD_VECT)) bezt->h2= 
HD_ALIGN;
+       }
+       return 0;       
+}
+
 // calchandles_ipocurve
 BeztEditFunc ANIM_editkeyframes_snap(short type)
 {
@@ -321,6 +331,8 @@
                        return snap_bezier_nearmarker;
                case SNAP_KEYS_NEARSEC: /* snap to nearest second */
                        return snap_bezier_nearestsec;
+               case SNAP_KEYS_HORIZONTAL: /* snap handles to same value */
+                       return snap_bezier_horizontal;
                default: /* just in case */
                        return snap_bezier_nearest;
        }

Modified: 
branches/blender2.5/blender/source/blender/editors/include/ED_keyframes_edit.h
===================================================================
--- 
branches/blender2.5/blender/source/blender/editors/include/ED_keyframes_edit.h  
    2009-01-28 03:22:37 UTC (rev 18709)
+++ 
branches/blender2.5/blender/source/blender/editors/include/ED_keyframes_edit.h  
    2009-01-28 06:32:47 UTC (rev 18710)
@@ -73,6 +73,7 @@
        SNAP_KEYS_NEARFRAME,
        SNAP_KEYS_NEARSEC,
        SNAP_KEYS_NEARMARKER,
+       SNAP_KEYS_HORIZONTAL,
 } eEditKeyframes_Snap;
 
 /* mirroring tools */

Modified: 
branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_edit.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_edit.c     
2009-01-28 03:22:37 UTC (rev 18709)
+++ branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_edit.c     
2009-01-28 06:32:47 UTC (rev 18710)
@@ -889,6 +889,8 @@
        RNA_def_enum(ot->srna, "type", prop_graphkeys_expo_types, 0, "Type", 
"");
 }
 
+#endif // XXX code to be sanitied for new system
+
 /* ******************** Set Interpolation-Type Operator 
*********************** */
 
 /* defines for set ipo-type for selected keyframes tool */
@@ -947,11 +949,11 @@
        return OPERATOR_FINISHED;
 }
  
-void GRAPHEDIT_OT_keyframes_ipotype (wmOperatorType *ot)
+void GRAPHEDIT_OT_keyframes_interpolation_type (wmOperatorType *ot)
 {
        /* identifiers */
        ot->name= "Set Keyframe Interpolation";
-       ot->idname= "GRAPHEDIT_OT_keyframes_ipotype";
+       ot->idname= "GRAPHEDIT_OT_keyframes_interpolation_type";
        
        /* api callbacks */
        ot->invoke= WM_menu_invoke;
@@ -992,6 +994,7 @@
        /* loop through setting flags for handles 
         * Note: we do not supply BeztEditData to the looper yet. Currently 
that's not necessary here...
         */
+       // XXX we might need to supply BeztEditData to get it to only affect 
selected handles
        for (ale= anim_data.first; ale; ale= ale->next) {
                if (mode == -1) {       
                        BeztEditFunc toggle_cb;
@@ -1137,10 +1140,11 @@
 
 /* defines for snap keyframes tool */
 EnumPropertyItem prop_graphkeys_snap_types[] = {
-       {graphkeys_SNAP_CFRA, "CFRA", "Current frame", ""},
-       {graphkeys_SNAP_NEAREST_FRAME, "NEAREST_FRAME", "Nearest Frame", ""}, 
// XXX as single entry?
-       {graphkeys_SNAP_NEAREST_SECOND, "NEAREST_SECOND", "Nearest Second", 
""}, // XXX as single entry?
-       {graphkeys_SNAP_NEAREST_MARKER, "NEAREST_MARKER", "Nearest Marker", ""},
+       {GRAPHKEYS_SNAP_CFRA, "CFRA", "Current frame", ""},
+       {GRAPHKEYS_SNAP_NEAREST_FRAME, "NEAREST_FRAME", "Nearest Frame", ""}, 
// XXX as single entry?
+       {GRAPHKEYS_SNAP_NEAREST_SECOND, "NEAREST_SECOND", "Nearest Second", 
""}, // XXX as single entry?
+       {GRAPHKEYS_SNAP_NEAREST_MARKER, "NEAREST_MARKER", "Nearest Marker", ""},
+       {GRAPHKEYS_SNAP_HORIZONTAL, "HORIZONTAL", "Flatten Handles", ""},
        {0, NULL, NULL, NULL}
 };
 
@@ -1227,10 +1231,10 @@
 
 /* defines for mirror keyframes tool */
 EnumPropertyItem prop_graphkeys_mirror_types[] = {
-       {graphkeys_MIRROR_CFRA, "CFRA", "Current frame", ""},
-       {graphkeys_MIRROR_YAXIS, "YAXIS", "Vertical Axis", ""},
-       {graphkeys_MIRROR_XAXIS, "XAXIS", "Horizontal Axis", ""},
-       {graphkeys_MIRROR_MARKER, "MARKER", "First Selected Marker", ""},
+       {GRAPHKEYS_MIRROR_CFRA, "CFRA", "Current frame", ""},
+       {GRAPHKEYS_MIRROR_YAXIS, "YAXIS", "Vertical Axis", ""},
+       {GRAPHKEYS_MIRROR_XAXIS, "XAXIS", "Horizontal Axis", ""},
+       {GRAPHKEYS_MIRROR_MARKER, "MARKER", "First Selected Marker", ""},
        {0, NULL, NULL, NULL}
 };
 
@@ -1252,7 +1256,7 @@
        
        /* for 'first selected marker' mode, need to find first selected marker 
first! */
        // XXX should this be made into a helper func in the API?
-       if (mode == graphkeys_MIRROR_MARKER) {
+       if (mode == GRAPHKEYS_MIRROR_MARKER) {
                Scene *scene= ac->scene;
                TimeMarker *marker= NULL;
                
@@ -1334,4 +1338,3 @@
 }
 
 /* ************************************************************************** 
*/
-#endif // XXX code to be sanitied for new system

Modified: 
branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_intern.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_intern.h   
2009-01-28 03:22:37 UTC (rev 18709)
+++ branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_intern.h   
2009-01-28 06:32:47 UTC (rev 18710)
@@ -72,6 +72,45 @@
 /* ***************************************** */
 /* ipo_edit.c */
 
+void GRAPHEDIT_OT_set_previewrange(struct wmOperatorType *ot);
+void GRAPHEDIT_OT_view_all(struct wmOperatorType *ot);
+
+void GRAPHEDIT_OT_keyframes_copy(struct wmOperatorType *ot);
+void GRAPHEDIT_OT_keyframes_paste(struct wmOperatorType *ot);
+
+void GRAPHEDIT_OT_keyframes_delete(struct wmOperatorType *ot);
+void GRAPHEDIT_OT_keyframes_clean(struct wmOperatorType *ot);
+void GRAPHEDIT_OT_keyframes_sample(struct wmOperatorType *ot);
+
+void GRAPHEDIT_OT_keyframes_handletype(struct wmOperatorType *ot);
+void GRAPHEDIT_OT_keyframes_interpolation_type(struct wmOperatorType *ot);
+void GRAPHEDIT_OT_keyframes_expotype(struct wmOperatorType *ot);
+
+void GRAPHEDIT_OT_keyframes_cfrasnap(struct wmOperatorType *ot);
+void GRAPHEDIT_OT_keyframes_snap(struct wmOperatorType *ot);
+void GRAPHEDIT_OT_keyframes_mirror(struct wmOperatorType *ot);
+
+/* defines for snap keyframes 
+ * NOTE: keep in sync with eEditKeyframes_Snap (in ED_keyframes_edit.h)
+ */
+enum {
+       GRAPHKEYS_SNAP_CFRA = 1,
+       GRAPHKEYS_SNAP_NEAREST_FRAME,
+       GRAPHKEYS_SNAP_NEAREST_SECOND,
+       GRAPHKEYS_SNAP_NEAREST_MARKER,  
+       GRAPHKEYS_SNAP_HORIZONTAL,
+} eGraphKeys_Snap_Mode;
+
+/* defines for mirror keyframes 
+ * NOTE: keep in sync with eEditKeyframes_Mirror (in ED_keyframes_edit.h)
+ */
+enum {
+       GRAPHKEYS_MIRROR_CFRA = 1,
+       GRAPHKEYS_MIRROR_YAXIS,
+       GRAPHKEYS_MIRROR_XAXIS,
+       GRAPHKEYS_MIRROR_MARKER,
+} eGraphKeys_Mirror_Mode;
+
 /* ***************************************** */
 /* ipo_ops.c */
 void graphedit_keymap(struct wmWindowManager *wm);

Modified: branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c      
2009-01-28 03:22:37 UTC (rev 18709)
+++ branches/blender2.5/blender/source/blender/editors/space_ipo/ipo_ops.c      
2009-01-28 06:32:47 UTC (rev 18710)
@@ -46,6 +46,8 @@
 #include "UI_interface.h"
 #include "UI_view2d.h"
 
+#include "ED_screen.h"
+
 #include "BIF_transform.h"
 
 #include "ipo_intern.h"
@@ -56,11 +58,48 @@
 #include "WM_api.h"
 #include "WM_types.h"
 
+/* ************************** view-based operators 
**********************************/
+// XXX this probably shouldn't be here..
 
+/* Toggle Handles 
----------------------------------------------------------------- */
+
+static int view_toggle_handles_exec (bContext *C, wmOperator *op)
+{
+       SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C);
+       ARegion *ar= CTX_wm_region(C);
+       
+       if (sipo == NULL)
+               return OPERATOR_CANCELLED;
+       
+       /* toggle flag to hide handles */
+       sipo->flag ^= SIPO_NOHANDLES;
+       
+       /* request refresh of keys area */
+       ED_region_tag_redraw(ar);
+       
+       return OPERATOR_FINISHED;
+}
+
+void GRAPHEDIT_OT_view_togglehandles (wmOperatorType *ot)
+{
+       /* identification */
+       ot->name= "Show/Hide All Handles";
+       ot->idname= "GRAPHEDIT_OT_view_toggle_handles";
+       
+       /* callbacks */
+       ot->exec= view_toggle_handles_exec;
+       ot->poll= ED_operator_areaactive;
+}
+
 /* ************************** registration - operator types 
**********************************/
 
 void graphedit_operatortypes(void)
 {
+       /* view */
+       WM_operatortype_append(GRAPHEDIT_OT_view_togglehandles);
+       //WM_operatortype_append(GRAPHEDIT_OT_set_previewrange);
+       //WM_operatortype_append(GRAPHEDIT_OT_view_all);
+       
        /* keyframes */
                /* selection */
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_clickselect);
@@ -68,22 +107,19 @@
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_borderselect);
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_columnselect);
        
-#if 0 // XXX code to be sanitied for new system        
                /* editing */
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_snap);
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_mirror);
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_cfrasnap);
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_handletype);
-       WM_operatortype_append(GRAPHEDIT_OT_keyframes_ipotype);
+       WM_operatortype_append(GRAPHEDIT_OT_keyframes_interpolation_type);
+#if 0 // XXX code to be sanitied for new system        
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_expotype);
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_sample);
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_clean);
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_delete);
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_copy);
        WM_operatortype_append(GRAPHEDIT_OT_keyframes_paste);
-       
-       WM_operatortype_append(GRAPHEDIT_OT_set_previewrange);
-       WM_operatortype_append(GRAPHEDIT_OT_view_all);
 #endif // XXX code to be sanitied for new system
 }
 
@@ -91,6 +127,9 @@
 

@@ 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