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.
This commit is contained in:
parent
b864397201
commit
ea969ccc02
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue