diff options
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/space_clip/tracking_ops.c | 39 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_conversions.c | 52 | ||||
-rw-r--r-- | source/blender/editors/transform/transform_generics.c | 11 |
3 files changed, 79 insertions, 23 deletions
diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c index 70158c23e25..59101b24ad8 100644 --- a/source/blender/editors/space_clip/tracking_ops.c +++ b/source/blender/editors/space_clip/tracking_ops.c @@ -812,6 +812,32 @@ static void cancel_mouse_slide(SlideMarkerData *data) } } +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); + MovieTrackingPlaneTrack *plane_track; + ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(&clip->tracking); + int framenr = ED_space_clip_get_clip_frame_number(sc); + + for (plane_track = plane_tracks_base->first; + plane_track; + plane_track = plane_track->next) + { + if ((plane_track->flag & PLANE_TRACK_AUTOKEY) == 0) { + int i; + for (i = 0; i < plane_track->point_tracksnr; i++) { + if (plane_track->point_tracks[i] == data->track) { + BKE_tracking_track_plane_from_existing_motion(plane_track, framenr); + break; + } + } + } + } + } +} + static void free_slide_data(SlideMarkerData *data) { if (data->old_markers) @@ -1007,6 +1033,7 @@ static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event) case LEFTMOUSE: if (event->val == KM_RELEASE) { + apply_mouse_slide(C, op->customdata); free_slide_data(op->customdata); show_cursor(C); @@ -1267,7 +1294,7 @@ static void track_markers_updatejob(void *tmv) BKE_tracking_context_sync(tmj->context); } -static void track_markers_freejob(void *tmv) +static void track_markers_endjob(void *tmv) { TrackMarkersJob *tmj = (TrackMarkersJob *)tmv; @@ -1276,10 +1303,15 @@ static void track_markers_freejob(void *tmv) ED_update_for_newframe(tmj->main, tmj->scene, 0); BKE_tracking_context_sync(tmj->context); - BKE_tracking_context_free(tmj->context); + BKE_tracking_context_finish(tmj->context); WM_main_add_notifier(NC_SCENE | ND_FRAME, tmj->scene); +} +static void track_markers_freejob(void *tmv) +{ + TrackMarkersJob *tmj = (TrackMarkersJob *)tmv; + BKE_tracking_context_free(tmj->context); MEM_freeN(tmj); } @@ -1333,6 +1365,7 @@ static int track_markers_exec(bContext *C, wmOperator *op) } BKE_tracking_context_sync(context); + BKE_tracking_context_finish(context); BKE_tracking_context_free(context); /* update scene current frame to the lastes tracked frame */ @@ -1389,7 +1422,7 @@ static int track_markers_invoke(bContext *C, wmOperator *op, const wmEvent *UNUS else WM_jobs_timer(wm_job, 0.2, NC_MOVIECLIP | NA_EVALUATED, 0); - WM_jobs_callbacks(wm_job, track_markers_startjob, NULL, track_markers_updatejob, NULL); + WM_jobs_callbacks(wm_job, track_markers_startjob, NULL, track_markers_updatejob, track_markers_endjob); G.is_break = FALSE; diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 73c0b3c0ff4..deda46cfe4f 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -5250,6 +5250,48 @@ void autokeyframe_pose_cb_func(bContext *C, Scene *scene, View3D *v3d, Object *o } } +static void special_aftertrans_update__movieclip(bContext *C, TransInfo *t) +{ + SpaceClip *sc = t->sa->spacedata.first; + MovieClip *clip = ED_space_clip_get_clip(sc); + MovieTrackingPlaneTrack *plane_track; + ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(&clip->tracking); + int framenr = ED_space_clip_get_clip_frame_number(sc); + + for (plane_track = plane_tracks_base->first; + plane_track; + plane_track = plane_track->next) + { + bool do_update = false; + + do_update |= (plane_track->flag & SELECT) != 0; + if (do_update == false) { + if ((plane_track->flag & PLANE_TRACK_AUTOKEY) == 0) { + int i; + for (i = 0; i < plane_track->point_tracksnr; i++) { + MovieTrackingTrack *track = plane_track->point_tracks[i]; + + if (TRACK_VIEW_SELECTED(sc, track)) { + do_update = true; + break; + } + } + } + } + + if (do_update) { + BKE_tracking_track_plane_from_existing_motion(plane_track, framenr); + } + } + + if (t->scene->nodetree) { + /* tracks can be used for stabilization nodes, + * flush update for such nodes */ + nodeUpdateID(t->scene->nodetree, &clip->id); + WM_event_add_notifier(C, NC_SCENE | ND_NODES, NULL); + } +} + static void special_aftertrans_update__mask(bContext *C, TransInfo *t) { Mask *mask = NULL; @@ -5405,15 +5447,7 @@ void special_aftertrans_update(bContext *C, TransInfo *t) } else if (t->spacetype == SPACE_CLIP) { if (t->options & CTX_MOVIECLIP) { - SpaceClip *sc = t->sa->spacedata.first; - MovieClip *clip = ED_space_clip_get_clip(sc); - - if (t->scene->nodetree) { - /* tracks can be used for stabilization nodes, - * flush update for such nodes */ - nodeUpdateID(t->scene->nodetree, &clip->id); - WM_event_add_notifier(C, NC_SCENE | ND_NODES, NULL); - } + special_aftertrans_update__movieclip(C, t); } else if (t->options & CTX_MASK) { special_aftertrans_update__mask(C, t); diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 359f6425126..5c8e3f9e58f 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -659,9 +659,7 @@ static void recalcData_spaceclip(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); - ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(&clip->tracking); MovieTrackingTrack *track; - MovieTrackingPlaneTrack *plane_track; int framenr = ED_space_clip_get_clip_frame_number(sc); flushTransTracking(t); @@ -692,15 +690,6 @@ static void recalcData_spaceclip(TransInfo *t) track = track->next; } - for (plane_track = plane_tracks_base->first; - plane_track; - plane_track = plane_track->next) - { - if (plane_track->flag & SELECT) { - BKE_tracking_track_plane_from_existing_motion(plane_track, framenr); - } - } - DAG_id_tag_update(&clip->id, 0); } else if (t->options & CTX_MASK) { |