Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2016-01-27 18:20:17 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2016-01-27 18:20:17 +0300
commitfa9ba68a2b4de3eb65de9a410ae4bd2186443b83 (patch)
tree4bcd5437899daf5be8b5697a968450625c6708ee /source/blender/editors/space_clip
parent28d599a0fc3f285675e757a802f3f752eaceb766 (diff)
Tracking: Update plane track solution after joining point tracks
Was in fact long term TODO, it all should work fine now.
Diffstat (limited to 'source/blender/editors/space_clip')
-rw-r--r--source/blender/editors/space_clip/tracking_ops.c31
1 files changed, 26 insertions, 5 deletions
diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c
index e5385b3e0bf..61bfa5b315b 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;