66 add_v2_v2v2(r_slider, pattern_corners[1], pattern_corners[2]);
70 const float pattern_corners[4][2],
78 const float slide_zone[2],
82 const float pixel_co[2] = {co[0] * width, co[1] * height},
83 pixel_slide_zone[2] = {slide_zone[0] * width, slide_zone[1] * height};
84 return square_f(pixel_co[0] - pixel_slide_zone[0]) +
square_f(pixel_co[1] - pixel_slide_zone[1]);
103 const MovieTrackingMarker *marker,
const float co[2],
int width,
int height,
int *r_corner)
105 float min_distance_squared =
FLT_MAX;
106 for (
int i = 0; i < 4; i++) {
110 if (distance_squared < min_distance_squared) {
111 min_distance_squared = distance_squared;
115 return min_distance_squared;
140 const float corners_offset[2],
141 const float corners[4][2],
145 const float co_px[2] = {co[0] * width, co[1] * height};
147 float prev_corner_co_px[2];
148 add_v2_v2v2(prev_corner_co_px, corners_offset, corners[3]);
149 prev_corner_co_px[0] *= width;
150 prev_corner_co_px[1] *= height;
152 float min_distance_squared =
FLT_MAX;
154 for (
int i = 0; i < 4; ++i) {
155 float corner_co_px[2];
156 add_v2_v2v2(corner_co_px, corners_offset, corners[i]);
157 corner_co_px[0] *= width;
158 corner_co_px[1] *= height;
161 co_px, corner_co_px, prev_corner_co_px);
163 if (distance_squared < min_distance_squared) {
164 min_distance_squared = distance_squared;
170 return min_distance_squared;
187 const float corners[4][2] = {
205 if (width == 0 || height == 0) {
212 const float distance_tolerance_px_squared =
math::square(12.0f / space_clip->
zoom *
222 if (
options->selected_only && !is_track_selected) {
232 if (!is_marker_enabled) {
242 if (!are_disabled_markers_visible && track != tracking_object->
active_track) {
247 float distance_squared;
251 current_pick.
track = track;
252 current_pick.
marker = marker;
255 track, marker, co, width, height);
277 int current_corner = -1;
279 marker, co, width, height, ¤t_corner);
290 if (is_track_selected) {
306 marker, co, width, height);
316 marker, co, width, height);
340 if (pick->
track ==
nullptr) {
371 result.distance_px_squared =
FLT_MAX;
377 const float slide_zone[2],
381 const float pixel_co[2] = {co[0] * width, co[1] * height};
382 const float pixel_slide_zone[2] = {slide_zone[0] * width, slide_zone[1] * height};
383 return square_f(pixel_co[0] - pixel_slide_zone[0]) +
square_f(pixel_co[1] - pixel_slide_zone[1]);
394 if (width == 0 || height == 0) {
402 const float distance_tolerance_px_squared =
math::square(12.0f / space_clip->
zoom *
417 for (
int i = 0; i < 4; i++) {
419 co, plane_marker->
corners[i], width, height);
428 const float zero_offset[2] = {0.0f, 0.0f};
430 co, zero_offset, plane_marker->
corners, width, height);
485 if (point_track_pick->
track ==
nullptr) {
498 if (can_slide_point_track && !can_slide_plane_track) {
501 else if (!can_slide_point_track && can_slide_plane_track) {
545 plane_track->flag &= ~SELECT;
639 plane_track->
flag &= ~SELECT;
649 else if (deselect_all) {
698 "Extend selection rather than clearing the existing selection");
703 "Deselect On Nothing",
704 "Deselect all when nothing under the cursor");
715 "Mouse location in normalized coordinates, 0.0 to 1.0 is within the image bounds",
737 bool changed =
false;
782 for (
int i = 0; i < 4; i++) {
785 plane_track->flag |=
SELECT;
788 plane_track->flag &= ~SELECT;
838 bool changed =
false;
881 for (
int i = 0; i < 4; i++) {
891 plane_track->flag |=
SELECT;
894 plane_track->flag &= ~SELECT;
935 ot->
name =
"Lasso Select";
937 ot->
idname =
"CLIP_OT_select_lasso";
957 const float offset[2],
958 const float ellipse[2])
963 x = (point[0] - offset[0]) * ellipse[0];
964 y = (point[1] - offset[1]) * ellipse[1];
966 return x * x + y * y < 1.0f;
970 const float offset[2],
971 const float ellipse[2])
984 bool changed =
false;
985 float zoomx, zoomy, offset[2], ellipse[2];
1006 ellipse[0] = width * zoomx / radius;
1007 ellipse[1] = height * zoomy / radius;
1040 for (
int i = 0; i < 4; i++) {
1043 plane_track->flag |=
SELECT;
1046 plane_track->flag &= ~SELECT;
1069 ot->
name =
"Circle Select";
1071 ot->
idname =
"CLIP_OT_select_circle";
1101 bool has_selection =
false;
1104 if (has_selection) {
1119 ot->
name =
"(De)select All";
1120 ot->
description =
"Change selection of all tracking markers";
1151 else if (group == 1) {
1152 ok = marker->
framenr != framenr;
1154 else if (group == 2) {
1157 else if (group == 3) {
1160 else if (group == 4) {
1163 else if (group == 5) {
1174 else if (group == 6) {
1181 track->pat_flag |=
SELECT;
1184 track->search_flag |=
SELECT;
1200 {0,
"KEYFRAMED", 0,
"Keyframed Tracks",
"Select all keyframed tracks"},
1201 {1,
"ESTIMATED", 0,
"Estimated Tracks",
"Select all estimated tracks"},
1202 {2,
"TRACKED", 0,
"Tracked Tracks",
"Select all tracked tracks"},
1203 {3,
"LOCKED", 0,
"Locked Tracks",
"Select all locked tracks"},
1204 {4,
"DISABLED", 0,
"Disabled Tracks",
"Select all disabled tracks"},
1208 "Tracks with Same Color",
1209 "Select all tracks with same color as active track"},
1210 {6,
"FAILED", 0,
"Failed Tracks",
"Select all tracks which failed to be reconstructed"},
1211 {0,
nullptr, 0,
nullptr,
nullptr},
1215 ot->
name =
"Select Grouped";
1217 ot->
idname =
"CLIP_OT_select_grouped";
1232 "Clear action to execute");
SpaceClip * CTX_wm_space_clip(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
void BKE_tracking_track_deselect(struct MovieTrackingTrack *track, int area)
void BKE_tracking_track_flag_clear(struct MovieTrackingTrack *track, int area, int flag)
#define PLANE_TRACK_VIEW_SELECTED(plane_track)
void BKE_tracking_track_flag_set(struct MovieTrackingTrack *track, int area, int flag)
struct MovieTrackingMarker * BKE_tracking_marker_get(struct MovieTrackingTrack *track, int framenr)
struct MovieTrackingObject * BKE_tracking_object_get_active(const struct MovieTracking *tracking)
void BKE_tracking_dopesheet_tag_update(struct MovieTracking *tracking)
void BKE_tracking_track_select(struct ListBase *tracksbase, struct MovieTrackingTrack *track, int area, bool extend)
#define TRACK_VIEW_SELECTED(sc, track)
struct MovieTrackingPlaneMarker * BKE_tracking_plane_marker_get(struct MovieTrackingPlaneTrack *plane_track, int framenr)
#define TRACK_AREA_SELECTED(track, area)
bool BLI_lasso_is_point_inside(blender::Span< blender::int2 > mcoords, int sx, int sy, int error_value)
void BLI_lasso_boundbox(rcti *rect, blender::Span< blender::int2 > mcoords)
#define LISTBASE_FOREACH(type, var, list)
MINLINE float square_f(float a)
float dist_squared_to_line_segment_v2(const float p[2], const float l1[2], const float l2[2])
MINLINE bool equals_v3v3(const float v1[3], const float v2[3]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void add_v2_v2(float r[2], const float a[2])
MINLINE void add_v2_v2v2(float r[2], const float a[2], const float b[2])
bool BLI_rctf_isect_pt_v(const struct rctf *rect, const float xy[2])
bool BLI_rcti_isect_pt(const struct rcti *rect, int x, int y)
void DEG_id_tag_update(ID *id, unsigned int flags)
void ED_clip_view_lock_state_restore_no_jump(const bContext *C, const ClipViewLockState *state)
void ED_clip_point_stable_pos(const SpaceClip *sc, const ARegion *region, float x, float y, float *xr, float *yr)
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)
void ED_space_clip_get_zoom(const SpaceClip *sc, const ARegion *region, float *r_zoomx, float *r_zoomy)
int ED_space_clip_get_clip_frame_number(const SpaceClip *sc)
void ED_clip_view_lock_state_store(const bContext *C, ClipViewLockState *state)
void ED_clip_select_all(const SpaceClip *sc, int action, bool *r_has_selection)
bool ED_space_clip_tracking_poll(bContext *C)
void ED_clip_point_stable_pos__reverse(const SpaceClip *sc, const ARegion *region, const float co[2], float r_co[2])
the reverse of ED_clip_point_stable_pos(), gets the marker region coords. better name here?...
eSelectOp ED_select_op_modal(eSelectOp sel_op, bool is_first)
#define SEL_OP_USE_PRE_DESELECT(sel_op)
std::string ED_select_circle_get_name(wmOperatorType *ot, PointerRNA *ptr)
Read Guarded memory(de)allocation.
@ OPTYPE_DEPENDS_ON_CURSOR
BLI_INLINE bool ED_space_clip_marker_is_visible(const SpaceClip *space_clip, const MovieTrackingObject *tracking_object, const MovieTrackingTrack *track, const MovieTrackingMarker *marker)
CCL_NAMESPACE_BEGIN struct Options options
ccl_device_inline float4 select(const int4 mask, const float4 a, const float4 b)
void RNA_float_get_array(PointerRNA *ptr, const char *name, float *values)
int RNA_int_get(PointerRNA *ptr, const char *name)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void RNA_float_set_array(PointerRNA *ptr, const char *name, const float *values)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_float_vector(StructOrFunctionRNA *cont_, const char *identifier, const int len, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
float pattern_corners[4][2]
MovieTrackingPlaneTrack * active_plane_track
MovieTrackingTrack * active_track
float distance_px_squared
MovieTrackingPlaneTrack * plane_track
MovieTrackingPlaneMarker * plane_marker
MovieTrackingMarker * marker
eTrackPickAreaDetail area_detail
float distance_px_squared
MovieTrackingTrack * track
PlaneTrackPick plane_track_pick
PointTrackPick point_track_pick
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
int(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
std::string(* get_name)(wmOperatorType *ot, PointerRNA *ptr)
int(* invoke)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
int(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
void(* cancel)(bContext *C, wmOperator *op)
@ TRACK_PICK_AREA_DETAIL_EDGE
@ TRACK_PICK_AREA_DETAIL_POSITION
@ TRACK_PICK_AREA_DETAIL_TILT_SIZE
@ TRACK_PICK_AREA_DETAIL_NONE
@ TRACK_PICK_AREA_DETAIL_SIZE
@ TRACK_PICK_AREA_DETAIL_OFFSET
BLI_INLINE bool ed_tracking_pick_can_slide(const SpaceClip *space_clip, const TrackingPick *pick)
BLI_INLINE TrackPickOptions ed_tracking_pick_options_defaults()
static int select_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static float mouse_to_offset_distance_squared(const MovieTrackingTrack *track, const MovieTrackingMarker *marker, const float co[2], int width, int height)
static float mouse_to_closest_search_edge_distance_squared(const MovieTrackingMarker *marker, const float co[2], int width, int height)
static int select_exec(bContext *C, wmOperator *op)
static float mouse_to_slide_zone_distance_squared(const float co[2], const float slide_zone[2], int width, int height)
BLI_INLINE PlaneTrackPick plane_track_pick_make_null()
TrackingPick ed_tracking_pick_closest(const TrackPickOptions *options, bContext *C, const float co[2])
static float mouse_to_closest_pattern_edge_distance_squared(const MovieTrackingMarker *marker, const float co[2], int width, int height)
static float mouse_to_plane_slide_zone_distance_squared(const float co[2], const float slide_zone[2], int width, int height)
static int select_all_exec(bContext *C, wmOperator *op)
static float mouse_to_closest_pattern_corner_distance_squared(const MovieTrackingMarker *marker, const float co[2], int width, int height, int *r_corner)
void CLIP_OT_select_circle(wmOperatorType *ot)
void ed_tracking_deselect_all_tracks(ListBase *tracks_base)
static int box_select_exec(bContext *C, wmOperator *op)
static float mouse_to_search_corner_distance_squared(const MovieTrackingMarker *marker, const float co[2], int corner, int width, int height)
static int clip_lasso_select_exec(bContext *C, wmOperator *op)
static float mouse_to_closest_corners_edge_distance_squared(const float co[2], const float corners_offset[2], const float corners[4][2], int width, int height)
static int do_lasso_select_marker(bContext *C, const Span< int2 > mcoords, bool select)
void CLIP_OT_select_lasso(wmOperatorType *ot)
void CLIP_OT_select_all(wmOperatorType *ot)
static int circle_select_exec(bContext *C, wmOperator *op)
bool ED_clip_can_select(bContext *C)
static bool tracking_should_prefer_point_track(bContext *C, const PointTrackPick *point_track_pick, const PlaneTrackPick *plane_track_pick)
void CLIP_OT_select_box(wmOperatorType *ot)
BLI_INLINE TrackingPick tracking_pick_make_null()
static int point_inside_ellipse(const float point[2], const float offset[2], const float ellipse[2])
static int marker_inside_ellipse(const MovieTrackingMarker *marker, const float offset[2], const float ellipse[2])
bool ed_tracking_plane_track_pick_can_slide(const PlaneTrackPick *pick)
static float mouse_to_tilt_distance_squared(const MovieTrackingMarker *marker, const float co[2], int width, int height)
void CLIP_OT_select_grouped(wmOperatorType *ot)
PlaneTrackPick ed_tracking_pick_plane_track(const TrackPickOptions *options, bContext *C, const float co[2])
BLI_INLINE PointTrackPick point_track_pick_make_null()
static int select_grouped_exec(bContext *C, wmOperator *op)
void CLIP_OT_select(wmOperatorType *ot)
void ed_tracking_deselect_all_plane_tracks(ListBase *plane_tracks_base)
static void slide_marker_tilt_slider(const float marker_pos[2], const float pattern_corners[4][2], float r_slider[2])
PointTrackPick ed_tracking_pick_point_track(const TrackPickOptions *options, bContext *C, const float co[2])
bool ed_tracking_point_track_pick_can_slide(const SpaceClip *space_clip, const PointTrackPick *pick)
static void slide_marker_tilt_slider_relative(const float pattern_corners[4][2], float r_slider[2])
static bool select_poll(bContext *C)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
bool WM_gesture_is_modal_first(const wmGesture *gesture)
int WM_gesture_box_invoke(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_circle_invoke(bContext *C, wmOperator *op, const wmEvent *event)
Array< int2 > WM_gesture_lasso_path_to_array(bContext *, wmOperator *op)
int WM_gesture_box_modal(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_circle_modal(bContext *C, wmOperator *op, const wmEvent *event)
int WM_gesture_lasso_modal(bContext *C, wmOperator *op, const wmEvent *event)
void WM_gesture_lasso_cancel(bContext *C, wmOperator *op)
int WM_gesture_lasso_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void WM_operator_properties_border_to_rcti(wmOperator *op, rcti *r_rect)
void WM_operator_properties_gesture_box(wmOperatorType *ot)
void WM_operator_properties_select_operation_simple(wmOperatorType *ot)
void WM_operator_properties_gesture_lasso(wmOperatorType *ot)
void WM_operator_properties_gesture_circle(wmOperatorType *ot)
void WM_operator_properties_select_all(wmOperatorType *ot)