Tracking: Highlight keyframes in path visualization
This gives better idea of what's going on with your track. Example: {F693806} Color of keyframes are configurable from theme editor of clip editor. Reviewers: keir, brecht, Severin Differential Revision: https://developer.blender.org/D2772
This commit is contained in:
@@ -914,6 +914,8 @@ const bTheme U_theme_default = {
|
|||||||
.lock_marker = RGBA(0x7f7f7fff),
|
.lock_marker = RGBA(0x7f7f7fff),
|
||||||
.path_before = RGBA(0xff0000ff),
|
.path_before = RGBA(0xff0000ff),
|
||||||
.path_after = RGBA(0x0000ffff),
|
.path_after = RGBA(0x0000ffff),
|
||||||
|
.path_keyframe_before = RGBA(0xffc4c4ff),
|
||||||
|
.path_keyframe_after = RGBA(0xc4c4ffff),
|
||||||
.gp_vertex_size = 1,
|
.gp_vertex_size = 1,
|
||||||
.metadatatext = RGBA(0xffffffff),
|
.metadatatext = RGBA(0xffffffff),
|
||||||
},
|
},
|
||||||
|
@@ -151,6 +151,8 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
|
|||||||
{
|
{
|
||||||
FROM_DEFAULT_V4_UCHAR(space_file.execution_buts);
|
FROM_DEFAULT_V4_UCHAR(space_file.execution_buts);
|
||||||
FROM_DEFAULT_V4_UCHAR(tui.icon_folder);
|
FROM_DEFAULT_V4_UCHAR(tui.icon_folder);
|
||||||
|
FROM_DEFAULT_V4_UCHAR(space_clip.path_keyframe_before);
|
||||||
|
FROM_DEFAULT_V4_UCHAR(space_clip.path_keyframe_after);
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef FROM_DEFAULT_V4_UCHAR
|
#undef FROM_DEFAULT_V4_UCHAR
|
||||||
|
@@ -234,6 +234,8 @@ typedef enum ThemeColorID {
|
|||||||
TH_DIS_MARKER,
|
TH_DIS_MARKER,
|
||||||
TH_PATH_BEFORE,
|
TH_PATH_BEFORE,
|
||||||
TH_PATH_AFTER,
|
TH_PATH_AFTER,
|
||||||
|
TH_PATH_KEYFRAME_BEFORE,
|
||||||
|
TH_PATH_KEYFRAME_AFTER,
|
||||||
TH_CAMERA_PATH,
|
TH_CAMERA_PATH,
|
||||||
TH_LOCK_MARKER,
|
TH_LOCK_MARKER,
|
||||||
|
|
||||||
|
@@ -779,6 +779,12 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
|
|||||||
case TH_PATH_AFTER:
|
case TH_PATH_AFTER:
|
||||||
cp = ts->path_after;
|
cp = ts->path_after;
|
||||||
break;
|
break;
|
||||||
|
case TH_PATH_KEYFRAME_BEFORE:
|
||||||
|
cp = ts->path_keyframe_before;
|
||||||
|
break;
|
||||||
|
case TH_PATH_KEYFRAME_AFTER:
|
||||||
|
cp = ts->path_keyframe_after;
|
||||||
|
break;
|
||||||
case TH_CAMERA_PATH:
|
case TH_CAMERA_PATH:
|
||||||
cp = ts->camera_path;
|
cp = ts->camera_path;
|
||||||
break;
|
break;
|
||||||
|
@@ -473,6 +473,21 @@ static void draw_track_path_points(const TrackPathPoint *path,
|
|||||||
immEnd();
|
immEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void draw_track_path_keyframe_points(const TrackPathPoint *path,
|
||||||
|
uint position_attribute,
|
||||||
|
const int start_point,
|
||||||
|
const int num_points)
|
||||||
|
{
|
||||||
|
immBeginAtMost(GPU_PRIM_POINTS, num_points);
|
||||||
|
for (int i = 0; i < num_points; i++) {
|
||||||
|
const TrackPathPoint *point = &path[i + start_point];
|
||||||
|
if (point->flag & PATH_POINT_FLAG_KEYFRAME) {
|
||||||
|
immVertex2fv(position_attribute, point->co);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
immEnd();
|
||||||
|
}
|
||||||
|
|
||||||
static void draw_track_path_lines(const TrackPathPoint *path,
|
static void draw_track_path_lines(const TrackPathPoint *path,
|
||||||
uint position_attribute,
|
uint position_attribute,
|
||||||
const int start_point,
|
const int start_point,
|
||||||
@@ -533,6 +548,8 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin
|
|||||||
if (TRACK_VIEW_SELECTED(sc, track)) {
|
if (TRACK_VIEW_SELECTED(sc, track)) {
|
||||||
GPU_point_size(5.0f);
|
GPU_point_size(5.0f);
|
||||||
draw_track_path_points(path, position_attribute, path_start_index, num_all_points);
|
draw_track_path_points(path, position_attribute, path_start_index, num_all_points);
|
||||||
|
GPU_point_size(7.0f);
|
||||||
|
draw_track_path_keyframe_points(path, position_attribute, path_start_index, num_all_points);
|
||||||
}
|
}
|
||||||
/* Draw darker outline for actual path, all line segments at once. */
|
/* Draw darker outline for actual path, all line segments at once. */
|
||||||
GPU_line_width(3.0f);
|
GPU_line_width(3.0f);
|
||||||
@@ -553,6 +570,13 @@ static void draw_track_path(SpaceClip *sc, MovieClip *UNUSED(clip), MovieTrackin
|
|||||||
immUniformThemeColor(TH_PATH_AFTER);
|
immUniformThemeColor(TH_PATH_AFTER);
|
||||||
draw_track_path_lines(path, position_attribute, path_center_index, num_points_after);
|
draw_track_path_lines(path, position_attribute, path_center_index, num_points_after);
|
||||||
|
|
||||||
|
/* Draw all bigger points corresponding to keyframes. */
|
||||||
|
GPU_point_size(5.0f);
|
||||||
|
immUniformThemeColor(TH_PATH_KEYFRAME_BEFORE);
|
||||||
|
draw_track_path_keyframe_points(path, position_attribute, path_start_index, num_points_before);
|
||||||
|
immUniformThemeColor(TH_PATH_KEYFRAME_AFTER);
|
||||||
|
draw_track_path_keyframe_points(path, position_attribute, path_center_index, num_points_after);
|
||||||
|
|
||||||
if (path != path_static) {
|
if (path != path_static) {
|
||||||
MEM_freeN(path);
|
MEM_freeN(path);
|
||||||
}
|
}
|
||||||
|
@@ -345,6 +345,7 @@ typedef struct ThemeSpace {
|
|||||||
lock_marker[4];
|
lock_marker[4];
|
||||||
unsigned char bundle_solid[4];
|
unsigned char bundle_solid[4];
|
||||||
unsigned char path_before[4], path_after[4];
|
unsigned char path_before[4], path_after[4];
|
||||||
|
unsigned char path_keyframe_before[4], path_keyframe_after[4];
|
||||||
unsigned char camera_path[4];
|
unsigned char camera_path[4];
|
||||||
unsigned char _pad1[2];
|
unsigned char _pad1[2];
|
||||||
|
|
||||||
|
@@ -3397,6 +3397,16 @@ static void rna_def_userdef_theme_space_clip(BlenderRNA *brna)
|
|||||||
RNA_def_property_ui_text(prop, "Path After", "Color of path after current frame");
|
RNA_def_property_ui_text(prop, "Path After", "Color of path after current frame");
|
||||||
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
|
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
|
||||||
|
|
||||||
|
prop = RNA_def_property(srna, "path_keyframe_before", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||||
|
RNA_def_property_array(prop, 3);
|
||||||
|
RNA_def_property_ui_text(prop, "Path Before", "Color of path before current frame");
|
||||||
|
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||||
|
|
||||||
|
prop = RNA_def_property(srna, "path_keyframe_after", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||||
|
RNA_def_property_array(prop, 3);
|
||||||
|
RNA_def_property_ui_text(prop, "Path After", "Color of path after current frame");
|
||||||
|
RNA_def_property_update(prop, 0, "rna_userdef_update");
|
||||||
|
|
||||||
prop = RNA_def_property(srna, "frame_current", PROP_FLOAT, PROP_COLOR_GAMMA);
|
prop = RNA_def_property(srna, "frame_current", PROP_FLOAT, PROP_COLOR_GAMMA);
|
||||||
RNA_def_property_float_sdna(prop, NULL, "cframe");
|
RNA_def_property_float_sdna(prop, NULL, "cframe");
|
||||||
RNA_def_property_array(prop, 3);
|
RNA_def_property_array(prop, 3);
|
||||||
|
Reference in New Issue
Block a user