From ea969ccc02e2bddf178c2a3064919eabb1dadfe9 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Fri, 7 Oct 2022 17:26:35 +0200 Subject: [PATCH] Refactor: Replace marker visibility macro with function Also optimize sub-optimal request for active object for every call of the check. Should be no functional changes. --- source/blender/blenkernel/BKE_tracking.h | 4 - source/blender/editors/space_clip/clip_draw.c | 176 ++++++++-------- .../blender/editors/space_clip/clip_editor.c | 88 ++++---- .../blender/editors/space_clip/clip_intern.h | 34 ++++ .../editors/space_clip/tracking_select.c | 192 ++++++++++-------- 5 files changed, 277 insertions(+), 217 deletions(-) diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h index 722013d82e5..5746e49f644 100644 --- a/source/blender/blenkernel/BKE_tracking.h +++ b/source/blender/blenkernel/BKE_tracking.h @@ -815,10 +815,6 @@ void BKE_tracking_get_rna_path_prefix_for_plane_track( #define PLANE_TRACK_VIEW_SELECTED(plane_track) \ ((((plane_track)->flag & PLANE_TRACK_HIDDEN) == 0) && ((plane_track)->flag & SELECT)) -#define MARKER_VISIBLE(sc, track, marker) \ - (((marker)->flag & MARKER_DISABLED) == 0 || ((sc)->flag & SC_HIDE_DISABLED) == 0 || \ - (BKE_tracking_object_get_active(&(sc)->clip->tracking)->active_track == track)) - #ifdef __cplusplus } #endif diff --git a/source/blender/editors/space_clip/clip_draw.c b/source/blender/editors/space_clip/clip_draw.c index 3fc7bf550c9..e42ba71f811 100644 --- a/source/blender/editors/space_clip/clip_draw.c +++ b/source/blender/editors/space_clip/clip_draw.c @@ -1468,12 +1468,14 @@ static void draw_tracking_tracks(SpaceClip *sc, /* count */ LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) { - if ((track->flag & TRACK_HIDDEN) == 0) { - const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + if (track->flag & TRACK_HIDDEN) { + continue; + } - if (MARKER_VISIBLE(sc, track, marker)) { - count++; - } + const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + + if (ED_space_clip_marker_is_visible(sc, tracking_object, track, marker)) { + count++; } } @@ -1483,18 +1485,20 @@ static void draw_tracking_tracks(SpaceClip *sc, fp = marker_pos; LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) { - if ((track->flag & TRACK_HIDDEN) == 0) { - const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + if (track->flag & TRACK_HIDDEN) { + continue; + } - if (MARKER_VISIBLE(sc, track, marker)) { - ED_clip_point_undistorted_pos(sc, marker->pos, fp); + const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); - if (track == active_track) { - active_pos = fp; - } + if (ED_space_clip_marker_is_visible(sc, tracking_object, track, marker)) { + ED_clip_point_undistorted_pos(sc, marker->pos, fp); - fp += 2; + if (track == active_track) { + active_pos = fp; } + + fp += 2; } } } @@ -1516,20 +1520,22 @@ static void draw_tracking_tracks(SpaceClip *sc, /* markers outline and non-selected areas */ fp = marker_pos; LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) { - if ((track->flag & TRACK_HIDDEN) == 0) { - const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + if (track->flag & TRACK_HIDDEN) { + continue; + } - if (MARKER_VISIBLE(sc, track, marker)) { - copy_v2_v2(cur_pos, fp ? fp : marker->pos); + const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); - draw_marker_outline(sc, track, marker, cur_pos, width, height, position); - draw_marker_areas(sc, track, marker, cur_pos, width, height, 0, 0, position); - draw_marker_slide_zones(sc, track, marker, cur_pos, 1, 0, 0, width, height, position); - draw_marker_slide_zones(sc, track, marker, cur_pos, 0, 0, 0, width, height, position); + if (ED_space_clip_marker_is_visible(sc, tracking_object, track, marker)) { + copy_v2_v2(cur_pos, fp ? fp : marker->pos); - if (fp) { - fp += 2; - } + draw_marker_outline(sc, track, marker, cur_pos, width, height, position); + draw_marker_areas(sc, track, marker, cur_pos, width, height, 0, 0, position); + draw_marker_slide_zones(sc, track, marker, cur_pos, 1, 0, 0, width, height, position); + draw_marker_slide_zones(sc, track, marker, cur_pos, 0, 0, 0, width, height, position); + + if (fp) { + fp += 2; } } } @@ -1537,37 +1543,35 @@ static void draw_tracking_tracks(SpaceClip *sc, /* selected areas only, so selection wouldn't be overlapped by non-selected areas */ fp = marker_pos; LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) { - if ((track->flag & TRACK_HIDDEN) == 0) { - const int act = track == active_track; - const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + if (track->flag & TRACK_HIDDEN) { + continue; + } + const int act = track == active_track; + const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); - if (MARKER_VISIBLE(sc, track, marker)) { - if (!act) { - copy_v2_v2(cur_pos, fp ? fp : marker->pos); + if (ED_space_clip_marker_is_visible(sc, tracking_object, track, marker)) { + if (!act) { + copy_v2_v2(cur_pos, fp ? fp : marker->pos); - draw_marker_areas(sc, track, marker, cur_pos, width, height, 0, 1, position); - draw_marker_slide_zones(sc, track, marker, cur_pos, 0, 1, 0, width, height, position); - } + draw_marker_areas(sc, track, marker, cur_pos, width, height, 0, 1, position); + draw_marker_slide_zones(sc, track, marker, cur_pos, 0, 1, 0, width, height, position); + } - if (fp) { - fp += 2; - } + if (fp) { + fp += 2; } } } /* active marker would be displayed on top of everything else */ - if (active_track) { - if ((active_track->flag & TRACK_HIDDEN) == 0) { - const MovieTrackingMarker *marker = BKE_tracking_marker_get(active_track, framenr); + if (active_track && (active_track->flag & TRACK_HIDDEN) == 0) { + const MovieTrackingMarker *marker = BKE_tracking_marker_get(active_track, framenr); - if (MARKER_VISIBLE(sc, active_track, marker)) { - copy_v2_v2(cur_pos, active_pos ? active_pos : marker->pos); + if (ED_space_clip_marker_is_visible(sc, tracking_object, active_track, marker)) { + copy_v2_v2(cur_pos, active_pos ? active_pos : marker->pos); - draw_marker_areas(sc, active_track, marker, cur_pos, width, height, 1, 1, position); - draw_marker_slide_zones( - sc, active_track, marker, cur_pos, 0, 1, 1, width, height, position); - } + draw_marker_areas(sc, active_track, marker, cur_pos, width, height, 1, 1, position); + draw_marker_slide_zones(sc, active_track, marker, cur_pos, 0, 1, 1, width, height, position); } } @@ -1580,45 +1584,47 @@ static void draw_tracking_tracks(SpaceClip *sc, BKE_tracking_get_projection_matrix(tracking, tracking_object, framenr, width, height, mat); LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) { - if ((track->flag & TRACK_HIDDEN) == 0 && track->flag & TRACK_HAS_BUNDLE) { - const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + if (track->flag & TRACK_HIDDEN || (track->flag & TRACK_HAS_BUNDLE) == 0) { + continue; + } - if (MARKER_VISIBLE(sc, track, marker)) { - float npos[2]; - copy_v3_v3(vec, track->bundle_pos); - vec[3] = 1; + const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); - mul_v4_m4v4(pos, mat, vec); + if (ED_space_clip_marker_is_visible(sc, tracking_object, track, marker)) { + float npos[2]; + copy_v3_v3(vec, track->bundle_pos); + vec[3] = 1; - pos[0] = (pos[0] / (pos[3] * 2.0f) + 0.5f) * width; - pos[1] = (pos[1] / (pos[3] * 2.0f) + 0.5f) * height * aspy; + mul_v4_m4v4(pos, mat, vec); - BKE_tracking_distort_v2(tracking, width, height, pos, npos); + pos[0] = (pos[0] / (pos[3] * 2.0f) + 0.5f) * width; + pos[1] = (pos[1] / (pos[3] * 2.0f) + 0.5f) * height * aspy; - if (npos[0] >= 0.0f && npos[1] >= 0.0f && npos[0] <= width && npos[1] <= height * aspy) { - vec[0] = (marker->pos[0] + track->offset[0]) * width; - vec[1] = (marker->pos[1] + track->offset[1]) * height * aspy; + BKE_tracking_distort_v2(tracking, width, height, pos, npos); - sub_v2_v2(vec, npos); + if (npos[0] >= 0.0f && npos[1] >= 0.0f && npos[0] <= width && npos[1] <= height * aspy) { + vec[0] = (marker->pos[0] + track->offset[0]) * width; + vec[1] = (marker->pos[1] + track->offset[1]) * height * aspy; - if (len_squared_v2(vec) < (3.0f * 3.0f)) { - immUniformColor3f(0.0f, 1.0f, 0.0f); - } - else { - immUniformColor3f(1.0f, 0.0f, 0.0f); - } + sub_v2_v2(vec, npos); - immBegin(GPU_PRIM_POINTS, 1); - - if (undistort) { - immVertex2f(position, pos[0] / width, pos[1] / (height * aspy)); - } - else { - immVertex2f(position, npos[0] / width, npos[1] / (height * aspy)); - } - - immEnd(); + if (len_squared_v2(vec) < (3.0f * 3.0f)) { + immUniformColor3f(0.0f, 1.0f, 0.0f); } + else { + immUniformColor3f(1.0f, 0.0f, 0.0f); + } + + immBegin(GPU_PRIM_POINTS, 1); + + if (undistort) { + immVertex2f(position, pos[0] / width, pos[1] / (height * aspy)); + } + else { + immVertex2f(position, npos[0] / width, npos[1] / (height * aspy)); + } + + immEnd(); } } } @@ -1632,19 +1638,21 @@ static void draw_tracking_tracks(SpaceClip *sc, /* scaling should be cleared before drawing texts, otherwise font would also be scaled */ fp = marker_pos; LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) { - if ((track->flag & TRACK_HIDDEN) == 0) { - const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + if (track->flag & TRACK_HIDDEN) { + continue; + } - if (MARKER_VISIBLE(sc, track, marker)) { - const int act = track == active_track; + const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); - copy_v2_v2(cur_pos, fp ? fp : marker->pos); + if (ED_space_clip_marker_is_visible(sc, tracking_object, track, marker)) { + const int act = track == active_track; - draw_marker_texts(sc, track, marker, cur_pos, act, width, height, zoomx, zoomy); + copy_v2_v2(cur_pos, fp ? fp : marker->pos); - if (fp) { - fp += 2; - } + draw_marker_texts(sc, track, marker, cur_pos, act, width, height, zoomx, zoomy); + + if (fp) { + fp += 2; } } } diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c index 52e96b22463..3f28f409fd1 100644 --- a/source/blender/editors/space_clip/clip_editor.c +++ b/source/blender/editors/space_clip/clip_editor.c @@ -382,13 +382,15 @@ void ED_clip_select_all(SpaceClip *sc, int action, bool *r_has_selection) action = SEL_SELECT; LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) { - if (TRACK_VIEW_SELECTED(sc, track)) { - const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + if (!TRACK_VIEW_SELECTED(sc, track)) { + continue; + } - if (MARKER_VISIBLE(sc, track, marker)) { - action = SEL_DESELECT; - break; - } + const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + + if (ED_space_clip_marker_is_visible(sc, tracking_object, track, marker)) { + action = SEL_DESELECT; + break; } } @@ -401,27 +403,29 @@ void ED_clip_select_all(SpaceClip *sc, int action, bool *r_has_selection) } LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) { - if ((track->flag & TRACK_HIDDEN) == 0) { - const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + if (track->flag & TRACK_HIDDEN) { + continue; + } - if (MARKER_VISIBLE(sc, track, marker)) { - switch (action) { - case SEL_SELECT: - track->flag |= SELECT; - track->pat_flag |= SELECT; - track->search_flag |= SELECT; - break; - case SEL_DESELECT: - track->flag &= ~SELECT; - track->pat_flag &= ~SELECT; - track->search_flag &= ~SELECT; - break; - case SEL_INVERT: - track->flag ^= SELECT; - track->pat_flag ^= SELECT; - track->search_flag ^= SELECT; - break; - } + const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + + if (ED_space_clip_marker_is_visible(sc, tracking_object, track, marker)) { + switch (action) { + case SEL_SELECT: + track->flag |= SELECT; + track->pat_flag |= SELECT; + track->search_flag |= SELECT; + break; + case SEL_DESELECT: + track->flag &= ~SELECT; + track->pat_flag &= ~SELECT; + track->search_flag &= ~SELECT; + break; + case SEL_INVERT: + track->flag ^= SELECT; + track->pat_flag ^= SELECT; + track->search_flag ^= SELECT; + break; } } @@ -431,21 +435,23 @@ void ED_clip_select_all(SpaceClip *sc, int action, bool *r_has_selection) } LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) { - if ((plane_track->flag & PLANE_TRACK_HIDDEN) == 0) { - switch (action) { - case SEL_SELECT: - plane_track->flag |= SELECT; - break; - case SEL_DESELECT: - plane_track->flag &= ~SELECT; - break; - case SEL_INVERT: - plane_track->flag ^= SELECT; - break; - } - if (plane_track->flag & SELECT) { - has_selection = true; - } + if (plane_track->flag & PLANE_TRACK_HIDDEN) { + continue; + } + + switch (action) { + case SEL_SELECT: + plane_track->flag |= SELECT; + break; + case SEL_DESELECT: + plane_track->flag &= ~SELECT; + break; + case SEL_INVERT: + plane_track->flag ^= SELECT; + break; + } + if (plane_track->flag & SELECT) { + has_selection = true; } } diff --git a/source/blender/editors/space_clip/clip_intern.h b/source/blender/editors/space_clip/clip_intern.h index 1e329ee1175..0ccecc2b400 100644 --- a/source/blender/editors/space_clip/clip_intern.h +++ b/source/blender/editors/space_clip/clip_intern.h @@ -7,6 +7,11 @@ #pragma once +#include "BLI_utildefines.h" + +#include "DNA_space_types.h" +#include "DNA_tracking_types.h" + #ifdef __cplusplus extern "C" { #endif @@ -267,6 +272,35 @@ void CLIP_OT_select_lasso(struct wmOperatorType *ot); void CLIP_OT_select_circle(struct wmOperatorType *ot); void CLIP_OT_select_grouped(struct wmOperatorType *ot); +/* -------------------------------------------------------------------- */ +/** \name Inlined utilities. + * \{ */ + +/* Check whether the marker can is visible within the given context. + * The track must be visible, and no restrictions from the clip editor are to be in effect on the + * disabled marker visibility (unless the track is active). */ +BLI_INLINE bool ED_space_clip_marker_is_visible(const SpaceClip *space_clip, + const MovieTrackingObject *tracking_object, + const MovieTrackingTrack *track, + const MovieTrackingMarker *marker) +{ + if (track->flag & TRACK_HIDDEN) { + return false; + } + + if ((marker->flag & MARKER_DISABLED) == 0) { + return true; + } + + if ((space_clip->flag & SC_HIDE_DISABLED) == 0) { + return true; + } + + return track == tracking_object->active_track; +} + +/** \} */ + #ifdef __cplusplus } #endif diff --git a/source/blender/editors/space_clip/tracking_select.c b/source/blender/editors/space_clip/tracking_select.c index 2644e2d9933..3637c2f0028 100644 --- a/source/blender/editors/space_clip/tracking_select.c +++ b/source/blender/editors/space_clip/tracking_select.c @@ -763,41 +763,46 @@ static int box_select_exec(bContext *C, wmOperator *op) /* do actual selection */ LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) { - if ((track->flag & TRACK_HIDDEN) == 0) { - MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); - - if (MARKER_VISIBLE(sc, track, marker)) { - if (BLI_rctf_isect_pt_v(&rectf, marker->pos)) { - if (select) { - BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT); - } - else { - BKE_tracking_track_flag_clear(track, TRACK_AREA_ALL, SELECT); - } - } - changed = true; - } + if (track->flag & TRACK_HIDDEN) { + continue; } - } - LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) { - if ((plane_track->flag & PLANE_TRACK_HIDDEN) == 0) { - MovieTrackingPlaneMarker *plane_marker = BKE_tracking_plane_marker_get(plane_track, framenr); + const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); - for (int i = 0; i < 4; i++) { - if (BLI_rctf_isect_pt_v(&rectf, plane_marker->corners[i])) { - if (select) { - plane_track->flag |= SELECT; - } - else { - plane_track->flag &= ~SELECT; - } + if (ED_space_clip_marker_is_visible(sc, tracking_object, track, marker)) { + if (BLI_rctf_isect_pt_v(&rectf, marker->pos)) { + if (select) { + BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT); + } + else { + BKE_tracking_track_flag_clear(track, TRACK_AREA_ALL, SELECT); } } changed = true; } } + LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) { + if (plane_track->flag & PLANE_TRACK_HIDDEN) { + continue; + } + + const MovieTrackingPlaneMarker *plane_marker = BKE_tracking_plane_marker_get(plane_track, + framenr); + + for (int i = 0; i < 4; i++) { + if (BLI_rctf_isect_pt_v(&rectf, plane_marker->corners[i])) { + if (select) { + plane_track->flag |= SELECT; + } + else { + plane_track->flag &= ~SELECT; + } + } + } + changed = true; + } + if (changed) { BKE_tracking_dopesheet_tag_update(&clip->tracking); @@ -852,50 +857,26 @@ static int do_lasso_select_marker(bContext *C, /* do actual selection */ LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) { - if ((track->flag & TRACK_HIDDEN) == 0) { - MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); - - if (MARKER_VISIBLE(sc, track, marker)) { - float screen_co[2]; - - /* marker in screen coords */ - ED_clip_point_stable_pos__reverse(sc, region, marker->pos, screen_co); - - if (BLI_rcti_isect_pt(&rect, screen_co[0], screen_co[1]) && - BLI_lasso_is_point_inside( - mcoords, mcoords_len, screen_co[0], screen_co[1], V2D_IS_CLIPPED)) { - if (select) { - BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT); - } - else { - BKE_tracking_track_flag_clear(track, TRACK_AREA_ALL, SELECT); - } - } - - changed = true; - } + if (track->flag & TRACK_HIDDEN) { + continue; } - } - LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) { - if ((plane_track->flag & PLANE_TRACK_HIDDEN) == 0) { - MovieTrackingPlaneMarker *plane_marker = BKE_tracking_plane_marker_get(plane_track, framenr); + const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); - for (int i = 0; i < 4; i++) { - float screen_co[2]; + if (ED_space_clip_marker_is_visible(sc, tracking_object, track, marker)) { + float screen_co[2]; - /* marker in screen coords */ - ED_clip_point_stable_pos__reverse(sc, region, plane_marker->corners[i], screen_co); + /* marker in screen coords */ + ED_clip_point_stable_pos__reverse(sc, region, marker->pos, screen_co); - if (BLI_rcti_isect_pt(&rect, screen_co[0], screen_co[1]) && - BLI_lasso_is_point_inside( - mcoords, mcoords_len, screen_co[0], screen_co[1], V2D_IS_CLIPPED)) { - if (select) { - plane_track->flag |= SELECT; - } - else { - plane_track->flag &= ~SELECT; - } + if (BLI_rcti_isect_pt(&rect, screen_co[0], screen_co[1]) && + BLI_lasso_is_point_inside( + mcoords, mcoords_len, screen_co[0], screen_co[1], V2D_IS_CLIPPED)) { + if (select) { + BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT); + } + else { + BKE_tracking_track_flag_clear(track, TRACK_AREA_ALL, SELECT); } } @@ -903,6 +884,35 @@ static int do_lasso_select_marker(bContext *C, } } + LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) { + if (plane_track->flag & PLANE_TRACK_HIDDEN) { + continue; + } + + const MovieTrackingPlaneMarker *plane_marker = BKE_tracking_plane_marker_get(plane_track, + framenr); + + for (int i = 0; i < 4; i++) { + float screen_co[2]; + + /* marker in screen coords */ + ED_clip_point_stable_pos__reverse(sc, region, plane_marker->corners[i], screen_co); + + if (BLI_rcti_isect_pt(&rect, screen_co[0], screen_co[1]) && + BLI_lasso_is_point_inside( + mcoords, mcoords_len, screen_co[0], screen_co[1], V2D_IS_CLIPPED)) { + if (select) { + plane_track->flag |= SELECT; + } + else { + plane_track->flag &= ~SELECT; + } + } + } + + changed = true; + } + if (changed) { BKE_tracking_dopesheet_tag_update(&clip->tracking); @@ -972,7 +982,7 @@ static int point_inside_ellipse(const float point[2], return x * x + y * y < 1.0f; } -static int marker_inside_ellipse(MovieTrackingMarker *marker, +static int marker_inside_ellipse(const MovieTrackingMarker *marker, const float offset[2], const float ellipse[2]) { @@ -1015,38 +1025,44 @@ static int circle_select_exec(bContext *C, wmOperator *op) /* do selection */ LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) { - if ((track->flag & TRACK_HIDDEN) == 0) { - MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + if (track->flag & TRACK_HIDDEN) { + continue; + } - if (MARKER_VISIBLE(sc, track, marker) && marker_inside_ellipse(marker, offset, ellipse)) { - if (select) { - BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT); - } - else { - BKE_tracking_track_flag_clear(track, TRACK_AREA_ALL, SELECT); - } - changed = true; + const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + + if (ED_space_clip_marker_is_visible(sc, tracking_object, track, marker) && + marker_inside_ellipse(marker, offset, ellipse)) { + if (select) { + BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT); } + else { + BKE_tracking_track_flag_clear(track, TRACK_AREA_ALL, SELECT); + } + changed = true; } } LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) { - if ((plane_track->flag & PLANE_TRACK_HIDDEN) == 0) { - MovieTrackingPlaneMarker *plane_marker = BKE_tracking_plane_marker_get(plane_track, framenr); + if (plane_track->flag & PLANE_TRACK_HIDDEN) { + continue; + } - for (int i = 0; i < 4; i++) { - if (point_inside_ellipse(plane_marker->corners[i], offset, ellipse)) { - if (select) { - plane_track->flag |= SELECT; - } - else { - plane_track->flag &= ~SELECT; - } + const MovieTrackingPlaneMarker *plane_marker = BKE_tracking_plane_marker_get(plane_track, + framenr); + + for (int i = 0; i < 4; i++) { + if (point_inside_ellipse(plane_marker->corners[i], offset, ellipse)) { + if (select) { + plane_track->flag |= SELECT; + } + else { + plane_track->flag &= ~SELECT; } } - - changed = true; } + + changed = true; } if (changed) {