57 int height = (frame == cfra) ? 22 : 10;
58 int x = (frame - sfra) * framelen;
86 const int marker_index)
93 BLI_assert(marker_index < plane_track->markersnr);
102 const int marker_index)
117 const int marker_index)
124 BLI_assert(marker_index < plane_track->markersnr);
134 int *points, totseg,
i, a;
135 float sfra = scene->
r.
sfra, efra = scene->
r.
efra, framelen = region->
winx / (efra - sfra + 1);
160 while (a < markersnr) {
163 if (marker_framenr >=
i) {
167 if (a < markersnr - 1 &&
176 a =
min_ii(a, markersnr - 1);
202 int n = reconstruction->
camnr;
207 for (
i = sfra, a = 0;
i <= efra;
i++) {
211 if (cameras[a].framenr ==
i) {
215 if (cameras[a].framenr >
i) {
268 bool full_redraw =
false;
270 if (tracking->
stats) {
281 float fill_color[4] = {0.0f, 0.0f, 0.0f, 0.6f};
312 bool use_filter =
true;
342 x,
y, ibuf, &frame, zoomx * width / ibuf->
x, zoomy * height / ibuf->
y);
347 SpaceClip *sc,
ARegion *region,
int width,
int height,
float zoomx,
float zoomy)
372 float viewport_size[4];
428 int point_index =
count;
434 point_index += direction;
435 current_frame += direction;
446 uint position_attribute,
447 const int start_point,
448 const int num_points)
450 if (num_points == 0) {
454 for (
int i = 0;
i < num_points;
i++) {
462 uint position_attribute,
463 const int start_point,
464 const int num_points)
467 for (
int i = 0;
i < num_points;
i++) {
477 uint position_attribute,
478 const int start_point,
479 const int num_points)
481 if (num_points < 2) {
485 for (
int i = 0;
i < num_points;
i++) {
494#define MAX_STATIC_PATH 64
514 if (num_points_before == 0 && num_points_after == 0) {
518 int num_all_points = num_points_before + num_points_after;
520 if (num_points_before != 0 && num_points_after != 0) {
524 const int path_start_index =
count - num_points_before + 1;
525 const int path_center_index =
count;
576 if (path != path_static) {
580#undef MAX_STATIC_PATH
586 const float marker_pos[2],
592 bool show_search =
false;
595 px[0] = 1.0f / width / sc->
zoom;
596 px[1] = 1.0f / height / sc->
zoom;
704 const bool is_track_active,
705 const bool is_area_selected,
706 const float color[3],
707 const float selected_color[3])
710 if (is_track_active) {
713 else if (is_area_selected) {
721 if (is_track_active) {
724 else if (is_area_selected) {
739 const float marker_pos[2],
747 bool show_search =
false;
748 float col[3], scol[3];
754 px[0] = 1.0f / width / sc->
zoom;
755 px[1] = 1.0f / height / sc->
zoom;
895 for (
int i = 0;
i < 4;
i++) {
896 int next = (
i + 1) % 4;
898 len_sq =
min_ff(cur_len, len_sq);
901 return sqrtf(len_sq);
905 float x,
float y,
float dx,
float dy,
int outline,
const float px[2],
uint pos)
921 float x,
float y,
float dx,
float dy,
int outline,
const float px[2],
uint pos)
943 const float marker_pos[2],
951 float dx, dy, patdx, patdy, searchdx, searchdy;
953 float col[3], scol[3], px[2], side;
974 dx = 6.0f / width / sc->
zoom;
975 dy = 6.0f / height / sc->
zoom;
984 px[0] = 1.0f / sc->
zoom / width / sc->
scale;
985 px[1] = 1.0f / sc->
zoom / height / sc->
scale;
1002 float pat_min[2], pat_max[2];
1011 for (
int i = 0;
i < 4;
i++) {
1044 const float marker_pos[2],
1051 char str[128] = {0},
state[64] = {0};
1052 float dx = 0.0f, dy = 0.0f, fontsize,
pos[3];
1084 float pat_min[2], pat_max[2];
1091 pos[0] = (marker_pos[0] + dx) * width;
1092 pos[1] = (marker_pos[1] + dy) * height;
1098 pos[1] =
pos[1] * zoomy - fontsize;
1147 const float start_corner[2],
1148 const float end_corner[2],
1156 direction[0] *= width;
1157 direction[1] *= height;
1160 direction[0] /= width;
1161 direction[1] /= height;
1168 gl_matrix[0][0] = matrix[0][0];
1169 gl_matrix[0][1] = matrix[0][1];
1170 gl_matrix[0][2] = 0.0f;
1171 gl_matrix[0][3] = matrix[0][2];
1173 gl_matrix[1][0] = matrix[1][0];
1174 gl_matrix[1][1] = matrix[1][1];
1175 gl_matrix[1][2] = 0.0f;
1176 gl_matrix[1][3] = matrix[1][2];
1178 gl_matrix[2][0] = 0.0f;
1179 gl_matrix[2][1] = 0.0f;
1180 gl_matrix[2][2] = 1.0f;
1181 gl_matrix[2][3] = 0.0f;
1183 gl_matrix[3][0] = matrix[2][0];
1184 gl_matrix[3][1] = matrix[2][1];
1185 gl_matrix[3][2] = 0.0f;
1186 gl_matrix[3][3] = matrix[2][2];
1197 if (image ==
nullptr) {
1208 if (display_buffer) {
1209 float frame_corners[4][2] = {{0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 1.0f}, {0.0f, 1.0f}};
1210 float perspective_matrix[3][3];
1211 float gl_matrix[4][4];
1212 bool transparent =
false;
1214 frame_corners, plane_marker->
corners, perspective_matrix);
1285 bool is_active_track,
1291 bool is_selected_track = (plane_track->
flag &
SELECT) != 0;
1292 const bool has_image = plane_track->
image !=
nullptr &&
1294 const bool draw_plane_quad = !has_image || plane_track->
image_opacity == 0.0f;
1296 float color[3], selected_color[3];
1298 px[0] = 1.0f / width / sc->
zoom;
1299 px[1] = 1.0f / height / sc->
zoom;
1302 if (draw_outline ==
false) {
1306 if (draw_plane_quad || is_selected_track) {
1312 float viewport_size[4];
1319 if (is_selected_track) {
1323 if (draw_plane_quad) {
1324 const bool stipple = !draw_outline && tiny;
1325 const bool thick = draw_outline && !tiny;
1353 if (!draw_outline) {
1390 if (is_selected_track) {
1400 for (
int i = 0;
i < 4;
i++) {
1428 bool is_active_track,
1433 sc, scene, plane_track, plane_marker, is_active_track,
false, width, height);
1440 bool is_active_track,
1449 draw_plane_marker(sc, scene, plane_track, plane_marker, is_active_track, width, height);
1469 float *marker_pos =
nullptr, *fp, *active_pos =
nullptr, cur_pos[2];
1492 sc, scene, plane_track, framenr, plane_track == active_plane_track, width, height);
1527 if (track == active_track) {
1577 const int act = track == active_track;
1601 draw_marker_areas(sc, active_track, marker, cur_pos, width, height, 1, 1, position);
1607 float pos[4], vec[4], mat[4][4], aspy;
1628 pos[0] = (
pos[0] / (
pos[3] * 2.0f) + 0.5f) * width;
1629 pos[1] = (
pos[1] / (
pos[3] * 2.0f) + 0.5f) * height * aspy;
1633 if (npos[0] >= 0.0f && npos[1] >= 0.0f && npos[0] <= width && npos[1] <= height * aspy) {
1634 vec[0] = (marker->
pos[0] + track->offset[0]) * width;
1635 vec[1] = (marker->
pos[1] + track->offset[1]) * height * aspy;
1649 immVertex2f(position, npos[0] / width, npos[1] / (height * aspy));
1672 const int act = track == active_track;
1676 draw_marker_texts(sc, track, marker, cur_pos, act, width, height, zoomx, zoomy);
1702 float tpos[2], grid[11][11][2];
1706 float dx = float(width) / n, dy = float(height) / n * aspy;
1707 float offsx = 0.0f, offsy = 0.0f;
1732 float val[4][2], idx[4][2];
1735 for (
int a = 0; a < 4; a++) {
1744 for (
int i = 0;
i <= n;
i++) {
1745 for (
int j = 0; j <= n; j++) {
1746 if (
i == 0 || j == 0 ||
i == n || j == n) {
1747 const float pos[2] = {dx * j, dy *
i};
1750 for (
int a = 0; a < 4; a++) {
1754 ok = tpos[a % 2] < val[a][a % 2];
1757 ok = tpos[a % 2] > val[a][a % 2];
1772 for (
int a = 0; a < 4; a++) {
1773 const float pos[2] = {idx[a][0] * dx, idx[a][1] * dy};
1780 dx = (
max[0] -
min[0]) / n;
1781 dy = (
max[1] -
min[1]) / n;
1783 for (
int i = 0;
i <= n;
i++) {
1784 for (
int j = 0; j <= n; j++) {
1785 const float pos[2] = {
min[0] + dx * j,
min[1] + dy *
i};
1789 grid[
i][j][0] /= width;
1790 grid[
i][j][1] /= height * aspy;
1796 for (
int i = 0;
i <= n;
i++) {
1799 for (
int j = 0; j <= n; j++) {
1806 for (
int j = 0; j <= n; j++) {
1809 for (
int i = 0;
i <= n;
i++) {
1828 layer = layer->
next;
1844 float pos[2], npos[2], dpos[2],
len;
1848 pos[1] = (stroke->
points[
i].
y + offsy) * height * aspy;
1850 npos[0] = (stroke->
points[
i + 1].
x + offsx) * width;
1851 npos[1] = (stroke->
points[
i + 1].
y + offsy) * height * aspy;
1867 for (
int j = 0; j <=
steps; j++) {
1869 immVertex2f(position, tpos[0] / width, tpos[1] / (height * aspy));
1884 stroke = stroke->
next;
1887 frame = frame->
next;
1890 layer = layer->
next;
1903 ImBuf *ibuf =
nullptr;
1917 float translation[2];
1919 float smat[4][4], ismat[4][4];
1925 if (ibuf !=
nullptr && width != ibuf->
x) {
1936 smat[0][0] = 1.0f / width;
1937 smat[1][1] = 1.0f / height;
1962 if (width && height) {
1997 if (is_track_source) {
void ED_draw_imbuf_ctx(const bContext *C, ImBuf *ibuf, float x, float y, bool use_filter, float zoom_x, float zoom_y)
Scene * CTX_data_scene(const bContext *C)
SpaceClip * CTX_wm_space_clip(const bContext *C)
ImBuf * BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **r_lock)
void BKE_image_release_ibuf(Image *ima, ImBuf *ibuf, void *lock)
bool BKE_image_has_ibuf(Image *ima, ImageUser *iuser)
void BKE_movieclip_get_cache_segments(struct MovieClip *clip, const struct MovieClipUser *user, int *r_totseg, int **r_points)
void BKE_tracking_stabilization_data_to_mat4(int width, int height, float aspect, float translation[2], float scale, float angle, float mat[4][4])
struct MovieTrackingMarker * BKE_tracking_marker_get(struct MovieTrackingTrack *track, int framenr)
struct MovieTrackingObject * BKE_tracking_object_get_active(const struct MovieTracking *tracking)
struct MovieTrackingMarker * BKE_tracking_marker_get_exact(struct MovieTrackingTrack *track, int framenr)
void BKE_tracking_distort_v2(struct MovieTracking *tracking, int image_width, int image_height, const float co[2], float r_co[2])
#define TRACK_VIEW_SELECTED(sc, track)
void BKE_tracking_marker_pattern_minmax(const struct MovieTrackingMarker *marker, float min[2], float max[2])
struct MovieTrackingPlaneMarker * BKE_tracking_plane_marker_get(struct MovieTrackingPlaneTrack *plane_track, int framenr)
void BKE_tracking_get_projection_matrix(struct MovieTracking *tracking, struct MovieTrackingObject *tracking_object, int framenr, int winx, int winy, float mat[4][4])
void BKE_tracking_undistort_v2(struct MovieTracking *tracking, int image_width, int image_height, const float co[2], float r_co[2])
void BKE_tracking_homography_between_two_quads(float reference_corners[4][2], float corners[4][2], float H[3][3])
void BLF_size(int fontid, float size)
void BLF_draw(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_NONNULL(2)
int BLF_height_max(int fontid) ATTR_WARN_UNUSED_RESULT
void BLF_color4ubv(int fontid, const unsigned char rgba[4])
void BLF_position(int fontid, float x, float y, float z)
#define LISTBASE_FOREACH(type, var, list)
MINLINE int min_ii(int a, int b)
MINLINE float min_ff(float a, float b)
int isect_point_quad_v2(const float p[2], const float v1[2], const float v2[2], const float v3[2], const float v4[2])
void mul_v4_m4v4(float r[4], const float mat[4][4], const float v[4])
void mul_m4_v3(const float M[4][4], float r[3])
#define mul_m4_series(...)
bool invert_m4_m4(float inverse[4][4], const float mat[4][4])
void unit_m4(float m[4][4])
MINLINE float len_squared_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE float len_squared_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void sub_v2_v2(float r[2], const float a[2])
MINLINE float len_v2v2(const float v1[2], const float v2[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void mul_v2_fl(float r[2], float f)
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void copy_v3_v3(float r[3], const float a[3])
void minmax_v2v2_v2(float min[2], float max[2], const float vec[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])
MINLINE void sub_v2_v2v2(float r[2], const float a[2], const float b[2])
MINLINE void zero_v2(float r[2])
MINLINE float normalize_v2(float n[2])
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
MINLINE void mul_v2_v2fl(float r[2], const float a[2], float f)
void BLI_rctf_init(struct rctf *rect, float xmin, float xmax, float ymin, float ymax)
#define SNPRINTF(dst, format,...)
char * STRNCPY(char(&dst)[N], const char *src)
#define INIT_MINMAX2(min, max)
#define UNUSED_VARS_NDEBUG(...)
@ MCLIP_PROXY_RENDER_SIZE_100
@ MCLIP_PROXY_RENDER_SIZE_FULL
@ MCLIP_PROXY_RENDER_UNDISTORT
@ TRACKING_2D_STABILIZATION
MovieClip * ED_space_clip_get_clip(const SpaceClip *sc)
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_point_undistorted_pos(const SpaceClip *sc, const float co[2], float r_co[2])
ImBuf * ED_space_clip_get_buffer(const SpaceClip *sc)
ImBuf * ED_space_clip_get_stable_buffer(const SpaceClip *sc, float loc[2], float *scale, float *angle)
void ED_mask_draw_frames(Mask *mask, ARegion *region, int cfra, int sfra, int efra)
void ED_region_info_draw(ARegion *region, const char *text, const float fill_color[4], bool full_redraw)
void ED_region_cache_draw_cached_segments(ARegion *region, int num_segments, const int *points, int sfra, int efra)
void ED_region_cache_draw_background(ARegion *region)
void ED_region_cache_draw_curfra_label(int framenr, float x, float y)
void ED_region_grid_draw(ARegion *region, float zoomx, float zoomy, float x0, float y0)
void ED_region_image_metadata_draw(int x, int y, const ImBuf *ibuf, const rctf *frame, float zoomx, float zoomy)
void GPU_matrix_translate_2fv(const float vec[2])
void GPU_matrix_scale_2f(float x, float y)
#define GPU_matrix_mul(x)
void GPU_matrix_translate_2f(float x, float y)
@ GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR
@ GPU_SHADER_3D_UNIFORM_COLOR
@ GPU_SHADER_3D_POINT_UNIFORM_COLOR
@ GPU_SHADER_3D_IMAGE_COLOR
void GPU_blend(eGPUBlend blend)
void GPU_line_width(float width)
void GPU_logic_op_xor_set(bool enable)
void GPU_point_size(float size)
void GPU_viewport_size_get_f(float coords[4])
GPUTexture * GPU_texture_create_2d(const char *name, int width, int height, int mip_len, eGPUTextureFormat format, eGPUTextureUsage usage, const float *data)
void GPU_texture_free(GPUTexture *texture)
void GPU_texture_unbind(GPUTexture *texture)
@ GPU_TEXTURE_USAGE_SHADER_READ
void GPU_texture_filter_mode(GPUTexture *texture, bool use_filter)
void GPU_texture_update(GPUTexture *texture, eGPUDataFormat data_format, const void *data)
unsigned char * IMB_display_buffer_acquire(ImBuf *ibuf, const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, void **cache_handle)
void IMB_display_buffer_release(void *cache_handle)
void IMB_freeImBuf(ImBuf *ibuf)
Read Guarded memory(de)allocation.
void UI_GetThemeColor3fv(int colorid, float col[3])
@ TH_PATH_KEYFRAME_BEFORE
void UI_GetThemeColor4fv(int colorid, float col[4])
void UI_GetThemeColorShade4fv(int colorid, int offset, float col[4])
void UI_GetThemeColorShade4ubv(int colorid, int offset, unsigned char col[4])
void UI_FontThemeColor(int fontid, int colorid)
void UI_view2d_view_to_region_fl(const View2D *v2d, float x, float y, float *r_region_x, float *r_region_y) ATTR_NONNULL()
void UI_view2d_view_to_region(const View2D *v2d, float x, float y, int *r_region_x, int *r_region_y) ATTR_NONNULL()
void ED_annotation_draw_2dimage(const bContext *C)
void ED_annotation_draw_view2d(const bContext *C, bool onlyv2d)
static bool generic_track_is_marker_enabled(const MovieTrackingTrack *track, const MovieTrackingPlaneTrack *plane_track, const int marker_index)
static bool generic_track_is_marker_keyframed(const MovieTrackingTrack *track, const MovieTrackingPlaneTrack *plane_track, const int marker_index)
void clip_draw_cache_and_notes(const bContext *C, SpaceClip *sc, ARegion *region)
static void draw_movieclip_notes(SpaceClip *sc, ARegion *region)
static void draw_marker_slide_zones(SpaceClip *sc, const MovieTrackingTrack *track, const MovieTrackingMarker *marker, const float marker_pos[2], int outline, int sel, int act, int width, int height, uint pos)
static void draw_marker_outline(SpaceClip *sc, const MovieTrackingTrack *track, const MovieTrackingMarker *marker, const float marker_pos[2], int width, int height, uint position)
static void draw_movieclip_cache(SpaceClip *sc, ARegion *region, MovieClip *clip, Scene *scene)
static void draw_marker_texts(SpaceClip *sc, const MovieTrackingTrack *track, const MovieTrackingMarker *marker, const float marker_pos[2], int act, int width, int height, float zoomx, float zoomy)
static void draw_movieclip_muted(ARegion *region, int width, int height, float zoomx, float zoomy)
static void draw_track_path_points(const TrackPathPoint *path, uint position_attribute, const int start_point, const int num_points)
static void draw_plane_marker(SpaceClip *sc, Scene *scene, MovieTrackingPlaneTrack *plane_track, MovieTrackingPlaneMarker *plane_marker, bool is_active_track, int width, int height)
static void getArrowEndPoint(const int width, const int height, const float zoom, const float start_corner[2], const float end_corner[2], float end_point[2])
static void draw_marker_areas(SpaceClip *sc, const MovieTrackingTrack *track, const MovieTrackingMarker *marker, const float marker_pos[2], int width, int height, int act, int sel, const uint shdr_pos)
@ PATH_POINT_FLAG_KEYFRAME
static void draw_marker_slide_triangle(float x, float y, float dx, float dy, int outline, const float px[2], uint pos)
static float get_shortest_pattern_side(const MovieTrackingMarker *marker)
static void draw_track_path_keyframe_points(const TrackPathPoint *path, uint position_attribute, const int start_point, const int num_points)
void clip_draw_main(const bContext *C, SpaceClip *sc, ARegion *region)
static int track_to_path_segment(SpaceClip *sc, MovieTrackingTrack *track, int direction, TrackPathPoint *path)
static void set_draw_marker_area_color(const MovieTrackingTrack *track, const MovieTrackingMarker *marker, const bool is_track_active, const bool is_area_selected, const float color[3], const float selected_color[3])
static void draw_plane_marker_ex(SpaceClip *sc, Scene *scene, MovieTrackingPlaneTrack *plane_track, MovieTrackingPlaneMarker *plane_marker, bool is_active_track, bool draw_outline, int width, int height)
static void draw_plane_track(SpaceClip *sc, Scene *scene, MovieTrackingPlaneTrack *plane_track, int framenr, bool is_active_track, int width, int height)
static void marker_to_path_point(SpaceClip *sc, const MovieTrackingTrack *track, const MovieTrackingMarker *marker, TrackPathPoint *point)
static void plane_track_colors(bool is_active, float r_color[3], float r_selected_color[3])
static void draw_distortion(SpaceClip *sc, ARegion *region, MovieClip *clip, int width, int height, float zoomx, float zoomy)
static void draw_track_path(SpaceClip *sc, MovieClip *, MovieTrackingTrack *track)
static void draw_tracking_tracks(SpaceClip *sc, Scene *scene, ARegion *region, MovieClip *clip, int width, int height, float zoomx, float zoomy)
static int generic_track_get_marker_framenr(const MovieTrackingTrack *track, const MovieTrackingPlaneTrack *plane_track, const int marker_index)
static void draw_keyframe(int frame, int cfra, int sfra, float framelen, int width, uint pos)
static void draw_movieclip_buffer(const bContext *C, SpaceClip *sc, ARegion *region, ImBuf *ibuf, int width, int height, float zoomx, float zoomy)
void clip_draw_grease_pencil(bContext *C, int onlyv2d)
static void draw_stabilization_border(SpaceClip *sc, ARegion *region, int width, int height, float zoomx, float zoomy)
static void draw_marker_slide_square(float x, float y, float dx, float dy, int outline, const float px[2], uint pos)
static void draw_track_path_lines(const TrackPathPoint *path, uint position_attribute, const int start_point, const int num_points)
static void homogeneous_2d_to_gl_matrix(float matrix[3][3], float gl_matrix[4][4])
static void draw_plane_marker_image(Scene *scene, MovieTrackingPlaneTrack *plane_track, MovieTrackingPlaneMarker *plane_marker)
static void track_colors(const MovieTrackingTrack *track, int act, float r_col[3], float r_scol[3])
static int generic_track_get_markersnr(const MovieTrackingTrack *track, const MovieTrackingPlaneTrack *plane_track)
static void draw_plane_marker_outline(SpaceClip *sc, Scene *scene, MovieTrackingPlaneTrack *plane_track, MovieTrackingPlaneMarker *plane_marker, int width, int height)
BLI_INLINE bool ED_space_clip_marker_is_visible(const SpaceClip *space_clip, const MovieTrackingObject *tracking_object, const MovieTrackingTrack *track, const MovieTrackingMarker *marker)
TEX_TEMPLATE DataVec texture(T, FltCoord, float=0.0f) RET
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void MEM_freeN(void *vmemh)
VecBase< float, 4 > float4
VecBase< float, 3 > float3
struct MovieTracking tracking
float pattern_corners[4][2]
MovieTrackingPlaneTrack * active_plane_track
MovieTrackingReconstruction reconstruction
MovieTrackingTrack * active_track
MovieTrackingPlaneMarker * markers
struct MovieReconstructedCamera * cameras
MovieTrackingMarker * markers
MovieTrackingStats * stats
MovieTrackingStabilization stabilization
MovieTrackingCamera camera
ColorManagedViewSettings view_settings
ColorManagedDisplaySettings display_settings
struct MovieClipUser user