Tracking: Add missing plane track remapping when joining two point tracks

This commit is contained in:
Sergey Sharybin 2015-04-22 02:10:13 +05:00
parent 260f75a2ca
commit b35743d39f
3 changed files with 44 additions and 0 deletions

View File

@ -144,6 +144,13 @@ bool BKE_tracking_plane_track_remove_point_track(struct MovieTrackingPlaneTrack
void BKE_tracking_plane_tracks_remove_point_track(struct MovieTracking *tracking,
struct MovieTrackingTrack *track);
void BKE_tracking_plane_track_replace_point_track(struct MovieTrackingPlaneTrack *plane_track,
struct MovieTrackingTrack *old_track,
struct MovieTrackingTrack *new_track);
void BKE_tracking_plane_tracks_replace_point_track(struct MovieTracking *tracking,
struct MovieTrackingTrack *old_track,
struct MovieTrackingTrack *new_track);
/* **** Plane Marker **** */
struct MovieTrackingPlaneMarker *BKE_tracking_plane_marker_insert(struct MovieTrackingPlaneTrack *plane_track,
struct MovieTrackingPlaneMarker *plane_marker);

View File

@ -1360,6 +1360,37 @@ void BKE_tracking_plane_tracks_remove_point_track(MovieTracking *tracking,
}
}
void BKE_tracking_plane_track_replace_point_track(MovieTrackingPlaneTrack *plane_track,
MovieTrackingTrack *old_track,
MovieTrackingTrack *new_track)
{
int i;
for (i = 0; i < plane_track->point_tracksnr; i++) {
if (plane_track->point_tracks[i] == old_track) {
plane_track->point_tracks[i] = new_track;
break;
}
}
}
void BKE_tracking_plane_tracks_replace_point_track(MovieTracking *tracking,
MovieTrackingTrack *old_track,
MovieTrackingTrack *new_track)
{
MovieTrackingPlaneTrack *plane_track;
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
for (plane_track = plane_tracks_base->first;
plane_track;
plane_track = plane_track->next)
{
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);
}
}
}
/*********************** Plane Marker *************************/
MovieTrackingPlaneMarker *BKE_tracking_plane_marker_insert(MovieTrackingPlaneTrack *plane_track,

View File

@ -3117,6 +3117,12 @@ static int join_tracks_exec(bContext *C, wmOperator *op)
if (tracking->stabilization.rot_track == track)
tracking->stabilization.rot_track = act_track;
/* TODO(sergey): Re-evaluate planes with auto-key. */
BKE_tracking_plane_tracks_replace_point_track(tracking,
track,
act_track);
BKE_tracking_track_free(track);
BLI_freelinkN(tracksbase, track);
}