Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2019-07-28 18:03:03 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2019-07-28 18:04:10 +0300
commitfc5ba7e0bdc9379f71a524314850ceabda41bf2f (patch)
treea1840876fbf2cdc871a3b904ad9780ad84255ef7 /source/blender/editors/space_clip/clip_graph_ops.c
parentbf637984d17f735d7bd86c843c11c2d362430056 (diff)
Tracking: Support selecting tracks by their reprojection error curve
Quite straightforward after previous refactor: now speed and error curves are handled in the same exact manner.
Diffstat (limited to 'source/blender/editors/space_clip/clip_graph_ops.c')
-rw-r--r--source/blender/editors/space_clip/clip_graph_ops.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/source/blender/editors/space_clip/clip_graph_ops.c b/source/blender/editors/space_clip/clip_graph_ops.c
index 1ebe56fccb6..58a00d2e6b9 100644
--- a/source/blender/editors/space_clip/clip_graph_ops.c
+++ b/source/blender/editors/space_clip/clip_graph_ops.c
@@ -64,7 +64,7 @@ static bool clip_graph_knots_poll(bContext *C)
if (ED_space_clip_graph_poll(C)) {
SpaceClip *sc = CTX_wm_space_clip(C);
- return (sc->flag & SC_SHOW_GRAPH_TRACKS_MOTION) != 0;
+ return (sc->flag & (SC_SHOW_GRAPH_TRACKS_MOTION | SC_SHOW_GRAPH_TRACKS_ERROR)) != 0;
}
return false;
}
@@ -93,6 +93,7 @@ static void toggle_selection_cb(void *userdata, MovieTrackingMarker *marker)
/******************** mouse select operator ********************/
typedef struct {
+ SpaceClip *sc;
eClipCurveValueSource value_source;
bool has_prev; /* if there's valid coordinate of previous point of curve segment */
@@ -115,6 +116,10 @@ static void find_nearest_tracking_segment_cb(void *userdata,
MouseSelectUserData *data = userdata;
float co[2] = {scene_framenr, val};
+ if (!clip_graph_value_visible(data->sc, value_source)) {
+ return;
+ }
+
if (data->has_prev) {
float dist_sq = dist_squared_to_line_segment_v2(data->mouse_co, data->prev_co, co);
@@ -149,6 +154,10 @@ static void find_nearest_tracking_knot_cb(void *userdata,
float mdiff[2] = {scene_framenr - data->mouse_co[0], val - data->mouse_co[1]};
float dist_sq = len_squared_v2(mdiff);
+ if (!clip_graph_value_visible(data->sc, value_source)) {
+ return;
+ }
+
if (data->marker == NULL || dist_sq < data->min_dist_sq) {
float co[2] = {scene_framenr, val};
@@ -160,9 +169,11 @@ static void find_nearest_tracking_knot_cb(void *userdata,
}
}
-static void mouse_select_init_data(MouseSelectUserData *userdata, const float co[2])
+static void mouse_select_init_data(bContext *C, MouseSelectUserData *userdata, const float co[2])
{
+ SpaceClip *sc = CTX_wm_space_clip(C);
memset(userdata, 0, sizeof(MouseSelectUserData));
+ userdata->sc = sc;
userdata->min_dist_sq = FLT_MAX;
copy_v2_v2(userdata->mouse_co, co);
}
@@ -180,7 +191,7 @@ static bool mouse_select_knot(bContext *C, float co[2], bool extend)
if (act_track) {
MouseSelectUserData userdata;
- mouse_select_init_data(&userdata, co);
+ mouse_select_init_data(C, &userdata, co);
clip_graph_tracking_values_iterate_track(
sc, act_track, &userdata, find_nearest_tracking_knot_cb, NULL, NULL);
@@ -233,7 +244,7 @@ static bool mouse_select_curve(bContext *C, float co[2], bool extend)
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
MouseSelectUserData userdata;
- mouse_select_init_data(&userdata, co);
+ mouse_select_init_data(C, &userdata, co);
clip_graph_tracking_values_iterate(sc,
(sc->flag & SC_SHOW_GRAPH_SEL_ONLY) != 0,
(sc->flag & SC_SHOW_GRAPH_HIDDEN) != 0,