Motion Path Tweaks:

- #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.
This commit is contained in:
Joshua Leung
2010-05-20 12:31:55 +00:00
parent 66ef82f313
commit 89b7d4a5d6
4 changed files with 31 additions and 5 deletions

View 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")

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

View 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 */

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