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) {
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) {
649 else if (deselect_all) {
681 ot->description =
"Select tracking markers";
682 ot->idname =
"CLIP_OT_select";
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;
810 ot->name =
"Box Select";
811 ot->description =
"Select markers using box selection";
812 ot->idname =
"CLIP_OT_select_box";
838 bool changed =
false;
881 for (
int i = 0; i < 4; i++) {
891 plane_track->flag |=
SELECT;
935 ot->name =
"Lasso Select";
936 ot->description =
"Select markers using lasso selection";
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;
1069 ot->name =
"Circle Select";
1070 ot->description =
"Select markers using circle selection";
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";
1121 ot->idname =
"CLIP_OT_select_all";
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";
1216 ot->description =
"Select all tracks from specified group";
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.
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Gabor Generate Gabor noise Gradient Generate interpolated color and intensity values based on the input vector Magic Generate a psychedelic color texture Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a point
@ 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
static int select_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int select_exec(bContext *C, wmOperator *op)
static int select_all_exec(bContext *C, wmOperator *op)
static int box_select_exec(bContext *C, wmOperator *op)
static int clip_lasso_select_exec(bContext *C, wmOperator *op)
static int circle_select_exec(bContext *C, wmOperator *op)
ccl_device_inline float4 select(const int4 mask, const float4 a, const float4 b)
VecBase< int32_t, 2 > int2
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)
struct MovieTracking tracking
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
@ 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)