Cleanup: Strong type for track path clear API
Replace a generic int value with an enum. Should be no functional changes.
This commit is contained in:
parent
81f23ad57a
commit
a0e63bac02
|
@ -32,12 +32,6 @@ struct rcti;
|
|||
* Common types and constants.
|
||||
*/
|
||||
|
||||
enum {
|
||||
TRACK_CLEAR_UPTO = 0,
|
||||
TRACK_CLEAR_REMAINED = 1,
|
||||
TRACK_CLEAR_ALL = 2,
|
||||
};
|
||||
|
||||
enum {
|
||||
CLAMP_PAT_DIM = 1,
|
||||
CLAMP_PAT_POS = 2,
|
||||
|
@ -235,15 +229,21 @@ bool BKE_tracking_track_has_marker_at_frame(struct MovieTrackingTrack *track, in
|
|||
bool BKE_tracking_track_has_enabled_marker_at_frame(struct MovieTrackingTrack *track, int framenr);
|
||||
|
||||
/**
|
||||
* Clear track's path:
|
||||
*
|
||||
* - If action is #TRACK_CLEAR_REMAINED path from `ref_frame+1` up to end will be clear.
|
||||
* - If action is #TRACK_CLEAR_UPTO path from the beginning up to `ref_frame-1` will be clear.
|
||||
* - If action is #TRACK_CLEAR_ALL only marker at frame ref_frame will remain.
|
||||
* Clear track's path.
|
||||
*
|
||||
* \note frame number should be in clip space, not scene space.
|
||||
*/
|
||||
void BKE_tracking_track_path_clear(struct MovieTrackingTrack *track, int ref_frame, int action);
|
||||
typedef enum eTrackClearAction {
|
||||
/* Clear path from `ref_frame+1` up to the . */
|
||||
TRACK_CLEAR_UPTO,
|
||||
/* Clear path from the beginning up to `ref_frame-1`. */
|
||||
TRACK_CLEAR_REMAINED,
|
||||
/* Only marker at frame `ref_frame` will remain. */
|
||||
TRACK_CLEAR_ALL,
|
||||
} eTrackClearAction;
|
||||
void BKE_tracking_track_path_clear(struct MovieTrackingTrack *track,
|
||||
int ref_frame,
|
||||
eTrackClearAction action);
|
||||
|
||||
void BKE_tracking_tracks_join(struct MovieTracking *tracking,
|
||||
struct MovieTrackingTrack *dst_track,
|
||||
|
|
|
@ -727,69 +727,78 @@ bool BKE_tracking_track_has_enabled_marker_at_frame(MovieTrackingTrack *track, i
|
|||
return marker && (marker->flag & MARKER_DISABLED) == 0;
|
||||
}
|
||||
|
||||
void BKE_tracking_track_path_clear(MovieTrackingTrack *track, int ref_frame, int action)
|
||||
static void path_clear_remained(MovieTrackingTrack *track, const int ref_frame)
|
||||
{
|
||||
int a;
|
||||
for (int a = 1; a < track->markersnr; a++) {
|
||||
if (track->markers[a].framenr > ref_frame) {
|
||||
track->markersnr = a;
|
||||
track->markers = MEM_reallocN(track->markers,
|
||||
sizeof(MovieTrackingMarker) * track->markersnr);
|
||||
|
||||
if (action == TRACK_CLEAR_REMAINED) {
|
||||
a = 1;
|
||||
|
||||
while (a < track->markersnr) {
|
||||
if (track->markers[a].framenr > ref_frame) {
|
||||
track->markersnr = a;
|
||||
track->markers = MEM_reallocN(track->markers,
|
||||
sizeof(MovieTrackingMarker) * track->markersnr);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
a++;
|
||||
}
|
||||
|
||||
if (track->markersnr) {
|
||||
tracking_marker_insert_disabled(track, &track->markers[track->markersnr - 1], false, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (action == TRACK_CLEAR_UPTO) {
|
||||
a = track->markersnr - 1;
|
||||
|
||||
while (a >= 0) {
|
||||
if (track->markers[a].framenr <= ref_frame) {
|
||||
memmove(track->markers,
|
||||
track->markers + a,
|
||||
(track->markersnr - a) * sizeof(MovieTrackingMarker));
|
||||
if (track->markersnr) {
|
||||
tracking_marker_insert_disabled(track, &track->markers[track->markersnr - 1], false, true);
|
||||
}
|
||||
}
|
||||
|
||||
track->markersnr = track->markersnr - a;
|
||||
track->markers = MEM_reallocN(track->markers,
|
||||
sizeof(MovieTrackingMarker) * track->markersnr);
|
||||
static void path_clear_up_to(MovieTrackingTrack *track, const int ref_frame)
|
||||
{
|
||||
for (int a = track->markersnr - 1; a >= 0; a--) {
|
||||
if (track->markers[a].framenr <= ref_frame) {
|
||||
memmove(track->markers,
|
||||
track->markers + a,
|
||||
(track->markersnr - a) * sizeof(MovieTrackingMarker));
|
||||
|
||||
break;
|
||||
}
|
||||
track->markersnr = track->markersnr - a;
|
||||
track->markers = MEM_reallocN(track->markers,
|
||||
sizeof(MovieTrackingMarker) * track->markersnr);
|
||||
|
||||
a--;
|
||||
}
|
||||
|
||||
if (track->markersnr) {
|
||||
tracking_marker_insert_disabled(track, &track->markers[0], true, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (action == TRACK_CLEAR_ALL) {
|
||||
MovieTrackingMarker *marker, marker_new;
|
||||
|
||||
marker = BKE_tracking_marker_get(track, ref_frame);
|
||||
marker_new = *marker;
|
||||
|
||||
MEM_freeN(track->markers);
|
||||
track->markers = NULL;
|
||||
track->markersnr = 0;
|
||||
|
||||
BKE_tracking_marker_insert(track, &marker_new);
|
||||
|
||||
tracking_marker_insert_disabled(track, &marker_new, true, true);
|
||||
tracking_marker_insert_disabled(track, &marker_new, false, true);
|
||||
if (track->markersnr) {
|
||||
tracking_marker_insert_disabled(track, &track->markers[0], true, true);
|
||||
}
|
||||
}
|
||||
|
||||
static void path_clear_all(MovieTrackingTrack *track, const int ref_frame)
|
||||
{
|
||||
MovieTrackingMarker *marker, marker_new;
|
||||
|
||||
marker = BKE_tracking_marker_get(track, ref_frame);
|
||||
marker_new = *marker;
|
||||
|
||||
MEM_freeN(track->markers);
|
||||
track->markers = NULL;
|
||||
track->markersnr = 0;
|
||||
|
||||
BKE_tracking_marker_insert(track, &marker_new);
|
||||
|
||||
tracking_marker_insert_disabled(track, &marker_new, true, true);
|
||||
tracking_marker_insert_disabled(track, &marker_new, false, true);
|
||||
}
|
||||
|
||||
void BKE_tracking_track_path_clear(MovieTrackingTrack *track,
|
||||
const int ref_frame,
|
||||
const eTrackClearAction action)
|
||||
{
|
||||
switch (action) {
|
||||
case TRACK_CLEAR_REMAINED:
|
||||
path_clear_remained(track, ref_frame);
|
||||
break;
|
||||
case TRACK_CLEAR_UPTO:
|
||||
path_clear_up_to(track, ref_frame);
|
||||
break;
|
||||
case TRACK_CLEAR_ALL:
|
||||
path_clear_all(track, ref_frame);
|
||||
break;
|
||||
};
|
||||
}
|
||||
|
||||
void BKE_tracking_tracks_join(MovieTracking *tracking,
|
||||
MovieTrackingTrack *dst_track,
|
||||
MovieTrackingTrack *src_track)
|
||||
|
|
|
@ -1012,9 +1012,9 @@ static int clear_track_path_exec(bContext *C, wmOperator *op)
|
|||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
int action = RNA_enum_get(op->ptr, "action");
|
||||
const eTrackClearAction action = RNA_enum_get(op->ptr, "action");
|
||||
const bool clear_active = RNA_boolean_get(op->ptr, "clear_active");
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
|
||||
if (clear_active) {
|
||||
MovieTrackingTrack *track = BKE_tracking_track_get_active(tracking);
|
||||
|
|
Loading…
Reference in New Issue