65 int width, height, coord;
69 for (coord = 0; coord < 2; coord++) {
83 segment_end(userdata, value_source);
95 segment_start(userdata, track, value_source,
true);
104 prevval = marker->
pos[coord];
108 val = (marker->
pos[coord] - prevval) * ((coord == 0) ? (width) : (height));
109 val /= marker->
framenr - prevfra;
114 func(userdata, track, marker, value_source, scene_framenr, val);
117 prevval = marker->
pos[coord];
123 segment_end(userdata, value_source);
134 const int clip_width,
135 const int clip_height,
136 const int scene_framenr)
138 float reprojected_position[4], bundle_position[4], marker_position[2], delta[2];
142 float projection_matrix[4][4];
144 tracking, tracking_object, scene_framenr, clip_width, clip_height, projection_matrix);
147 bundle_position[3] = 1;
149 mul_v4_m4v4(reprojected_position, projection_matrix, bundle_position);
150 reprojected_position[0] = (reprojected_position[0] / (reprojected_position[3] * 2.0f) + 0.5f) *
152 reprojected_position[1] = (reprojected_position[1] / (reprojected_position[3] * 2.0f) + 0.5f) *
156 tracking, clip_width, clip_height, reprojected_position, reprojected_position);
158 marker_position[0] = (marker->
pos[0] + track->
offset[0]) * clip_width;
159 marker_position[1] = (marker->
pos[1] + track->
offset[1]) * clip_height * aspy;
161 sub_v2_v2v2(delta, reprojected_position, marker_position);
162 return len_v2(delta) * weight;
182 int clip_width, clip_height;
186 bool is_segment_open =
false;
187 for (
int marker_index = 0; marker_index < track->
markersnr; marker_index++) {
193 if (is_segment_open) {
194 if (segment_end !=
nullptr) {
197 is_segment_open =
false;
203 if (!is_segment_open) {
204 if (segment_start !=
nullptr) {
205 if ((marker_index + 1) == track->
markersnr) {
209 segment_start(userdata,
215 is_segment_open =
true;
218 if (func !=
nullptr) {
221 clip, tracking, tracking_object, track, marker, clip_width, clip_height, scene_framenr);
231 if (is_segment_open && segment_end !=
nullptr) {
244 sc, track, userdata, func, segment_start, segment_end);
247 sc, track, userdata, func, segment_start, segment_end);
262 if (!include_hidden && (track->flag &
TRACK_HIDDEN) != 0) {
271 sc, track, userdata, func, segment_start, segment_end);
285 if (!include_hidden && (track->flag &
TRACK_HIDDEN) != 0) {
293 for (
int i = 0; i < track->markersnr; i++) {
301 func(userdata, marker);
311 bool has_bundle =
false;
312 const bool used_for_stabilization = (track->
flag &
335 if (used_for_stabilization) {
386 SpaceClip *sc,
const float x,
const float y,
float *r_offset_x,
float *r_offset_y)
394 *r_offset_x = (
x - 0.5f) * width * aspx;
395 *r_offset_y = (
y - 0.5f) * height * aspy;
422 pos[0] = marker->
pos[0] + track->offset[0];
423 pos[1] = marker->
pos[1] + track->offset[1];
458 if (marker !=
nullptr) {
469 if (
mask ==
nullptr) {
478 for (
int i = 0; i < spline->tot_point; i++) {
508 bool handles_as_control_point)
531 const bContext *
C,
bool fit,
float *r_offset_x,
float *r_offset_y,
float *r_zoom)
535 int frame_width, frame_height;
538 if ((frame_width == 0) || (frame_height == 0) || (sc->
clip ==
nullptr)) {
556 (
max[0] +
min[0]) / (2 * frame_width),
557 (
max[1] +
min[1]) / (2 * frame_height),
562 const int h =
max[1] -
min[1];
566 if (
w > 0 && h > 0) {
570 float zoomx, zoomy, newzoom, aspx, aspy;
577 zoomx =
float(width) /
w / aspx;
578 zoomy =
float(height) / h / aspy;
bool BKE_animdata_fix_paths_remove(struct ID *id, const char *prefix)
Mask * CTX_data_edit_mask(const bContext *C)
Main * CTX_data_main(const bContext *C)
SpaceClip * CTX_wm_space_clip(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
#define MASKPOINT_ISSEL_ANY(p)
void BKE_mask_coord_to_movieclip(struct MovieClip *clip, struct MovieClipUser *user, float r_co[2], const float co[2])
eMaskhandleMode BKE_mask_point_handles_mode_get(const struct MaskSplinePoint *point)
void BKE_movieclip_get_size(struct MovieClip *clip, const struct MovieClipUser *user, int *r_width, int *r_height)
float BKE_movieclip_remap_clip_to_scene_frame(const struct MovieClip *clip, float framenr)
void BKE_tracking_plane_tracks_remove_point_track(struct MovieTracking *tracking, struct MovieTrackingTrack *track)
void BKE_tracking_plane_track_free(struct MovieTrackingPlaneTrack *plane_track)
#define TRACK_SELECTED(track)
float BKE_tracking_track_get_weight_for_marker(struct MovieClip *clip, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker)
void BKE_tracking_get_rna_path_for_track(const struct MovieTracking *tracking, const struct MovieTrackingTrack *track, char *rna_path, size_t rna_path_maxncpy)
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_track_free(struct MovieTrackingTrack *track)
void BKE_tracking_distort_v2(struct MovieTracking *tracking, int image_width, int image_height, const float co[2], float r_co[2])
void BKE_tracking_get_rna_path_for_plane_track(const struct MovieTracking *tracking, const struct MovieTrackingPlaneTrack *plane_track, char *rna_path, size_t rna_path_len)
#define TRACK_VIEW_SELECTED(sc, track)
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_marker_delete(struct MovieTrackingTrack *track, int framenr)
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE float min_ff(float a, float b)
MINLINE float power_of_2(float f)
void mul_v4_m4v4(float r[4], const float mat[4][4], const float v[4])
void mul_v3_m4v3(float r[3], const float mat[4][4], const float vec[3])
MINLINE float len_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
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 sub_v2_v2v2(float r[2], const float a[2], const float b[2])
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
#define INIT_MINMAX2(min, max)
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
@ MCLIP_PROXY_RENDER_UNDISTORT
@ SC_SHOW_GRAPH_TRACKS_MOTION
@ SC_SHOW_GRAPH_TRACKS_ERROR
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_aspect(const SpaceClip *sc, float *r_aspx, float *r_aspy)
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])
bool ED_mask_selected_minmax(const bContext *C, float min[2], float max[2], bool handles_as_control_point)
@ GPU_SHADER_3D_UNIFORM_COLOR
void GPU_blend(eGPUBlend blend)
void GPU_line_width(float width)
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
void UI_view2d_view_ortho(const View2D *v2d)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
@ CLIP_VALUE_SOURCE_REPROJECTION_ERROR
@ CLIP_VALUE_SOURCE_SPEED_Y
@ CLIP_VALUE_SOURCE_SPEED_X
void(*)(void *userdata, eClipCurveValueSource value_source) ClipTrackValueSegmentEndCallback
void(*)(void *userdata, MovieTrackingTrack *track, eClipCurveValueSource value_source, bool is_point) ClipTrackValueSegmentStartCallback
void(*)(void *userdata, MovieTrackingTrack *track, MovieTrackingMarker *marker, eClipCurveValueSource value_source, int scene_framenr, float val) ClipTrackValueCallback
static bool mask_has_selection(const bContext *C)
void clip_graph_tracking_values_iterate_track(SpaceClip *sc, MovieTrackingTrack *track, void *userdata, ClipTrackValueCallback func, ClipTrackValueSegmentStartCallback segment_start, ClipTrackValueSegmentEndCallback segment_end)
bool clip_graph_value_visible(SpaceClip *sc, eClipCurveValueSource value_source)
static float calculate_reprojection_error_at_marker(MovieClip *clip, MovieTracking *tracking, MovieTrackingObject *tracking_object, MovieTrackingTrack *track, MovieTrackingMarker *marker, const int clip_width, const int clip_height, const int scene_framenr)
void clip_delete_marker(bContext *C, MovieClip *clip, MovieTrackingTrack *track, MovieTrackingMarker *marker)
static bool tracking_has_selection(SpaceClip *space_clip)
void clip_delete_plane_track(bContext *C, MovieClip *clip, MovieTrackingPlaneTrack *plane_track)
void clip_view_center_to_point(SpaceClip *sc, float x, float y)
static bool selected_tracking_boundbox(SpaceClip *sc, float min[2], float max[2])
void clip_draw_sfra_efra(View2D *v2d, Scene *scene)
static void clip_graph_tracking_values_iterate_track_reprojection_error_values(SpaceClip *sc, MovieTrackingTrack *track, void *userdata, ClipTrackValueCallback func, ClipTrackValueSegmentStartCallback segment_start, ClipTrackValueSegmentEndCallback segment_end)
bool clip_view_calculate_view_selection(const bContext *C, bool fit, float *r_offset_x, float *r_offset_y, float *r_zoom)
bool clip_view_has_locked_selection(const bContext *C)
void clip_graph_tracking_values_iterate(SpaceClip *sc, bool selected_only, bool include_hidden, void *userdata, ClipTrackValueCallback func, ClipTrackValueSegmentStartCallback segment_start, ClipTrackValueSegmentEndCallback segment_end)
void clip_graph_tracking_iterate(SpaceClip *sc, bool selected_only, bool include_hidden, void *userdata, void(*func)(void *userdata, MovieTrackingMarker *marker))
static void clip_graph_tracking_values_iterate_track_speed_values(SpaceClip *sc, MovieTrackingTrack *track, void *userdata, ClipTrackValueCallback func, ClipTrackValueSegmentStartCallback segment_start, ClipTrackValueSegmentEndCallback segment_end)
void clip_delete_track(bContext *C, MovieClip *clip, MovieTrackingTrack *track)
void clip_view_offset_for_center_to_point(SpaceClip *sc, const float x, const float y, float *r_offset_x, float *r_offset_y)
static bool selected_boundbox(const bContext *C, float min[2], float max[2], bool handles_as_control_point)
draw_view in_light_buf[] float
ccl_device_inline float4 mask(const int4 mask, const float4 a)
struct MovieTracking tracking
MovieTrackingPlaneTrack * active_plane_track
MovieTrackingTrack * active_track
MovieTrackingMarker * markers
MovieTrackingCamera camera
struct MovieClipUser user
void WM_event_add_notifier(const bContext *C, uint type, void *reference)