From b35743d39f574717731899669117d8de79fce082 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Wed, 22 Apr 2015 02:10:13 +0500 Subject: Tracking: Add missing plane track remapping when joining two point tracks --- source/blender/blenkernel/BKE_tracking.h | 7 ++++++ source/blender/blenkernel/intern/tracking.c | 31 ++++++++++++++++++++++++ source/blender/editors/space_clip/tracking_ops.c | 6 +++++ 3 files changed, 44 insertions(+) diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h index 5af05f4ca80..ea56c084fb5 100644 --- a/source/blender/blenkernel/BKE_tracking.h +++ b/source/blender/blenkernel/BKE_tracking.h @@ -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); diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c index e7dccc09376..e3f04296f50 100644 --- a/source/blender/blenkernel/intern/tracking.c +++ b/source/blender/blenkernel/intern/tracking.c @@ -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, diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index db8881a865e..5c88ad8b3f7 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -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); } -- cgit v1.2.3