Motion Path Tweaks:
authorJoshua Leung <aligorith@gmail.com>
Thu, 20 May 2010 12:31:55 +0000 (12:31 +0000)
committerJoshua Leung <aligorith@gmail.com>
Thu, 20 May 2010 12:31:55 +0000 (12:31 +0000)
- #22155: keyframe dots not shown on path for bone keyframes that aren't in a group with a matching name. Since this situation is going to become more common in 2.5, I've added an option which will alternatively just search the entire action to find all F-Curves associated with bones. The old option is still the default though for the general cases.

- When keyframe drawing is enabled, the current frame will also be indicated on the path now as a (bigger) green dot, as requested by William. This makes it easier to see the position on the path on the current frame.

release/scripts/ui/properties_animviz.py
source/blender/editors/space_view3d/drawanimviz.c
source/blender/makesdna/DNA_action_types.h
source/blender/makesrna/intern/rna_animviz.c

index 3e9c2158cb73a040d0a12179740368cc05dea49a..9eb046cc2c888c1a7ea0be42fbc6ce155cc9c5d3 100644 (file)
@@ -61,6 +61,8 @@ class MotionPathButtonsPanel(bpy.types.Panel):
         col.label(text="Display:")
         col.prop(mps, "show_frame_numbers", text="Frame Numbers")
         col.prop(mps, "highlight_keyframes", text="Keyframes")
+        if bones:
+            col.prop(mps, "search_all_action_keyframes", text="+ Non-Grouped Keyframes")
         col.prop(mps, "show_keyframe_numbers", text="Keyframe Numbers")
 
 
index 0a8f19493fafaac3dae3f9c6f0346dc3845f072f..1bc51de44712e63e345b218ffd9b622ecde6b53a 100644 (file)
@@ -199,6 +199,21 @@ void draw_motion_path_instance(Scene *scene, View3D *v3d, ARegion *ar,
                glVertex3fv(mpv->co);
        glEnd();
        
+       /* Draw big green dot where the current frame is */
+       // NOTE: only do this when drawing keyframes for now... 
+       if (avs->path_viewflag & MOTIONPATH_VIEW_KFRAS) {
+               UI_ThemeColor(TH_CFRAME);
+               glPointSize(6.0f);
+               
+               glBegin(GL_POINTS);
+                       mpv = mpv_start + (CFRA - sfra);
+                       glVertex3fv(mpv->co);
+               glEnd();
+               
+               glPointSize(1.0f);
+               UI_ThemeColor(TH_TEXT_HI);
+       }
+       
        /* Draw frame numbers at each framestep value */
        if (avs->path_viewflag & MOTIONPATH_VIEW_FNUMS) {
                for (i=0, mpv=mpv_start; i < len; i+=stepsize, mpv+=stepsize) {
@@ -220,9 +235,9 @@ void draw_motion_path_instance(Scene *scene, View3D *v3d, ARegion *ar,
                        }
                }
        }
-
+       
        /* Keyframes - dots and numbers */
-       if (avs->path_viewflag & MOTIONPATH_VIEW_KFNOS) {
+       if (avs->path_viewflag & MOTIONPATH_VIEW_KFRAS) {
                AnimData *adt= BKE_animdata_from_id(&ob->id);
                DLRBT_Tree keys;
                
@@ -230,8 +245,10 @@ void draw_motion_path_instance(Scene *scene, View3D *v3d, ARegion *ar,
                BLI_dlrbTree_init(&keys);
                
                if (adt) {
-                       /* for now, it is assumed that keyframes for bones are all grouped in a single group */
-                       if (pchan) {
+                       /* it is assumed that keyframes for bones are all grouped in a single group
+                        * unless an option is set to always use the whole action
+                        */
+                       if ((pchan) && (avs->path_viewflag & MOTIONPATH_VIEW_KFACT)==0) {
                                bActionGroup *agrp= action_groups_find_named(adt->action, pchan->name);
                                
                                if (agrp) {
@@ -261,7 +278,7 @@ void draw_motion_path_instance(Scene *scene, View3D *v3d, ARegion *ar,
                glPointSize(1.0f);
                
                /* Draw frame numbers of keyframes  */
-               if (avs->path_viewflag & MOTIONPATH_VIEW_FNUMS) {
+               if (avs->path_viewflag & MOTIONPATH_VIEW_KFNOS) {
                        for (i=0, mpv=mpv_start; i < len; i++, mpv++) {
                                float mframe= (float)(sfra + i);
                                
index 181ab6f0afa574a941f6dff7115e814e8faf544a..210bb6a9af053f40e0a4b7eaf4b6306c8fdd8e88 100644 (file)
@@ -154,6 +154,8 @@ typedef enum eMotionPaths_ViewFlag {
        MOTIONPATH_VIEW_KFRAS           = (1<<1),
                /* show keyframe/frame numbers */
        MOTIONPATH_VIEW_KFNOS           = (1<<2),
+               /* find keyframes in whole action (instead of just in matching group name) */
+       MOTIONPATH_VIEW_KFACT           = (1<<3),
 } eMotionPath_ViewFlag;
 
 /* bAnimVizSettings->path_bakeflag */
index ff8c452e3ac576cb013de2c847dce13a54843cbe..985521fe2c61aca3cbf6605d0f93d13c06c24115 100644 (file)
@@ -264,6 +264,11 @@ static void rna_def_animviz_paths(BlenderRNA *brna)
        RNA_def_property_ui_text(prop, "Show Keyframe Numbers", "Show frame numbers of Keyframes on Motion Paths");
        RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
        
+       prop= RNA_def_property(srna, "search_all_action_keyframes", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "path_viewflag", MOTIONPATH_VIEW_KFACT);
+       RNA_def_property_ui_text(prop, "All Action Keyframes", "For bone motion paths, search whole Action for keyframes instead of in group with matching name only (is slower)");
+       RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL); /* XXX since this is only for 3d-view drawing */
+       
        prop= RNA_def_property(srna, "frame_step", PROP_INT, PROP_NONE);
        RNA_def_property_int_sdna(prop, NULL, "path_step");
        RNA_def_property_range(prop, 1, 100);