static void slide_plane_marker_update_homographies(SpaceClip *sc, SlidePlaneMarkerData *data) { int framenr = ED_space_clip_get_clip_frame_number(sc); BKE_tracking_track_plane_from_existing_motion(data->plane_track, framenr); }
static int create_plane_track_tracks_exec(bContext *C, wmOperator *op) { SpaceClip *sc = CTX_wm_space_clip(C); MovieClip *clip = ED_space_clip_get_clip(sc); MovieTracking *tracking = &clip->tracking; MovieTrackingPlaneTrack *plane_track; ListBase *tracks_base = BKE_tracking_get_active_tracks(tracking); ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(tracking); int framenr = ED_space_clip_get_clip_frame_number(sc); plane_track = BKE_tracking_plane_track_add(tracking, plane_tracks_base, tracks_base, framenr); if (plane_track == NULL) { BKE_report(op->reports, RPT_ERROR, "Need at least 4 selected point tracks to create a plane"); return OPERATOR_CANCELLED; } else { BKE_tracking_tracks_deselect_all(tracks_base); plane_track->flag |= SELECT; clip->tracking.act_track = NULL; clip->tracking.act_plane_track = plane_track; /* Compute homoraphies and apply them on marker's corner, so we've got * quite nice motion from the very beginning. */ BKE_tracking_track_plane_from_existing_motion(plane_track, framenr); } WM_event_add_notifier(C, NC_MOVIECLIP | NA_EDITED, clip); return OPERATOR_FINISHED; }