[Bf-blender-cvs] [fa9ba68] master: Tracking: Update plane track solution after joining point tracks

Sergey Sharybin noreply at git.blender.org
Wed Jan 27 16:21:18 CET 2016


Commit: fa9ba68a2b4de3eb65de9a410ae4bd2186443b83
Author: Sergey Sharybin
Date:   Wed Jan 27 16:20:17 2016 +0100
Branches: master
https://developer.blender.org/rBfa9ba68a2b4de3eb65de9a410ae4bd2186443b83

Tracking: Update plane track solution after joining point tracks

Was in fact long term TODO, it all should work fine now.

===================================================================

M	source/blender/editors/space_clip/tracking_ops.c

===================================================================

diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c
index e5385b3..61bfa5b 100644
--- a/source/blender/editors/space_clip/tracking_ops.c
+++ b/source/blender/editors/space_clip/tracking_ops.c
@@ -35,6 +35,7 @@
 #include "DNA_space_types.h"
 
 #include "BLI_utildefines.h"
+#include "BLI_ghash.h"
 #include "BLI_math.h"
 #include "BLI_blenlib.h"
 
@@ -1509,6 +1510,7 @@ static int join_tracks_exec(bContext *C, wmOperator *op)
 	MovieClip *clip = ED_space_clip_get_clip(sc);
 	MovieTracking *tracking = &clip->tracking;
 	ListBase *tracksbase = BKE_tracking_get_active_tracks(tracking);
+	ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking);
 
 	MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
 	if (act_track == NULL) {
@@ -1516,6 +1518,8 @@ static int join_tracks_exec(bContext *C, wmOperator *op)
 		return OPERATOR_CANCELLED;
 	}
 
+	GSet *point_tracks = BLI_gset_ptr_new(__func__);
+
 	for (MovieTrackingTrack *track = tracksbase->first, *next_track;
 	     track != NULL;
 	     track = next_track)
@@ -1528,17 +1532,34 @@ static int join_tracks_exec(bContext *C, wmOperator *op)
 				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);
-
+			for (MovieTrackingPlaneTrack *plane_track = plane_tracks_base->first;
+			     plane_track != NULL;
+			     plane_track = plane_track->next)
+			{
+				if (BKE_tracking_plane_track_has_point_track(plane_track, track)) {
+					BKE_tracking_plane_track_replace_point_track(plane_track,
+					                                             track,
+					                                             act_track);
+					if ((plane_track->flag & PLANE_TRACK_AUTOKEY) == 0) {
+						BLI_gset_insert(point_tracks, plane_track);
+					}
+				}
+			}
 
 			BKE_tracking_track_free(track);
 			BLI_freelinkN(tracksbase, track);
 		}
 	}
 
+	GSetIterator gs_iter;
+	int framenr = ED_space_clip_get_clip_frame_number(sc);
+	GSET_ITER (gs_iter, point_tracks) {
+		MovieTrackingPlaneTrack *plane_track = BLI_gsetIterator_getKey(&gs_iter);
+		BKE_tracking_track_plane_from_existing_motion( plane_track, framenr);
+	}
+
+	BLI_gset_free(point_tracks, NULL);
+
 	WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip);
 
 	return OPERATOR_FINISHED;




More information about the Bf-blender-cvs mailing list