Refactor: Simplify tracking active element accessor API
Use active object accessor, and then access data from the object. There is no need to have an API call for shortcut of all object fields. Should be no functional change.
This commit is contained in:
@@ -67,20 +67,6 @@ void BKE_tracking_copy(struct MovieTracking *tracking_dst,
|
||||
*/
|
||||
void BKE_tracking_settings_init(struct MovieTracking *tracking);
|
||||
|
||||
/**
|
||||
* Get list base of active object's tracks.
|
||||
*/
|
||||
struct ListBase *BKE_tracking_get_active_tracks(struct MovieTracking *tracking);
|
||||
/**
|
||||
* Get list base of active object's plane tracks.
|
||||
*/
|
||||
struct ListBase *BKE_tracking_get_active_plane_tracks(struct MovieTracking *tracking);
|
||||
/**
|
||||
* Get reconstruction data of active object.
|
||||
*/
|
||||
struct MovieTrackingReconstruction *BKE_tracking_get_active_reconstruction(
|
||||
struct MovieTracking *tracking);
|
||||
|
||||
/* Matrices for constraints and drawing. */
|
||||
|
||||
/**
|
||||
@@ -252,8 +238,6 @@ struct MovieTrackingTrack *BKE_tracking_track_get_indexed(struct MovieTracking *
|
||||
int tracknr,
|
||||
struct ListBase **r_tracksbase);
|
||||
|
||||
struct MovieTrackingTrack *BKE_tracking_track_get_active(struct MovieTracking *tracking);
|
||||
|
||||
float *BKE_tracking_track_get_mask(int frame_width,
|
||||
int frame_height,
|
||||
const struct MovieTrackingTrack *track,
|
||||
@@ -378,9 +362,6 @@ bool BKE_tracking_plane_track_has_marker_at_frame(struct MovieTrackingPlaneTrack
|
||||
bool BKE_tracking_plane_track_has_enabled_marker_at_frame(
|
||||
struct MovieTrackingPlaneTrack *plane_track, int framenr);
|
||||
|
||||
struct MovieTrackingPlaneTrack *BKE_tracking_plane_track_get_active(
|
||||
struct MovieTracking *tracking);
|
||||
|
||||
void BKE_tracking_plane_tracks_deselect_all(struct ListBase *plane_tracks_base);
|
||||
|
||||
bool BKE_tracking_plane_track_has_point_track(struct MovieTrackingPlaneTrack *plane_track,
|
||||
@@ -836,7 +817,7 @@ void BKE_tracking_get_rna_path_prefix_for_plane_track(
|
||||
|
||||
#define MARKER_VISIBLE(sc, track, marker) \
|
||||
(((marker)->flag & MARKER_DISABLED) == 0 || ((sc)->flag & SC_HIDE_DISABLED) == 0 || \
|
||||
(BKE_tracking_track_get_active(&(sc)->clip->tracking) == track))
|
||||
(BKE_tracking_object_get_active(&(sc)->clip->tracking)->active_track == track))
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -1769,7 +1769,8 @@ void BKE_movieclip_update_scopes(MovieClip *clip, MovieClipUser *user, MovieClip
|
||||
return;
|
||||
}
|
||||
|
||||
MovieTrackingTrack *track = BKE_tracking_track_get_active(&clip->tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
MovieTrackingTrack *track = tracking_object->active_track;
|
||||
if (track == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -355,28 +355,6 @@ void BKE_tracking_settings_init(MovieTracking *tracking)
|
||||
BKE_tracking_object_add(tracking, DATA_("Camera"));
|
||||
}
|
||||
|
||||
ListBase *BKE_tracking_get_active_tracks(MovieTracking *tracking)
|
||||
{
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
BLI_assert(tracking_object != NULL);
|
||||
|
||||
return &tracking_object->tracks;
|
||||
}
|
||||
|
||||
ListBase *BKE_tracking_get_active_plane_tracks(MovieTracking *tracking)
|
||||
{
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
BLI_assert(tracking_object != NULL);
|
||||
|
||||
return &tracking_object->plane_tracks;
|
||||
}
|
||||
|
||||
MovieTrackingReconstruction *BKE_tracking_get_active_reconstruction(MovieTracking *tracking)
|
||||
{
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
return &tracking_object->reconstruction;
|
||||
}
|
||||
|
||||
void BKE_tracking_get_camera_object_matrix(Object *camera_object, float mat[4][4])
|
||||
{
|
||||
BLI_assert(camera_object != NULL);
|
||||
@@ -648,8 +626,8 @@ int BKE_tracking_count_selected_tracks_in_list(const ListBase *tracks_list)
|
||||
|
||||
int BKE_tracking_count_selected_tracks_in_active_object(/*const*/ MovieTracking *tracking)
|
||||
{
|
||||
ListBase *tracks_list = BKE_tracking_get_active_tracks(tracking);
|
||||
return BKE_tracking_count_selected_tracks_in_list(tracks_list);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
return BKE_tracking_count_selected_tracks_in_list(&tracking_object->tracks);
|
||||
}
|
||||
|
||||
MovieTrackingTrack **BKE_tracking_selected_tracks_in_active_object(MovieTracking *tracking,
|
||||
@@ -657,10 +635,7 @@ MovieTrackingTrack **BKE_tracking_selected_tracks_in_active_object(MovieTracking
|
||||
{
|
||||
*r_num_tracks = 0;
|
||||
|
||||
ListBase *tracks_list = BKE_tracking_get_active_tracks(tracking);
|
||||
if (tracks_list == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
|
||||
/* Initialize input. */
|
||||
const int num_selected_tracks = BKE_tracking_count_selected_tracks_in_active_object(tracking);
|
||||
@@ -671,7 +646,7 @@ MovieTrackingTrack **BKE_tracking_selected_tracks_in_active_object(MovieTracking
|
||||
MovieTrackingTrack **source_tracks = MEM_malloc_arrayN(
|
||||
num_selected_tracks, sizeof(MovieTrackingTrack *), "selected tracks array");
|
||||
int source_track_index = 0;
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, tracks_list) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (!TRACK_SELECTED(track)) {
|
||||
continue;
|
||||
}
|
||||
@@ -1058,19 +1033,6 @@ MovieTrackingTrack *BKE_tracking_track_get_indexed(MovieTracking *tracking,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
MovieTrackingTrack *BKE_tracking_track_get_active(MovieTracking *tracking)
|
||||
{
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
if (tracking_object->active_track == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Perform data consistency check. */
|
||||
BLI_assert(BLI_findindex(&tracking_object->tracks, tracking_object->active_track) != -1);
|
||||
|
||||
return tracking_object->active_track;
|
||||
}
|
||||
|
||||
static bGPDlayer *track_mask_gpencil_layer_get(const MovieTrackingTrack *track)
|
||||
{
|
||||
bGPDlayer *layer;
|
||||
@@ -1667,20 +1629,6 @@ void BKE_tracking_plane_track_free(MovieTrackingPlaneTrack *plane_track)
|
||||
MEM_freeN(plane_track->point_tracks);
|
||||
}
|
||||
|
||||
MovieTrackingPlaneTrack *BKE_tracking_plane_track_get_active(struct MovieTracking *tracking)
|
||||
{
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
if (tracking_object->active_plane_track == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Perform data consistency check. */
|
||||
BLI_assert(BLI_findindex(&tracking_object->plane_tracks, tracking_object->active_plane_track) !=
|
||||
-1);
|
||||
|
||||
return tracking_object->active_plane_track;
|
||||
}
|
||||
|
||||
void BKE_tracking_plane_tracks_deselect_all(ListBase *plane_tracks_base)
|
||||
{
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, plane_tracks_base) {
|
||||
@@ -1725,13 +1673,14 @@ bool BKE_tracking_plane_track_remove_point_track(MovieTrackingPlaneTrack *plane_
|
||||
void BKE_tracking_plane_tracks_remove_point_track(MovieTracking *tracking,
|
||||
MovieTrackingTrack *track)
|
||||
{
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
LISTBASE_FOREACH_MUTABLE (MovieTrackingPlaneTrack *, plane_track, plane_tracks_base) {
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
LISTBASE_FOREACH_MUTABLE (
|
||||
MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
if (BKE_tracking_plane_track_has_point_track(plane_track, track)) {
|
||||
if (!BKE_tracking_plane_track_remove_point_track(plane_track, track)) {
|
||||
/* Delete planes with less than 3 point tracks in it. */
|
||||
BKE_tracking_plane_track_free(plane_track);
|
||||
BLI_freelinkN(plane_tracks_base, plane_track);
|
||||
BLI_freelinkN(&tracking_object->plane_tracks, plane_track);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1753,8 +1702,8 @@ void BKE_tracking_plane_tracks_replace_point_track(MovieTracking *tracking,
|
||||
MovieTrackingTrack *old_track,
|
||||
MovieTrackingTrack *new_track)
|
||||
{
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, plane_tracks_base) {
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
if (BKE_tracking_plane_track_has_point_track(plane_track, old_track)) {
|
||||
BKE_tracking_plane_track_replace_point_track(plane_track, old_track, new_track);
|
||||
}
|
||||
|
||||
@@ -361,10 +361,9 @@ static void autotrack_context_init_tracks_for_clip(AutoTrackContext *context, in
|
||||
|
||||
const AutoTrackClip *autotrack_clip = &context->autotrack_clips[clip_index];
|
||||
MovieClip *clip = autotrack_clip->clip;
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracks_base = BKE_tracking_get_active_tracks(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
|
||||
const int num_clip_tracks = BLI_listbase_count(tracks_base);
|
||||
const int num_clip_tracks = BLI_listbase_count(&tracking_object->tracks);
|
||||
if (num_clip_tracks == 0) {
|
||||
return;
|
||||
}
|
||||
@@ -373,7 +372,7 @@ static void autotrack_context_init_tracks_for_clip(AutoTrackContext *context, in
|
||||
(context->num_all_tracks + num_clip_tracks) *
|
||||
sizeof(AutoTrackTrack));
|
||||
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, tracks_base) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
AutoTrackTrack *autotrack_track = &context->all_autotrack_tracks[context->num_all_tracks++];
|
||||
autotrack_track->clip_index = clip_index;
|
||||
autotrack_track->track = track;
|
||||
@@ -838,11 +837,11 @@ void BKE_autotrack_context_finish(AutoTrackContext *context)
|
||||
for (int clip_index = 0; clip_index < context->num_clips; clip_index++) {
|
||||
const AutoTrackClip *autotrack_clip = &context->autotrack_clips[clip_index];
|
||||
MovieClip *clip = autotrack_clip->clip;
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(&clip->tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int start_clip_frame = BKE_movieclip_remap_scene_to_clip_frame(
|
||||
clip, context->start_scene_frame);
|
||||
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, plane_tracks_base) {
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
if (plane_track->flag & PLANE_TRACK_AUTOKEY) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -1348,7 +1348,9 @@ static bool annotation_session_initdata(bContext *C, tGPsdata *p)
|
||||
|
||||
if (sc->gpencil_src == SC_GPENCIL_SRC_TRACK) {
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
MovieTrackingTrack *track = BKE_tracking_track_get_active(&clip->tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(
|
||||
&clip->tracking);
|
||||
MovieTrackingTrack *track = tracking_object->active_track;
|
||||
MovieTrackingMarker *marker = track ? BKE_tracking_marker_get(track, framenr) : NULL;
|
||||
|
||||
if (marker) {
|
||||
|
||||
@@ -183,7 +183,9 @@ bGPdata **ED_annotation_data_get_pointers_direct(ID *screen_id,
|
||||
|
||||
if (clip) {
|
||||
if (sc->gpencil_src == SC_GPENCIL_SRC_TRACK) {
|
||||
MovieTrackingTrack *track = BKE_tracking_track_get_active(&clip->tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(
|
||||
&clip->tracking);
|
||||
MovieTrackingTrack *track = tracking_object->active_track;
|
||||
|
||||
if (!track) {
|
||||
return NULL;
|
||||
|
||||
@@ -75,7 +75,6 @@ static int mask_parent_set_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
/* parent info */
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking;
|
||||
MovieTrackingTrack *track;
|
||||
MovieTrackingPlaneTrack *plane_track;
|
||||
MovieTrackingObject *tracking_object;
|
||||
@@ -91,14 +90,13 @@ static int mask_parent_set_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
|
||||
framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
|
||||
tracking = &clip->tracking;
|
||||
tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
|
||||
if (tracking_object == NULL) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
if ((track = BKE_tracking_track_get_active(tracking)) != NULL) {
|
||||
if ((track = tracking_object->active_track) != NULL) {
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
float marker_pos_ofs[2];
|
||||
|
||||
@@ -110,7 +108,7 @@ static int mask_parent_set_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
parent_type = MASK_PARENT_POINT_TRACK;
|
||||
memset(orig_corners, 0, sizeof(orig_corners));
|
||||
}
|
||||
else if ((plane_track = BKE_tracking_plane_track_get_active(tracking)) != NULL) {
|
||||
else if ((plane_track = tracking_object->active_plane_track) != NULL) {
|
||||
MovieTrackingPlaneMarker *plane_marker = BKE_tracking_plane_marker_get(plane_track, framenr);
|
||||
|
||||
zero_v2(parmask_pos);
|
||||
|
||||
@@ -761,13 +761,9 @@ static eContextResult screen_ctx_selected_movieclip_tracks(const bContext *C,
|
||||
if (clip == NULL) {
|
||||
return CTX_RESULT_NO_DATA;
|
||||
}
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
if (tracking == NULL) {
|
||||
return CTX_RESULT_NO_DATA;
|
||||
}
|
||||
|
||||
ListBase *tracks_list = BKE_tracking_get_active_tracks(tracking);
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, tracks_list) {
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (!TRACK_SELECTED(track)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -67,8 +67,8 @@ static void draw_keyframe(int frame, int cfra, int sfra, float framelen, int wid
|
||||
}
|
||||
}
|
||||
|
||||
static int generic_track_get_markersnr(MovieTrackingTrack *track,
|
||||
MovieTrackingPlaneTrack *plane_track)
|
||||
static int generic_track_get_markersnr(const MovieTrackingTrack *track,
|
||||
const MovieTrackingPlaneTrack *plane_track)
|
||||
{
|
||||
if (track) {
|
||||
return track->markersnr;
|
||||
@@ -80,9 +80,9 @@ static int generic_track_get_markersnr(MovieTrackingTrack *track,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int generic_track_get_marker_framenr(MovieTrackingTrack *track,
|
||||
MovieTrackingPlaneTrack *plane_track,
|
||||
int marker_index)
|
||||
static int generic_track_get_marker_framenr(const MovieTrackingTrack *track,
|
||||
const MovieTrackingPlaneTrack *plane_track,
|
||||
const int marker_index)
|
||||
{
|
||||
if (track) {
|
||||
BLI_assert(marker_index < track->markersnr);
|
||||
@@ -96,9 +96,9 @@ static int generic_track_get_marker_framenr(MovieTrackingTrack *track,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool generic_track_is_marker_enabled(MovieTrackingTrack *track,
|
||||
MovieTrackingPlaneTrack *plane_track,
|
||||
int marker_index)
|
||||
static bool generic_track_is_marker_enabled(const MovieTrackingTrack *track,
|
||||
const MovieTrackingPlaneTrack *plane_track,
|
||||
const int marker_index)
|
||||
{
|
||||
if (track) {
|
||||
BLI_assert(marker_index < track->markersnr);
|
||||
@@ -111,9 +111,9 @@ static bool generic_track_is_marker_enabled(MovieTrackingTrack *track,
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool generic_track_is_marker_keyframed(MovieTrackingTrack *track,
|
||||
MovieTrackingPlaneTrack *plane_track,
|
||||
int marker_index)
|
||||
static bool generic_track_is_marker_keyframed(const MovieTrackingTrack *track,
|
||||
const MovieTrackingPlaneTrack *plane_track,
|
||||
const int marker_index)
|
||||
{
|
||||
if (track) {
|
||||
BLI_assert(marker_index < track->markersnr);
|
||||
@@ -132,11 +132,8 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *region, MovieClip *clip
|
||||
float x;
|
||||
int *points, totseg, i, a;
|
||||
float sfra = scene->r.sfra, efra = scene->r.efra, framelen = region->winx / (efra - sfra + 1);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingObject *act_object = BKE_tracking_object_get_active(tracking);
|
||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(&clip->tracking);
|
||||
MovieTrackingPlaneTrack *act_plane_track = BKE_tracking_plane_track_get_active(&clip->tracking);
|
||||
MovieTrackingReconstruction *reconstruction = BKE_tracking_get_active_reconstruction(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const MovieTrackingReconstruction *reconstruction = &tracking_object->reconstruction;
|
||||
|
||||
GPU_blend(GPU_BLEND_ALPHA);
|
||||
|
||||
@@ -152,20 +149,23 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *region, MovieClip *clip
|
||||
immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
|
||||
|
||||
/* track */
|
||||
if (act_track || act_plane_track) {
|
||||
if (tracking_object->active_track || tracking_object->active_plane_track) {
|
||||
const MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
const MovieTrackingPlaneTrack *active_plane_track = tracking_object->active_plane_track;
|
||||
|
||||
for (i = sfra - clip->start_frame + 1, a = 0; i <= efra - clip->start_frame + 1; i++) {
|
||||
int framenr;
|
||||
int markersnr = generic_track_get_markersnr(act_track, act_plane_track);
|
||||
const int markersnr = generic_track_get_markersnr(active_track, active_plane_track);
|
||||
|
||||
while (a < markersnr) {
|
||||
int marker_framenr = generic_track_get_marker_framenr(act_track, act_plane_track, a);
|
||||
int marker_framenr = generic_track_get_marker_framenr(active_track, active_plane_track, a);
|
||||
|
||||
if (marker_framenr >= i) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (a < markersnr - 1 &&
|
||||
generic_track_get_marker_framenr(act_track, act_plane_track, a + 1) > i) {
|
||||
generic_track_get_marker_framenr(active_track, active_plane_track, a + 1) > i) {
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -174,13 +174,13 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *region, MovieClip *clip
|
||||
|
||||
a = min_ii(a, markersnr - 1);
|
||||
|
||||
if (generic_track_is_marker_enabled(act_track, act_plane_track, a)) {
|
||||
framenr = generic_track_get_marker_framenr(act_track, act_plane_track, a);
|
||||
if (generic_track_is_marker_enabled(active_track, active_plane_track, a)) {
|
||||
framenr = generic_track_get_marker_framenr(active_track, active_plane_track, a);
|
||||
|
||||
if (framenr != i) {
|
||||
immUniformColor4ub(128, 128, 0, 96);
|
||||
}
|
||||
else if (generic_track_is_marker_keyframed(act_track, act_plane_track, a)) {
|
||||
else if (generic_track_is_marker_keyframed(active_track, active_plane_track, a)) {
|
||||
immUniformColor4ub(255, 255, 0, 196);
|
||||
}
|
||||
else {
|
||||
@@ -246,9 +246,9 @@ static void draw_movieclip_cache(SpaceClip *sc, ARegion *region, MovieClip *clip
|
||||
/* solver keyframes */
|
||||
immUniformColor4ub(175, 255, 0, 255);
|
||||
draw_keyframe(
|
||||
act_object->keyframe1 + clip->start_frame - 1, scene->r.cfra, sfra, framelen, 2, pos);
|
||||
tracking_object->keyframe1 + clip->start_frame - 1, scene->r.cfra, sfra, framelen, 2, pos);
|
||||
draw_keyframe(
|
||||
act_object->keyframe2 + clip->start_frame - 1, scene->r.cfra, sfra, framelen, 2, pos);
|
||||
tracking_object->keyframe2 + clip->start_frame - 1, scene->r.cfra, sfra, framelen, 2, pos);
|
||||
|
||||
immUnbindProgram();
|
||||
|
||||
@@ -1430,14 +1430,12 @@ static void draw_tracking_tracks(SpaceClip *sc,
|
||||
float zoomy)
|
||||
{
|
||||
float x, y;
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
MovieTrackingTrack *track, *act_track;
|
||||
MovieTrackingPlaneTrack *plane_track, *active_plane_track;
|
||||
MovieTrackingMarker *marker;
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
int undistort = sc->user.render_flag & MCLIP_PROXY_RENDER_UNDISTORT;
|
||||
/*const*/ MovieTracking *tracking = &clip->tracking;
|
||||
/*const*/ MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
/*const*/ MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
/*const*/ MovieTrackingPlaneTrack *active_plane_track = tracking_object->active_plane_track;
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
const int undistort = sc->user.render_flag & MCLIP_PROXY_RENDER_UNDISTORT;
|
||||
float *marker_pos = NULL, *fp, *active_pos = NULL, cur_pos[2];
|
||||
|
||||
/* ** find window pixel coordinates of origin ** */
|
||||
@@ -1457,11 +1455,8 @@ static void draw_tracking_tracks(SpaceClip *sc,
|
||||
GPU_matrix_mul(sc->stabmat);
|
||||
GPU_matrix_scale_2f(width, height);
|
||||
|
||||
act_track = BKE_tracking_track_get_active(tracking);
|
||||
|
||||
/* Draw plane tracks */
|
||||
active_plane_track = BKE_tracking_plane_track_get_active(tracking);
|
||||
for (plane_track = plane_tracks_base->first; plane_track; plane_track = plane_track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
if ((plane_track->flag & PLANE_TRACK_HIDDEN) == 0) {
|
||||
draw_plane_track(
|
||||
sc, scene, plane_track, framenr, plane_track == active_plane_track, width, height);
|
||||
@@ -1472,67 +1467,57 @@ static void draw_tracking_tracks(SpaceClip *sc,
|
||||
int count = 0;
|
||||
|
||||
/* count */
|
||||
track = tracksbase->first;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0) {
|
||||
marker = BKE_tracking_marker_get(track, framenr);
|
||||
const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
if (MARKER_VISIBLE(sc, track, marker)) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
|
||||
/* undistort */
|
||||
if (count) {
|
||||
marker_pos = MEM_callocN(sizeof(float[2]) * count, "draw_tracking_tracks marker_pos");
|
||||
|
||||
track = tracksbase->first;
|
||||
fp = marker_pos;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0) {
|
||||
marker = BKE_tracking_marker_get(track, framenr);
|
||||
const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
if (MARKER_VISIBLE(sc, track, marker)) {
|
||||
ED_clip_point_undistorted_pos(sc, marker->pos, fp);
|
||||
|
||||
if (track == act_track) {
|
||||
if (track == active_track) {
|
||||
active_pos = fp;
|
||||
}
|
||||
|
||||
fp += 2;
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sc->flag & SC_SHOW_TRACK_PATH) {
|
||||
track = tracksbase->first;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0) {
|
||||
draw_track_path(sc, clip, track);
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
}
|
||||
|
||||
uint position = GPU_vertformat_attr_add(
|
||||
const uint position = GPU_vertformat_attr_add(
|
||||
immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
|
||||
|
||||
immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
|
||||
|
||||
/* markers outline and non-selected areas */
|
||||
track = tracksbase->first;
|
||||
fp = marker_pos;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0) {
|
||||
marker = BKE_tracking_marker_get(track, framenr);
|
||||
const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
if (MARKER_VISIBLE(sc, track, marker)) {
|
||||
copy_v2_v2(cur_pos, fp ? fp : marker->pos);
|
||||
@@ -1547,18 +1532,14 @@ static void draw_tracking_tracks(SpaceClip *sc,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
|
||||
/* selected areas only, so selection wouldn't be overlapped by
|
||||
* non-selected areas */
|
||||
track = tracksbase->first;
|
||||
/* selected areas only, so selection wouldn't be overlapped by non-selected areas */
|
||||
fp = marker_pos;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0) {
|
||||
int act = track == act_track;
|
||||
marker = BKE_tracking_marker_get(track, framenr);
|
||||
const int act = track == active_track;
|
||||
const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
if (MARKER_VISIBLE(sc, track, marker)) {
|
||||
if (!act) {
|
||||
@@ -1573,26 +1554,24 @@ static void draw_tracking_tracks(SpaceClip *sc,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
|
||||
/* active marker would be displayed on top of everything else */
|
||||
if (act_track) {
|
||||
if ((act_track->flag & TRACK_HIDDEN) == 0) {
|
||||
marker = BKE_tracking_marker_get(act_track, framenr);
|
||||
if (active_track) {
|
||||
if ((active_track->flag & TRACK_HIDDEN) == 0) {
|
||||
const MovieTrackingMarker *marker = BKE_tracking_marker_get(active_track, framenr);
|
||||
|
||||
if (MARKER_VISIBLE(sc, act_track, marker)) {
|
||||
if (MARKER_VISIBLE(sc, active_track, marker)) {
|
||||
copy_v2_v2(cur_pos, active_pos ? active_pos : marker->pos);
|
||||
|
||||
draw_marker_areas(sc, act_track, marker, cur_pos, width, height, 1, 1, position);
|
||||
draw_marker_slide_zones(sc, act_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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sc->flag & SC_SHOW_BUNDLES) {
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
float pos[4], vec[4], mat[4][4], aspy;
|
||||
|
||||
GPU_point_size(3.0f);
|
||||
@@ -1600,10 +1579,9 @@ static void draw_tracking_tracks(SpaceClip *sc,
|
||||
aspy = 1.0f / clip->tracking.camera.pixel_aspect;
|
||||
BKE_tracking_get_projection_matrix(tracking, tracking_object, framenr, width, height, mat);
|
||||
|
||||
track = tracksbase->first;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0 && track->flag & TRACK_HAS_BUNDLE) {
|
||||
marker = BKE_tracking_marker_get(track, framenr);
|
||||
const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
if (MARKER_VISIBLE(sc, track, marker)) {
|
||||
float npos[2];
|
||||
@@ -1643,8 +1621,6 @@ static void draw_tracking_tracks(SpaceClip *sc,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1654,14 +1630,13 @@ static void draw_tracking_tracks(SpaceClip *sc,
|
||||
|
||||
if (sc->flag & SC_SHOW_NAMES) {
|
||||
/* scaling should be cleared before drawing texts, otherwise font would also be scaled */
|
||||
track = tracksbase->first;
|
||||
fp = marker_pos;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0) {
|
||||
marker = BKE_tracking_marker_get(track, framenr);
|
||||
const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
if (MARKER_VISIBLE(sc, track, marker)) {
|
||||
int act = track == act_track;
|
||||
const int act = track == active_track;
|
||||
|
||||
copy_v2_v2(cur_pos, fp ? fp : marker->pos);
|
||||
|
||||
@@ -1672,8 +1647,6 @@ static void draw_tracking_tracks(SpaceClip *sc,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1990,11 +1963,13 @@ void clip_draw_grease_pencil(bContext *C, int onlyv2d)
|
||||
GPU_matrix_mul(sc->unistabmat);
|
||||
|
||||
if (is_track_source) {
|
||||
MovieTrackingTrack *track = BKE_tracking_track_get_active(&sc->clip->tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(
|
||||
&clip->tracking);
|
||||
MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
|
||||
if (track) {
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
if (active_track) {
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get(active_track, framenr);
|
||||
|
||||
GPU_matrix_translate_2fv(marker->pos);
|
||||
}
|
||||
|
||||
@@ -374,21 +374,16 @@ bool ED_clip_view_selection(const bContext *C, ARegion *UNUSED(region), bool fit
|
||||
void ED_clip_select_all(SpaceClip *sc, int action, bool *r_has_selection)
|
||||
{
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *track = NULL; /* selected track */
|
||||
MovieTrackingPlaneTrack *plane_track = NULL; /* selected plane track */
|
||||
MovieTrackingMarker *marker;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
bool has_selection = false;
|
||||
|
||||
if (action == SEL_TOGGLE) {
|
||||
action = SEL_SELECT;
|
||||
|
||||
for (track = tracksbase->first; track; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track)) {
|
||||
marker = BKE_tracking_marker_get(track, framenr);
|
||||
const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
if (MARKER_VISIBLE(sc, track, marker)) {
|
||||
action = SEL_DESELECT;
|
||||
@@ -397,7 +392,7 @@ void ED_clip_select_all(SpaceClip *sc, int action, bool *r_has_selection)
|
||||
}
|
||||
}
|
||||
|
||||
for (plane_track = plane_tracks_base->first; plane_track; plane_track = plane_track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
if (PLANE_TRACK_VIEW_SELECTED(plane_track)) {
|
||||
action = SEL_DESELECT;
|
||||
break;
|
||||
@@ -405,9 +400,9 @@ void ED_clip_select_all(SpaceClip *sc, int action, bool *r_has_selection)
|
||||
}
|
||||
}
|
||||
|
||||
for (track = tracksbase->first; track; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0) {
|
||||
marker = BKE_tracking_marker_get(track, framenr);
|
||||
const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
if (MARKER_VISIBLE(sc, track, marker)) {
|
||||
switch (action) {
|
||||
@@ -435,7 +430,7 @@ void ED_clip_select_all(SpaceClip *sc, int action, bool *r_has_selection)
|
||||
}
|
||||
}
|
||||
|
||||
for (plane_track = plane_tracks_base->first; plane_track; plane_track = plane_track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
if ((plane_track->flag & PLANE_TRACK_HIDDEN) == 0) {
|
||||
switch (action) {
|
||||
case SEL_SELECT:
|
||||
|
||||
@@ -146,8 +146,8 @@ static void tracking_segment_knot_cb(void *userdata,
|
||||
static void draw_tracks_motion_and_error_curves(View2D *v2d, SpaceClip *sc, uint pos)
|
||||
{
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
const bool draw_knots = (sc->flag & SC_SHOW_GRAPH_TRACKS_MOTION) != 0;
|
||||
|
||||
int width, height;
|
||||
@@ -160,7 +160,7 @@ static void draw_tracks_motion_and_error_curves(View2D *v2d, SpaceClip *sc, uint
|
||||
userdata.sc = sc;
|
||||
userdata.hsize = UI_GetThemeValuef(TH_HANDLE_VERTEX_SIZE);
|
||||
userdata.sel = false;
|
||||
userdata.act_track = act_track;
|
||||
userdata.act_track = active_track;
|
||||
userdata.pos = pos;
|
||||
|
||||
/* Non-selected knot handles. */
|
||||
@@ -202,8 +202,8 @@ static void draw_tracks_motion_and_error_curves(View2D *v2d, SpaceClip *sc, uint
|
||||
static void draw_frame_curves(SpaceClip *sc, uint pos)
|
||||
{
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingReconstruction *reconstruction = BKE_tracking_get_active_reconstruction(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const MovieTrackingReconstruction *reconstruction = &tracking_object->reconstruction;
|
||||
|
||||
int previous_frame;
|
||||
float previous_error;
|
||||
|
||||
@@ -168,16 +168,16 @@ static bool mouse_select_knot(bContext *C, const float co[2], bool extend)
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
ARegion *region = CTX_wm_region(C);
|
||||
View2D *v2d = ®ion->v2d;
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
static const int delta = 6;
|
||||
|
||||
if (act_track) {
|
||||
if (active_track) {
|
||||
MouseSelectUserData userdata;
|
||||
|
||||
mouse_select_init_data(C, &userdata, co);
|
||||
clip_graph_tracking_values_iterate_track(
|
||||
sc, act_track, &userdata, find_nearest_tracking_knot_cb, NULL, NULL);
|
||||
sc, active_track, &userdata, find_nearest_tracking_knot_cb, NULL, NULL);
|
||||
|
||||
if (userdata.marker) {
|
||||
int x1, y1, x2, y2;
|
||||
@@ -224,8 +224,8 @@ static bool mouse_select_curve(bContext *C, const float co[2], bool extend)
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
MouseSelectUserData userdata;
|
||||
|
||||
mouse_select_init_data(C, &userdata, co);
|
||||
@@ -239,15 +239,14 @@ static bool mouse_select_curve(bContext *C, const float co[2], bool extend)
|
||||
|
||||
if (userdata.track) {
|
||||
if (extend) {
|
||||
if (act_track == userdata.track) {
|
||||
if (active_track == userdata.track) {
|
||||
/* currently only single curve can be selected
|
||||
* (selected curve represents active track) */
|
||||
act_track = NULL;
|
||||
active_track = NULL;
|
||||
}
|
||||
}
|
||||
else if (act_track != userdata.track) {
|
||||
else if (active_track != userdata.track) {
|
||||
SelectUserData selectdata = {SEL_DESELECT};
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
|
||||
tracking_object->active_track = userdata.track;
|
||||
if ((sc->flag & SC_SHOW_GRAPH_SEL_ONLY) == 0) {
|
||||
@@ -392,12 +391,12 @@ static int box_select_graph_exec(bContext *C, wmOperator *op)
|
||||
ARegion *region = CTX_wm_region(C);
|
||||
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
BoxSelectuserData userdata;
|
||||
rctf rect;
|
||||
|
||||
if (act_track == NULL) {
|
||||
if (active_track == NULL) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
@@ -409,7 +408,7 @@ static int box_select_graph_exec(bContext *C, wmOperator *op)
|
||||
userdata.select = !RNA_boolean_get(op->ptr, "deselect");
|
||||
userdata.extend = RNA_boolean_get(op->ptr, "extend");
|
||||
|
||||
clip_graph_tracking_values_iterate_track(sc, act_track, &userdata, box_select_cb, NULL, NULL);
|
||||
clip_graph_tracking_values_iterate_track(sc, active_track, &userdata, box_select_cb, NULL, NULL);
|
||||
|
||||
if (userdata.changed) {
|
||||
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL);
|
||||
@@ -446,21 +445,19 @@ static int graph_select_all_markers_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
||||
MovieTrackingMarker *marker;
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
int action = RNA_enum_get(op->ptr, "action");
|
||||
int a;
|
||||
|
||||
if (!act_track) {
|
||||
if (!active_track) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
if (action == SEL_TOGGLE) {
|
||||
action = SEL_SELECT;
|
||||
|
||||
for (a = 0; a < act_track->markersnr; a++) {
|
||||
marker = &act_track->markers[a];
|
||||
for (int a = 0; a < active_track->markersnr; a++) {
|
||||
MovieTrackingMarker *marker = &active_track->markers[a];
|
||||
|
||||
if (marker->flag & MARKER_GRAPH_SEL) {
|
||||
action = SEL_DESELECT;
|
||||
@@ -469,8 +466,8 @@ static int graph_select_all_markers_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
}
|
||||
|
||||
for (a = 0; a < act_track->markersnr; a++) {
|
||||
marker = &act_track->markers[a];
|
||||
for (int a = 0; a < active_track->markersnr; a++) {
|
||||
MovieTrackingMarker *marker = &active_track->markers[a];
|
||||
|
||||
switch (action) {
|
||||
case SEL_SELECT:
|
||||
@@ -513,14 +510,14 @@ static int delete_curve_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
|
||||
if (!act_track) {
|
||||
if (!active_track) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
clip_delete_track(C, clip, act_track);
|
||||
clip_delete_track(C, clip, active_track);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
@@ -547,17 +544,17 @@ static int delete_knot_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
|
||||
if (act_track) {
|
||||
if (active_track) {
|
||||
int a = 0;
|
||||
|
||||
while (a < act_track->markersnr) {
|
||||
MovieTrackingMarker *marker = &act_track->markers[a];
|
||||
while (a < active_track->markersnr) {
|
||||
MovieTrackingMarker *marker = &active_track->markers[a];
|
||||
|
||||
if (marker->flag & MARKER_GRAPH_SEL) {
|
||||
clip_delete_marker(C, clip, act_track, marker);
|
||||
clip_delete_marker(C, clip, active_track, marker);
|
||||
}
|
||||
else {
|
||||
a++;
|
||||
@@ -708,18 +705,16 @@ static int graph_disable_markers_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
||||
MovieTrackingMarker *marker;
|
||||
int action = RNA_enum_get(op->ptr, "action");
|
||||
int a;
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
const int action = RNA_enum_get(op->ptr, "action");
|
||||
|
||||
if (!act_track || (act_track->flag & TRACK_LOCKED)) {
|
||||
if (!active_track || (active_track->flag & TRACK_LOCKED)) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
for (a = 0; a < act_track->markersnr; a++) {
|
||||
marker = &act_track->markers[a];
|
||||
for (int a = 0; a < active_track->markersnr; a++) {
|
||||
MovieTrackingMarker *marker = &active_track->markers[a];
|
||||
|
||||
if (marker->flag & MARKER_GRAPH_SEL) {
|
||||
if (action == 0) {
|
||||
|
||||
@@ -257,11 +257,9 @@ void clip_graph_tracking_values_iterate(SpaceClip *sc,
|
||||
ClipTrackValueSegmentEndCallback segment_end)
|
||||
{
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
MovieTrackingTrack *track;
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
|
||||
for (track = tracksbase->first; track; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (!include_hidden && (track->flag & TRACK_HIDDEN) != 0) {
|
||||
continue;
|
||||
}
|
||||
@@ -282,10 +280,9 @@ void clip_graph_tracking_iterate(SpaceClip *sc,
|
||||
void (*func)(void *userdata, MovieTrackingMarker *marker))
|
||||
{
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, tracksbase) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (!include_hidden && (track->flag & TRACK_HIDDEN) != 0) {
|
||||
continue;
|
||||
}
|
||||
@@ -364,7 +361,7 @@ void clip_delete_marker(bContext *C,
|
||||
void clip_delete_plane_track(bContext *C, MovieClip *clip, MovieTrackingPlaneTrack *plane_track)
|
||||
{
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
/* Delete f-curves associated with the track (such as weight, i.e.) */
|
||||
/* Escaped object name, escaped track name, rest of the path. */
|
||||
char rna_path[MAX_NAME * 4 + 64];
|
||||
@@ -374,7 +371,7 @@ void clip_delete_plane_track(bContext *C, MovieClip *clip, MovieTrackingPlaneTra
|
||||
}
|
||||
/* Delete the plane track itself. */
|
||||
BKE_tracking_plane_track_free(plane_track);
|
||||
BLI_freelinkN(plane_tracks_base, plane_track);
|
||||
BLI_freelinkN(&tracking_object->plane_tracks, plane_track);
|
||||
/* TODO(sergey): Any notifiers to be sent here? */
|
||||
(void)C;
|
||||
/* Inform dependency graph. */
|
||||
@@ -402,18 +399,16 @@ void clip_view_center_to_point(SpaceClip *sc, float x, float y)
|
||||
static bool selected_tracking_boundbox(SpaceClip *sc, float min[2], float max[2])
|
||||
{
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTrackingTrack *track;
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
int width, height;
|
||||
bool ok = false;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
|
||||
INIT_MINMAX2(min, max);
|
||||
|
||||
ED_space_clip_get_size(sc, &width, &height);
|
||||
|
||||
track = tracksbase->first;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track)) {
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
@@ -440,8 +435,6 @@ static bool selected_tracking_boundbox(SpaceClip *sc, float min[2], float max[2]
|
||||
ok = true;
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
|
||||
return ok;
|
||||
@@ -450,10 +443,10 @@ static bool selected_tracking_boundbox(SpaceClip *sc, float min[2], float max[2]
|
||||
static bool tracking_has_selection(SpaceClip *space_clip)
|
||||
{
|
||||
MovieClip *clip = ED_space_clip_get_clip(space_clip);
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(space_clip);
|
||||
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, tracksbase) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (!TRACK_VIEW_SELECTED(space_clip, track)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -215,34 +215,30 @@ static int delete_track_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
bool changed = false;
|
||||
|
||||
/* Delete selected plane tracks. */
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
for (MovieTrackingPlaneTrack *plane_track = plane_tracks_base->first, *next_plane_track;
|
||||
plane_track != NULL;
|
||||
plane_track = next_plane_track) {
|
||||
next_plane_track = plane_track->next;
|
||||
LISTBASE_FOREACH_MUTABLE (
|
||||
MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
if (PLANE_TRACK_VIEW_SELECTED(plane_track)) {
|
||||
clip_delete_plane_track(C, clip, plane_track);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
/* Remove selected point tracks (they'll also be removed from planes which
|
||||
* uses them).
|
||||
*/
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
for (MovieTrackingTrack *track = tracksbase->first, *next_track; track != NULL;
|
||||
track = next_track) {
|
||||
next_track = track->next;
|
||||
|
||||
/* Remove selected point tracks (they'll also be removed from planes which uses them). */
|
||||
LISTBASE_FOREACH_MUTABLE (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track)) {
|
||||
clip_delete_track(C, clip, track);
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip);
|
||||
}
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
||||
@@ -272,14 +268,11 @@ static int delete_marker_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
bool changed = false;
|
||||
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
for (MovieTrackingTrack *track = tracksbase->first, *next_track; track != NULL;
|
||||
track = next_track) {
|
||||
next_track = track->next;
|
||||
LISTBASE_FOREACH_MUTABLE (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track)) {
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get_exact(track, framenr);
|
||||
if (marker != NULL) {
|
||||
@@ -289,18 +282,15 @@ static int delete_marker_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
}
|
||||
}
|
||||
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
for (MovieTrackingPlaneTrack *plane_track = plane_tracks_base->first, *plane_track_next;
|
||||
plane_track != NULL;
|
||||
plane_track = plane_track_next) {
|
||||
plane_track_next = plane_track->next;
|
||||
LISTBASE_FOREACH_MUTABLE (
|
||||
MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
if (PLANE_TRACK_VIEW_SELECTED(plane_track)) {
|
||||
MovieTrackingPlaneMarker *plane_marker = BKE_tracking_plane_marker_get_exact(plane_track,
|
||||
framenr);
|
||||
if (plane_marker != NULL) {
|
||||
if (plane_track->markersnr == 1) {
|
||||
BKE_tracking_plane_track_free(plane_track);
|
||||
BLI_freelinkN(plane_tracks_base, plane_track);
|
||||
BLI_freelinkN(&tracking_object->plane_tracks, plane_track);
|
||||
}
|
||||
else {
|
||||
BKE_tracking_plane_marker_delete(plane_track, framenr);
|
||||
@@ -536,7 +526,7 @@ static MovieTrackingTrack *tracking_marker_check_slide(
|
||||
const float distance_clip_squared = 12.0f * 12.0f;
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
float global_min_distance_squared = FLT_MAX;
|
||||
|
||||
@@ -551,7 +541,7 @@ static MovieTrackingTrack *tracking_marker_check_slide(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, tracksbase) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (!TRACK_VIEW_SELECTED(sc, track) || (track->flag & TRACK_LOCKED)) {
|
||||
continue;
|
||||
}
|
||||
@@ -721,12 +711,10 @@ static void apply_mouse_slide(bContext *C, SlideMarkerData *data)
|
||||
if (data->area == TRACK_AREA_POINT) {
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
|
||||
for (MovieTrackingPlaneTrack *plane_track = plane_tracks_base->first; plane_track != NULL;
|
||||
plane_track = plane_track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
if ((plane_track->flag & PLANE_TRACK_AUTOKEY) == 0) {
|
||||
if (BKE_tracking_plane_track_has_point_track(plane_track, data->track)) {
|
||||
BKE_tracking_track_plane_from_existing_motion(plane_track, framenr);
|
||||
@@ -949,27 +937,25 @@ static int clear_track_path_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const eTrackClearAction action = RNA_enum_get(op->ptr, "action");
|
||||
const bool clear_active = RNA_boolean_get(op->ptr, "clear_active");
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
|
||||
if (clear_active) {
|
||||
MovieTrackingTrack *track = BKE_tracking_track_get_active(tracking);
|
||||
if (track != NULL) {
|
||||
BKE_tracking_track_path_clear(track, framenr, action);
|
||||
if (tracking_object->active_track != NULL) {
|
||||
BKE_tracking_track_path_clear(tracking_object->active_track, framenr, action);
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track)) {
|
||||
BKE_tracking_track_path_clear(track, framenr, action);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BKE_tracking_dopesheet_tag_update(tracking);
|
||||
BKE_tracking_dopesheet_tag_update(&clip->tracking);
|
||||
WM_event_add_notifier(C, NC_MOVIECLIP | NA_EVALUATED, clip);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
@@ -1030,12 +1016,11 @@ static int disable_markers_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
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");
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int action = RNA_enum_get(op->ptr, "action");
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) {
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_ensure(track, framenr);
|
||||
switch (action) {
|
||||
@@ -1203,22 +1188,19 @@ static int hide_tracks_clear_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
|
||||
/* Unhide point tracks. */
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
track->flag &= ~TRACK_HIDDEN;
|
||||
}
|
||||
|
||||
/* Unhide plane tracks. */
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
for (MovieTrackingPlaneTrack *plane_track = plane_tracks_base->first; plane_track != NULL;
|
||||
plane_track = plane_track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
plane_track->flag &= ~PLANE_TRACK_HIDDEN;
|
||||
}
|
||||
|
||||
BKE_tracking_dopesheet_tag_update(tracking);
|
||||
BKE_tracking_dopesheet_tag_update(&clip->tracking);
|
||||
|
||||
WM_event_add_notifier(C, NC_MOVIECLIP | ND_DISPLAY, NULL);
|
||||
|
||||
@@ -1263,8 +1245,8 @@ static int frame_jump_exec(bContext *C, wmOperator *op)
|
||||
int delta;
|
||||
|
||||
if (pos <= 1) { /* jump to path */
|
||||
MovieTrackingTrack *track = BKE_tracking_track_get_active(tracking);
|
||||
if (track == NULL) {
|
||||
MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
if (active_track == NULL) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
@@ -1272,7 +1254,7 @@ static int frame_jump_exec(bContext *C, wmOperator *op)
|
||||
while (sc->user.framenr + delta >= scene->r.sfra &&
|
||||
sc->user.framenr + delta <= scene->r.efra) {
|
||||
int framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, sc->user.framenr + delta);
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get_exact(track, framenr);
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get_exact(active_track, framenr);
|
||||
|
||||
if (marker == NULL || marker->flag & MARKER_DISABLED) {
|
||||
break;
|
||||
@@ -1351,50 +1333,46 @@ static int join_tracks_exec(bContext *C, wmOperator *op)
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingStabilization *stab = &tracking->stabilization;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
MovieTrackingStabilization *stabilization = &tracking->stabilization;
|
||||
bool update_stabilization = false;
|
||||
|
||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
||||
if (act_track == NULL) {
|
||||
MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
if (active_track == NULL) {
|
||||
BKE_report(op->reports, RPT_ERROR, "No active track to join to");
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
GSet *point_tracks = BLI_gset_ptr_new(__func__);
|
||||
|
||||
for (MovieTrackingTrack *track = tracksbase->first, *next_track; track != NULL;
|
||||
track = next_track) {
|
||||
next_track = track->next;
|
||||
if (TRACK_VIEW_SELECTED(sc, track) && track != act_track) {
|
||||
BKE_tracking_tracks_join(tracking, act_track, track);
|
||||
LISTBASE_FOREACH_MUTABLE (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track) && track != active_track) {
|
||||
BKE_tracking_tracks_join(tracking, active_track, track);
|
||||
|
||||
if (track->flag & TRACK_USE_2D_STAB) {
|
||||
update_stabilization = true;
|
||||
if ((act_track->flag & TRACK_USE_2D_STAB) == 0) {
|
||||
act_track->flag |= TRACK_USE_2D_STAB;
|
||||
if ((active_track->flag & TRACK_USE_2D_STAB) == 0) {
|
||||
active_track->flag |= TRACK_USE_2D_STAB;
|
||||
}
|
||||
else {
|
||||
stab->tot_track--;
|
||||
stabilization->tot_track--;
|
||||
}
|
||||
BLI_assert(0 <= stab->tot_track);
|
||||
BLI_assert(0 <= stabilization->tot_track);
|
||||
}
|
||||
if (track->flag & TRACK_USE_2D_STAB_ROT) {
|
||||
update_stabilization = true;
|
||||
if ((act_track->flag & TRACK_USE_2D_STAB_ROT) == 0) {
|
||||
act_track->flag |= TRACK_USE_2D_STAB_ROT;
|
||||
if ((active_track->flag & TRACK_USE_2D_STAB_ROT) == 0) {
|
||||
active_track->flag |= TRACK_USE_2D_STAB_ROT;
|
||||
}
|
||||
else {
|
||||
stab->tot_rot_track--;
|
||||
stabilization->tot_rot_track--;
|
||||
}
|
||||
BLI_assert(0 <= stab->tot_rot_track);
|
||||
BLI_assert(0 <= stabilization->tot_rot_track);
|
||||
}
|
||||
|
||||
for (MovieTrackingPlaneTrack *plane_track = plane_tracks_base->first; plane_track != NULL;
|
||||
plane_track = plane_track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
if (BKE_tracking_plane_track_has_point_track(plane_track, track)) {
|
||||
BKE_tracking_plane_track_replace_point_track(plane_track, track, act_track);
|
||||
BKE_tracking_plane_track_replace_point_track(plane_track, track, active_track);
|
||||
if ((plane_track->flag & PLANE_TRACK_AUTOKEY) == 0) {
|
||||
BLI_gset_insert(point_tracks, plane_track);
|
||||
}
|
||||
@@ -1402,7 +1380,7 @@ static int join_tracks_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
|
||||
BKE_tracking_track_free(track);
|
||||
BLI_freelinkN(tracksbase, track);
|
||||
BLI_freelinkN(&tracking_object->tracks, track);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1480,8 +1458,7 @@ static int average_tracks_exec(bContext *C, wmOperator *op)
|
||||
/* TODO(sergey): Should become some sort of utility function available for all operators. */
|
||||
|
||||
BKE_tracking_track_select(&tracking_object->tracks, result_track, TRACK_AREA_ALL, 0);
|
||||
ListBase *plane_tracks_list = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
BKE_tracking_plane_tracks_deselect_all(plane_tracks_list);
|
||||
BKE_tracking_plane_tracks_deselect_all(&tracking_object->plane_tracks);
|
||||
|
||||
tracking_object->active_track = result_track;
|
||||
tracking_object->active_plane_track = NULL;
|
||||
@@ -1553,11 +1530,10 @@ static int lock_tracks_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
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 MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int action = RNA_enum_get(op->ptr, "action");
|
||||
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track)) {
|
||||
switch (action) {
|
||||
case TRACK_ACTION_LOCK:
|
||||
@@ -1669,19 +1645,18 @@ static int track_copy_color_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
|
||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
||||
if (act_track == NULL) {
|
||||
MovieTrackingTrack *active_track = tracking_object->active_track;
|
||||
if (active_track == NULL) {
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track) && track != act_track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track) && track != active_track) {
|
||||
track->flag &= ~TRACK_CUSTOMCOLOR;
|
||||
if (act_track->flag & TRACK_CUSTOMCOLOR) {
|
||||
copy_v3_v3(track->color, act_track->color);
|
||||
if (active_track->flag & TRACK_CUSTOMCOLOR) {
|
||||
copy_v3_v3(track->color, active_track->color);
|
||||
track->flag |= TRACK_CUSTOMCOLOR;
|
||||
}
|
||||
}
|
||||
@@ -2112,11 +2087,10 @@ static void keyframe_set_flag(bContext *C, bool set)
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
|
||||
ListBase *tracks_base = BKE_tracking_get_active_tracks(tracking);
|
||||
for (MovieTrackingTrack *track = tracks_base->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track)) {
|
||||
if (set) {
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_ensure(track, framenr);
|
||||
@@ -2131,9 +2105,7 @@ static void keyframe_set_flag(bContext *C, bool set)
|
||||
}
|
||||
}
|
||||
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
for (MovieTrackingPlaneTrack *plane_track = plane_tracks_base->first; plane_track != NULL;
|
||||
plane_track = plane_track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
if (PLANE_TRACK_VIEW_SELECTED(plane_track)) {
|
||||
if (set) {
|
||||
MovieTrackingPlaneMarker *plane_marker = BKE_tracking_plane_marker_ensure(plane_track,
|
||||
|
||||
@@ -50,14 +50,14 @@ static int detect_features_exec(bContext *C, wmOperator *op)
|
||||
int clip_flag = clip->flag & MCLIP_TIMECODE_FLAGS;
|
||||
ImBuf *ibuf = BKE_movieclip_get_ibuf_flag(clip, &sc->user, clip_flag, MOVIECLIP_CACHE_SKIP);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
int placement = RNA_enum_get(op->ptr, "placement");
|
||||
int margin = RNA_int_get(op->ptr, "margin");
|
||||
int min_distance = RNA_int_get(op->ptr, "min_distance");
|
||||
float threshold = RNA_float_get(op->ptr, "threshold");
|
||||
int place_outside_layer = 0;
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
const int placement = RNA_enum_get(op->ptr, "placement");
|
||||
const int margin = RNA_int_get(op->ptr, "margin");
|
||||
const int min_distance = RNA_int_get(op->ptr, "min_distance");
|
||||
const float threshold = RNA_float_get(op->ptr, "threshold");
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
bGPDlayer *layer = NULL;
|
||||
int place_outside_layer = 0;
|
||||
|
||||
if (!ibuf) {
|
||||
BKE_report(op->reports, RPT_ERROR, "Feature detection requires valid clip frame");
|
||||
@@ -70,10 +70,11 @@ static int detect_features_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
|
||||
/* Deselect existing tracks. */
|
||||
ed_tracking_deselect_all_tracks(tracksbase);
|
||||
ed_tracking_deselect_all_tracks(&tracking_object->tracks);
|
||||
|
||||
/* Run detector. */
|
||||
BKE_tracking_detect_harris(tracking,
|
||||
tracksbase,
|
||||
&tracking_object->tracks,
|
||||
ibuf,
|
||||
framenr,
|
||||
margin,
|
||||
|
||||
@@ -107,9 +107,9 @@ static int count_selected_bundles(bContext *C)
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
int tot = 0;
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, tracksbase) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_HAS_BUNDLE)) {
|
||||
tot++;
|
||||
}
|
||||
@@ -394,7 +394,6 @@ static int set_plane_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
const MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
||||
|
||||
Object *object = get_orientation_object(C);
|
||||
if (object == NULL) {
|
||||
@@ -411,7 +410,7 @@ static int set_plane_exec(bContext *C, wmOperator *op)
|
||||
while (track && tot < 3) {
|
||||
if (track->flag & TRACK_HAS_BUNDLE && TRACK_VIEW_SELECTED(sc, track)) {
|
||||
mul_v3_m4v3(vec[tot], mat, track->bundle_pos);
|
||||
if (tot == 0 || track == act_track) {
|
||||
if (tot == 0 || track == tracking_object->active_track) {
|
||||
copy_v3_v3(orig, vec[tot]);
|
||||
}
|
||||
else {
|
||||
@@ -590,11 +589,9 @@ static int do_set_scale(bContext *C, wmOperator *op, bool scale_solution, bool a
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
MovieTrackingTrack *track;
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
Object *object = NULL;
|
||||
Object *camera = get_camera_with_movieclip(scene, clip);
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
int tot = 0;
|
||||
float vec[2][3], mat[4][4], scale;
|
||||
float dist = RNA_float_get(op->ptr, "distance");
|
||||
@@ -614,13 +611,11 @@ static int do_set_scale(bContext *C, wmOperator *op, bool scale_solution, bool a
|
||||
|
||||
BKE_tracking_get_camera_object_matrix(camera, mat);
|
||||
|
||||
track = static_cast<MovieTrackingTrack *>(tracksbase->first);
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track)) {
|
||||
mul_v3_m4v3(vec[tot], mat, track->bundle_pos);
|
||||
tot++;
|
||||
}
|
||||
track = track->next;
|
||||
}
|
||||
|
||||
sub_v3_v3(vec[0], vec[1]);
|
||||
@@ -629,13 +624,11 @@ static int do_set_scale(bContext *C, wmOperator *op, bool scale_solution, bool a
|
||||
scale = dist / len_v3(vec[0]);
|
||||
if (apply_scale) {
|
||||
/* Apply scale on reconstructed scene itself. */
|
||||
MovieTrackingReconstruction *reconstruction = BKE_tracking_get_active_reconstruction(
|
||||
tracking);
|
||||
MovieTrackingReconstruction *reconstruction = &tracking_object->reconstruction;
|
||||
MovieReconstructedCamera *reconstructed_cameras;
|
||||
int i;
|
||||
|
||||
for (track = static_cast<MovieTrackingTrack *>(tracksbase->first); track;
|
||||
track = static_cast<MovieTrackingTrack *>(track->next)) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
mul_v3_fl(track->bundle_pos, scale);
|
||||
}
|
||||
|
||||
|
||||
@@ -111,11 +111,10 @@ static MovieTrackingPlaneTrack *tracking_plane_marker_check_slide(bContext *C,
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
ARegion *region = CTX_wm_region(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
int width, height;
|
||||
float co[2];
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
|
||||
ED_space_clip_get_size(sc, &width, &height);
|
||||
if (width == 0 || height == 0) {
|
||||
@@ -127,8 +126,7 @@ static MovieTrackingPlaneTrack *tracking_plane_marker_check_slide(bContext *C,
|
||||
float min_distance_squared = FLT_MAX;
|
||||
int min_corner = -1;
|
||||
MovieTrackingPlaneTrack *min_plane_track = NULL;
|
||||
for (MovieTrackingPlaneTrack *plane_track = plane_tracks_base->first; plane_track != NULL;
|
||||
plane_track = plane_track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
if (PLANE_TRACK_VIEW_SELECTED(plane_track)) {
|
||||
MovieTrackingPlaneMarker *plane_marker = BKE_tracking_plane_marker_get(plane_track, framenr);
|
||||
for (int i = 0; i < 4; i++) {
|
||||
|
||||
@@ -130,10 +130,11 @@ static void solve_camera_freejob(void *scv)
|
||||
}
|
||||
}
|
||||
else {
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
BKE_reportf(scj->reports,
|
||||
RPT_INFO,
|
||||
"Average re-projection error: %.2f px",
|
||||
BKE_tracking_get_active_reconstruction(tracking)->error);
|
||||
tracking_object->reconstruction.error);
|
||||
}
|
||||
|
||||
/* Set currently solved clip as active for scene. */
|
||||
@@ -192,7 +193,8 @@ static int solve_camera_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSE
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingReconstruction *reconstruction = BKE_tracking_get_active_reconstruction(tracking);
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
MovieTrackingReconstruction *reconstruction = &tracking_object->reconstruction;
|
||||
wmJob *wm_job;
|
||||
char error_msg[256] = "\0";
|
||||
|
||||
@@ -279,11 +281,10 @@ static int clear_solution_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
|
||||
MovieTrackingReconstruction *reconstruction = BKE_tracking_get_active_reconstruction(tracking);
|
||||
MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
MovieTrackingReconstruction *reconstruction = &tracking_object->reconstruction;
|
||||
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
track->flag &= ~TRACK_HAS_BUNDLE;
|
||||
}
|
||||
|
||||
|
||||
@@ -40,14 +40,14 @@ static int stabilize_2d_add_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
MovieTrackingStabilization *stab = &tracking->stabilization;
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
MovieTrackingStabilization *stabilization = &tracking->stabilization;
|
||||
|
||||
bool update = false;
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_USE_2D_STAB) == 0) {
|
||||
track->flag |= TRACK_USE_2D_STAB;
|
||||
stab->tot_track++;
|
||||
stabilization->tot_track++;
|
||||
update = true;
|
||||
}
|
||||
}
|
||||
@@ -82,19 +82,19 @@ static int stabilize_2d_remove_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingStabilization *stab = &tracking->stabilization;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
MovieTrackingStabilization *stabilization = &tracking->stabilization;
|
||||
int a = 0;
|
||||
bool update = false;
|
||||
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (track->flag & TRACK_USE_2D_STAB) {
|
||||
if (a == stab->act_track) {
|
||||
if (a == stabilization->act_track) {
|
||||
track->flag &= ~TRACK_USE_2D_STAB;
|
||||
stab->act_track--;
|
||||
stab->tot_track--;
|
||||
if (stab->act_track < 0) {
|
||||
stab->act_track = 0;
|
||||
stabilization->act_track--;
|
||||
stabilization->tot_track--;
|
||||
if (stabilization->act_track < 0) {
|
||||
stabilization->act_track = 0;
|
||||
}
|
||||
update = true;
|
||||
break;
|
||||
@@ -132,11 +132,10 @@ static int stabilize_2d_select_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
bool update = false;
|
||||
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (track->flag & TRACK_USE_2D_STAB) {
|
||||
BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT);
|
||||
update = true;
|
||||
@@ -172,14 +171,14 @@ static int stabilize_2d_rotation_add_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
MovieTrackingStabilization *stab = &tracking->stabilization;
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
MovieTrackingStabilization *stabilization = &tracking->stabilization;
|
||||
|
||||
bool update = false;
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_USE_2D_STAB_ROT) == 0) {
|
||||
track->flag |= TRACK_USE_2D_STAB_ROT;
|
||||
stab->tot_rot_track++;
|
||||
stabilization->tot_rot_track++;
|
||||
update = true;
|
||||
}
|
||||
}
|
||||
@@ -214,19 +213,19 @@ static int stabilize_2d_rotation_remove_exec(bContext *C, wmOperator *UNUSED(op)
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingStabilization *stab = &tracking->stabilization;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
MovieTrackingStabilization *stabilization = &tracking->stabilization;
|
||||
int a = 0;
|
||||
bool update = false;
|
||||
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (track->flag & TRACK_USE_2D_STAB_ROT) {
|
||||
if (a == stab->act_rot_track) {
|
||||
if (a == stabilization->act_rot_track) {
|
||||
track->flag &= ~TRACK_USE_2D_STAB_ROT;
|
||||
stab->act_rot_track--;
|
||||
stab->tot_rot_track--;
|
||||
if (stab->act_rot_track < 0) {
|
||||
stab->act_rot_track = 0;
|
||||
stabilization->act_rot_track--;
|
||||
stabilization->tot_rot_track--;
|
||||
if (stabilization->act_rot_track < 0) {
|
||||
stabilization->act_rot_track = 0;
|
||||
}
|
||||
update = true;
|
||||
break;
|
||||
@@ -264,11 +263,10 @@ static int stabilize_2d_rotation_select_exec(bContext *C, wmOperator *UNUSED(op)
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
bool update = false;
|
||||
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (track->flag & TRACK_USE_2D_STAB_ROT) {
|
||||
BKE_tracking_track_flag_set(track, TRACK_AREA_ALL, SELECT);
|
||||
update = true;
|
||||
|
||||
@@ -56,11 +56,11 @@ static bool track_markers_testbreak(void)
|
||||
return G.is_break;
|
||||
}
|
||||
|
||||
static int track_count_markers(SpaceClip *sc, MovieClip *clip, int framenr)
|
||||
static int track_count_markers(SpaceClip *sc, MovieClip *clip, const int framenr)
|
||||
{
|
||||
int tot = 0;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
bool selected = (sc != NULL) ? TRACK_VIEW_SELECTED(sc, track) : TRACK_SELECTED(track);
|
||||
if (selected && (track->flag & TRACK_LOCKED) == 0) {
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
@@ -72,14 +72,17 @@ static int track_count_markers(SpaceClip *sc, MovieClip *clip, int framenr)
|
||||
return tot;
|
||||
}
|
||||
|
||||
static void track_init_markers(SpaceClip *sc, MovieClip *clip, int framenr, int *r_frames_limit)
|
||||
static void track_init_markers(SpaceClip *sc,
|
||||
MovieClip *clip,
|
||||
const int framenr,
|
||||
int *r_frames_limit)
|
||||
{
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
int frames_limit = 0;
|
||||
if (sc != NULL) {
|
||||
clip_tracking_clear_invisible_track_selection(sc, clip);
|
||||
}
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
bool selected = (sc != NULL) ? TRACK_VIEW_SELECTED(sc, track) : TRACK_SELECTED(track);
|
||||
if (selected) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0 && (track->flag & TRACK_LOCKED) == 0) {
|
||||
@@ -442,12 +445,11 @@ static int refine_marker_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
bool backwards = RNA_boolean_get(op->ptr, "backwards");
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const bool backwards = RNA_boolean_get(op->ptr, "backwards");
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track)) {
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
BKE_tracking_refine_marker(clip, track, marker, backwards);
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
|
||||
void clip_tracking_clear_invisible_track_selection(SpaceClip *sc, MovieClip *clip)
|
||||
{
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
|
||||
int hidden = 0;
|
||||
if ((sc->flag & SC_SHOW_MARKER_PATTERN) == 0) {
|
||||
hidden |= TRACK_AREA_PAT;
|
||||
@@ -25,11 +24,14 @@ void clip_tracking_clear_invisible_track_selection(SpaceClip *sc, MovieClip *cli
|
||||
if ((sc->flag & SC_SHOW_MARKER_SEARCH) == 0) {
|
||||
hidden |= TRACK_AREA_SEARCH;
|
||||
}
|
||||
if (hidden) {
|
||||
for (MovieTrackingTrack *track = tracksbase->first; track != NULL; track = track->next) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0) {
|
||||
BKE_tracking_track_flag_clear(track, hidden, SELECT);
|
||||
}
|
||||
if (!hidden) {
|
||||
return;
|
||||
}
|
||||
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0) {
|
||||
BKE_tracking_track_flag_clear(track, hidden, SELECT);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -475,11 +475,7 @@ static int box_select_exec(bContext *C, wmOperator *op)
|
||||
ARegion *region = CTX_wm_region(C);
|
||||
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *track;
|
||||
MovieTrackingPlaneTrack *plane_track;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
rcti rect;
|
||||
rctf rectf;
|
||||
bool changed = false;
|
||||
@@ -499,8 +495,7 @@ static int box_select_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
|
||||
/* do actual selection */
|
||||
track = tracksbase->first;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0) {
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
@@ -516,11 +511,9 @@ static int box_select_exec(bContext *C, wmOperator *op)
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
|
||||
for (plane_track = plane_tracks_base->first; plane_track; plane_track = plane_track->next) {
|
||||
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);
|
||||
|
||||
@@ -539,7 +532,7 @@ static int box_select_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
BKE_tracking_dopesheet_tag_update(tracking);
|
||||
BKE_tracking_dopesheet_tag_update(&clip->tracking);
|
||||
|
||||
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL);
|
||||
DEG_id_tag_update(&clip->id, ID_RECALC_SELECT);
|
||||
@@ -582,21 +575,16 @@ static int do_lasso_select_marker(bContext *C,
|
||||
ARegion *region = CTX_wm_region(C);
|
||||
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *track;
|
||||
MovieTrackingPlaneTrack *plane_track;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
rcti rect;
|
||||
bool changed = false;
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
|
||||
/* get rectangle from operator */
|
||||
BLI_lasso_boundbox(&rect, mcoords, mcoords_len);
|
||||
|
||||
/* do actual selection */
|
||||
track = tracksbase->first;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0) {
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
@@ -620,11 +608,9 @@ static int do_lasso_select_marker(bContext *C,
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
|
||||
for (plane_track = plane_tracks_base->first; plane_track; plane_track = plane_track->next) {
|
||||
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);
|
||||
|
||||
@@ -651,7 +637,7 @@ static int do_lasso_select_marker(bContext *C,
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
BKE_tracking_dopesheet_tag_update(tracking);
|
||||
BKE_tracking_dopesheet_tag_update(&clip->tracking);
|
||||
|
||||
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL);
|
||||
DEG_id_tag_update(&clip->id, ID_RECALC_SELECT);
|
||||
@@ -732,11 +718,7 @@ static int circle_select_exec(bContext *C, wmOperator *op)
|
||||
ARegion *region = CTX_wm_region(C);
|
||||
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
MovieTrackingTrack *track;
|
||||
MovieTrackingPlaneTrack *plane_track;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
int width, height;
|
||||
bool changed = false;
|
||||
float zoomx, zoomy, offset[2], ellipse[2];
|
||||
@@ -765,8 +747,7 @@ static int circle_select_exec(bContext *C, wmOperator *op)
|
||||
ED_clip_point_stable_pos(sc, region, x, y, &offset[0], &offset[1]);
|
||||
|
||||
/* do selection */
|
||||
track = tracksbase->first;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if ((track->flag & TRACK_HIDDEN) == 0) {
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
@@ -780,11 +761,9 @@ static int circle_select_exec(bContext *C, wmOperator *op)
|
||||
changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
|
||||
for (plane_track = plane_tracks_base->first; plane_track; plane_track = plane_track->next) {
|
||||
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);
|
||||
|
||||
@@ -804,7 +783,7 @@ static int circle_select_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
BKE_tracking_dopesheet_tag_update(tracking);
|
||||
BKE_tracking_dopesheet_tag_update(&clip->tracking);
|
||||
|
||||
WM_event_add_notifier(C, NC_GEOM | ND_SELECT, NULL);
|
||||
DEG_id_tag_update(&clip->id, ID_RECALC_SELECT);
|
||||
@@ -888,18 +867,14 @@ static int select_grouped_exec(bContext *C, wmOperator *op)
|
||||
{
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
MovieTrackingTrack *track;
|
||||
MovieTrackingMarker *marker;
|
||||
MovieTracking *tracking = &clip->tracking;
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
|
||||
int group = RNA_enum_get(op->ptr, "group");
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int group = RNA_enum_get(op->ptr, "group");
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
|
||||
track = tracksbase->first;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
bool ok = false;
|
||||
|
||||
marker = BKE_tracking_marker_get(track, framenr);
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
if (group == 0) { /* Keyframed */
|
||||
ok = marker->framenr == framenr && (marker->flag & MARKER_TRACKED) == 0;
|
||||
@@ -917,7 +892,7 @@ static int select_grouped_exec(bContext *C, wmOperator *op)
|
||||
ok = marker->flag & MARKER_DISABLED;
|
||||
}
|
||||
else if (group == 5) { /* color */
|
||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
|
||||
const MovieTrackingTrack *act_track = tracking_object->active_track;
|
||||
|
||||
if (act_track) {
|
||||
ok = (track->flag & TRACK_CUSTOMCOLOR) == (act_track->flag & TRACK_CUSTOMCOLOR);
|
||||
@@ -940,11 +915,9 @@ static int select_grouped_exec(bContext *C, wmOperator *op)
|
||||
track->search_flag |= SELECT;
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
|
||||
BKE_tracking_dopesheet_tag_update(tracking);
|
||||
BKE_tracking_dopesheet_tag_update(&clip->tracking);
|
||||
|
||||
WM_event_add_notifier(C, NC_MOVIECLIP | ND_DISPLAY, clip);
|
||||
DEG_id_tag_update(&clip->id, ID_RECALC_SELECT);
|
||||
|
||||
@@ -332,8 +332,7 @@ static void createTransTrackingTracksData(bContext *C, TransInfo *t)
|
||||
{
|
||||
SpaceClip *space_clip = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(space_clip);
|
||||
const ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
|
||||
const ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(&clip->tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(space_clip);
|
||||
|
||||
TransDataContainer *tc = TRANS_DATA_CONTAINER_FIRST_SINGLE(t);
|
||||
@@ -347,11 +346,11 @@ static void createTransTrackingTracksData(bContext *C, TransInfo *t)
|
||||
|
||||
tc->data_len = 0;
|
||||
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, tracksbase) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
trackToTransDataIfNeeded(&init_context, framenr, track, t->aspect);
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, plane_tracks_base) {
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
planeTrackToTransDataIfNeeded(&init_context, framenr, plane_track, t->aspect);
|
||||
}
|
||||
|
||||
@@ -371,11 +370,11 @@ static void createTransTrackingTracksData(bContext *C, TransInfo *t)
|
||||
|
||||
/* Create actual transformation data. */
|
||||
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, tracksbase) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
trackToTransDataIfNeeded(&init_context, framenr, track, t->aspect);
|
||||
}
|
||||
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, plane_tracks_base) {
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
planeTrackToTransDataIfNeeded(&init_context, framenr, plane_track, t->aspect);
|
||||
}
|
||||
}
|
||||
@@ -431,12 +430,10 @@ static void createTransTrackingCurvesData(bContext *C, TransInfo *t)
|
||||
TransData2D *td2d;
|
||||
SpaceClip *sc = CTX_wm_space_clip(C);
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
|
||||
MovieTrackingTrack *track;
|
||||
MovieTrackingMarker *marker, *prev_marker;
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
TransDataTracking *tdt;
|
||||
int i, width, height;
|
||||
|
||||
int width, height;
|
||||
BKE_movieclip_get_size(clip, &sc->user, &width, &height);
|
||||
|
||||
TransDataContainer *tc = TRANS_DATA_CONTAINER_FIRST_SINGLE(t);
|
||||
@@ -448,12 +445,11 @@ static void createTransTrackingCurvesData(bContext *C, TransInfo *t)
|
||||
return;
|
||||
}
|
||||
|
||||
track = tracksbase->first;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) {
|
||||
for (i = 1; i < track->markersnr; i++) {
|
||||
marker = &track->markers[i];
|
||||
prev_marker = &track->markers[i - 1];
|
||||
for (int i = 1; i < track->markersnr; i++) {
|
||||
const MovieTrackingMarker *marker = &track->markers[i];
|
||||
const MovieTrackingMarker *prev_marker = &track->markers[i - 1];
|
||||
|
||||
if ((marker->flag & MARKER_DISABLED) || (prev_marker->flag & MARKER_DISABLED)) {
|
||||
continue;
|
||||
@@ -468,8 +464,6 @@ static void createTransTrackingCurvesData(bContext *C, TransInfo *t)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
|
||||
if (tc->data_len == 0) {
|
||||
@@ -484,12 +478,11 @@ static void createTransTrackingCurvesData(bContext *C, TransInfo *t)
|
||||
tc->custom.type.free_cb = transDataTrackingFree;
|
||||
|
||||
/* create actual data */
|
||||
track = tracksbase->first;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) {
|
||||
for (i = 1; i < track->markersnr; i++) {
|
||||
marker = &track->markers[i];
|
||||
prev_marker = &track->markers[i - 1];
|
||||
for (int i = 1; i < track->markersnr; i++) {
|
||||
MovieTrackingMarker *marker = &track->markers[i];
|
||||
MovieTrackingMarker *prev_marker = &track->markers[i - 1];
|
||||
|
||||
if ((marker->flag & MARKER_DISABLED) || (prev_marker->flag & MARKER_DISABLED)) {
|
||||
continue;
|
||||
@@ -513,8 +506,6 @@ static void createTransTrackingCurvesData(bContext *C, TransInfo *t)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -700,14 +691,12 @@ static void recalcData_tracking(TransInfo *t)
|
||||
|
||||
if (ED_space_clip_check_show_trackedit(sc)) {
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
|
||||
MovieTrackingTrack *track;
|
||||
int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
|
||||
flushTransTracking(t);
|
||||
|
||||
track = tracksbase->first;
|
||||
while (track) {
|
||||
LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
|
||||
if (TRACK_VIEW_SELECTED(sc, track) && (track->flag & TRACK_LOCKED) == 0) {
|
||||
MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
|
||||
|
||||
@@ -733,8 +722,6 @@ static void recalcData_tracking(TransInfo *t)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
track = track->next;
|
||||
}
|
||||
|
||||
DEG_id_tag_update(&clip->id, 0);
|
||||
@@ -751,10 +738,10 @@ static void special_aftertrans_update__movieclip(bContext *C, TransInfo *t)
|
||||
{
|
||||
SpaceClip *sc = t->area->spacedata.first;
|
||||
MovieClip *clip = ED_space_clip_get_clip(sc);
|
||||
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(&clip->tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
const int framenr = ED_space_clip_get_clip_frame_number(sc);
|
||||
/* Update coordinates of modified plane tracks. */
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, plane_tracks_base) {
|
||||
LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
|
||||
bool do_update = false;
|
||||
if (plane_track->flag & PLANE_TRACK_HIDDEN) {
|
||||
continue;
|
||||
|
||||
@@ -134,9 +134,9 @@ static void rna_tracking_active_object_index_range(
|
||||
static PointerRNA rna_tracking_active_track_get(PointerRNA *ptr)
|
||||
{
|
||||
MovieClip *clip = (MovieClip *)ptr->owner_id;
|
||||
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(&clip->tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
|
||||
return rna_pointer_inherit_refine(ptr, &RNA_MovieTrackingTrack, act_track);
|
||||
return rna_pointer_inherit_refine(ptr, &RNA_MovieTrackingTrack, tracking_object->active_track);
|
||||
}
|
||||
|
||||
static void rna_tracking_active_track_set(PointerRNA *ptr,
|
||||
@@ -160,9 +160,10 @@ static void rna_tracking_active_track_set(PointerRNA *ptr,
|
||||
static PointerRNA rna_tracking_active_plane_track_get(PointerRNA *ptr)
|
||||
{
|
||||
MovieClip *clip = (MovieClip *)ptr->owner_id;
|
||||
MovieTrackingPlaneTrack *act_plane_track = BKE_tracking_plane_track_get_active(&clip->tracking);
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
|
||||
|
||||
return rna_pointer_inherit_refine(ptr, &RNA_MovieTrackingPlaneTrack, act_plane_track);
|
||||
return rna_pointer_inherit_refine(
|
||||
ptr, &RNA_MovieTrackingPlaneTrack, tracking_object->active_plane_track);
|
||||
}
|
||||
|
||||
static void rna_tracking_active_plane_track_set(PointerRNA *ptr,
|
||||
|
||||
@@ -51,11 +51,10 @@ static void init(const bContext *C, PointerRNA *ptr)
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
BLI_strncpy(data->tracking_object, tracking_object->name, sizeof(data->tracking_object));
|
||||
|
||||
const MovieTrackingPlaneTrack *active_plane_track = BKE_tracking_plane_track_get_active(
|
||||
tracking);
|
||||
if (active_plane_track) {
|
||||
BLI_strncpy(
|
||||
data->plane_track_name, active_plane_track->name, sizeof(data->plane_track_name));
|
||||
if (tracking_object->active_plane_track) {
|
||||
BLI_strncpy(data->plane_track_name,
|
||||
tracking_object->active_plane_track->name,
|
||||
sizeof(data->plane_track_name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,9 +49,8 @@ static void init(const bContext *C, PointerRNA *ptr)
|
||||
const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
|
||||
BLI_strncpy(data->tracking_object, tracking_object->name, sizeof(data->tracking_object));
|
||||
|
||||
const MovieTrackingTrack *active_track = BKE_tracking_track_get_active(tracking);
|
||||
if (active_track) {
|
||||
BLI_strncpy(data->track_name, active_track->name, sizeof(data->track_name));
|
||||
if (tracking_object->active_track) {
|
||||
BLI_strncpy(data->track_name, tracking_object->active_track->name, sizeof(data->track_name));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user