46 if (plane_track ==
nullptr) {
71 ot->
name =
"Create Plane Track";
72 ot->
description =
"Create new plane track out of selected point tracks";
73 ot->
idname =
"CLIP_OT_create_plane_track";
120 if (r_corner !=
nullptr) {
139 if (width == 0 || height == 0) {
149 customdata = MEM_cnew<SlidePlaneMarkerData>(
"slide plane marker data");
157 customdata->
width = width;
158 customdata->
height = height;
221 float dx, dy, mdelta[2];
222 int next_corner_index, prev_corner_index, diag_corner_index;
223 const float *next_corner, *prev_corner, *diag_corner;
224 float next_edge[2], prev_edge[2], next_diag_edge[2], prev_diag_edge[2];
226 switch (event->
type) {
232 data->accurate =
event->val ==
KM_PRESS;
236 mdelta[0] =
event->mval[0] - data->previous_mval[0];
237 mdelta[1] =
event->mval[1] - data->previous_mval[1];
239 dx = mdelta[0] / data->width / sc->
zoom;
240 dy = mdelta[1] / data->height / sc->
zoom;
242 if (data->accurate) {
247 data->corner[0] = data->previous_corner[0] + dx;
248 data->corner[1] = data->previous_corner[1] + dy;
266 next_corner_index = (data->corner_index + 1) % 4;
267 prev_corner_index = (data->corner_index + 3) % 4;
268 diag_corner_index = (data->corner_index + 2) % 4;
270 next_corner = data->plane_marker->corners[next_corner_index];
271 prev_corner = data->plane_marker->corners[prev_corner_index];
272 diag_corner = data->plane_marker->corners[diag_corner_index];
276 sub_v2_v2v2(next_diag_edge, prev_corner, diag_corner);
277 sub_v2_v2v2(prev_diag_edge, diag_corner, next_corner);
279 if (
cross_v2v2(prev_edge, next_edge) < 0.0f) {
283 if (
cross_v2v2(next_diag_edge, prev_edge) < 0.0f) {
287 if (
cross_v2v2(next_edge, prev_diag_edge) < 0.0f) {
291 data->previous_mval[0] =
event->mval[0];
292 data->previous_mval[1] =
event->mval[1];
293 copy_v2_v2(data->previous_corner, data->corner);
304 data->plane_marker->flag &= ~PLANE_MARKER_TRACKED;
338 ot->
name =
"Slide Plane Marker";
340 ot->
idname =
"CLIP_OT_slide_plane_marker";
SpaceClip * CTX_wm_space_clip(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
void BKE_report(ReportList *reports, eReportType type, const char *message)
struct MovieTrackingPlaneTrack * BKE_tracking_plane_track_add(struct MovieTracking *tracking, struct ListBase *plane_tracks_base, struct ListBase *tracks, int framenr)
struct MovieTrackingObject * BKE_tracking_object_get_active(const struct MovieTracking *tracking)
void BKE_tracking_track_plane_from_existing_motion(struct MovieTrackingPlaneTrack *plane_track, int start_frame)
void BKE_tracking_tracks_deselect_all(struct ListBase *tracksbase)
struct MovieTrackingPlaneMarker * BKE_tracking_plane_marker_ensure(struct MovieTrackingPlaneTrack *plane_track, int framenr)
float closest_to_line_v2(float r_close[2], const float p[2], const float l1[2], const float l2[2])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE float cross_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
void DEG_id_tag_update(ID *id, unsigned int flags)
MovieClip * ED_space_clip_get_clip(const SpaceClip *sc)
void ED_clip_mouse_pos(const SpaceClip *sc, const ARegion *region, const int mval[2], float r_co[2])
void ED_space_clip_get_size(const SpaceClip *sc, int *r_width, int *r_height)
int ED_space_clip_get_clip_frame_number(const SpaceClip *sc)
bool ED_space_clip_tracking_poll(bContext *C)
Read Guarded memory(de)allocation.
CCL_NAMESPACE_BEGIN struct Options options
void MEM_freeN(void *vmemh)
MovieTrackingPlaneTrack * active_plane_track
MovieTrackingTrack * active_track
MovieTrackingPlaneTrack * plane_track
MovieTrackingPlaneTrack * plane_track
MovieTrackingPlaneMarker * plane_marker
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
struct ReportList * reports
PlaneTrackPick ed_tracking_pick_plane_track(const TrackPickOptions *options, struct bContext *C, const float co[2])
BLI_INLINE bool ed_tracking_plane_track_pick_empty(const PlaneTrackPick *pick)
void clip_tracking_hide_cursor(bContext *C)
void clip_tracking_show_cursor(bContext *C)
bool ed_tracking_plane_track_pick_can_slide(const PlaneTrackPick *pick)
BLI_INLINE TrackPickOptions ed_tracking_pick_options_defaults()
void CLIP_OT_create_plane_track(wmOperatorType *ot)
static int slide_plane_marker_modal(bContext *C, wmOperator *op, const wmEvent *event)
static MovieTrackingPlaneTrack * tracking_plane_marker_check_slide(bContext *C, const wmEvent *event, int *r_corner)
static int slide_plane_marker_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void slide_plane_marker_update_homographies(SpaceClip *sc, SlidePlaneMarkerData *data)
void CLIP_OT_slide_plane_marker(wmOperatorType *ot)
static int create_plane_track_tracks_exec(bContext *C, wmOperator *op)
static void cancel_mouse_slide_plane_marker(SlidePlaneMarkerData *data)
static void free_slide_plane_marker_data(SlidePlaneMarkerData *data)
static SlidePlaneMarkerData * slide_plane_marker_customdata(bContext *C, const wmEvent *event)
int WM_userdef_event_type_from_keymap_type(int kmitype)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)