Blender V4.3
clip_utils.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include "DNA_scene_types.h"
10
11#include "MEM_guardedalloc.h"
12
13#include "BLI_listbase.h"
14#include "BLI_math_matrix.h"
15#include "BLI_rect.h"
16#include "BLI_utildefines.h"
17
18#include "BKE_animsys.h"
19#include "BKE_context.hh"
20#include "BKE_mask.h"
21#include "BKE_movieclip.h"
22#include "BKE_tracking.h"
23
24#include "DEG_depsgraph.hh"
26
27#include "GPU_immediate.hh"
28#include "GPU_state.hh"
29
30#include "WM_api.hh"
31#include "WM_types.hh"
32
33#include "ED_clip.hh"
34#include "ED_mask.hh"
35
36#include "UI_resources.hh"
37#include "UI_view2d.hh"
38
39#include "clip_intern.hh" /* own include */
40
42{
44 if ((sc->flag & SC_SHOW_GRAPH_TRACKS_MOTION) == 0) {
45 return false;
46 }
47 }
48 else if (value_source == CLIP_VALUE_SOURCE_REPROJECTION_ERROR) {
49 if ((sc->flag & SC_SHOW_GRAPH_TRACKS_ERROR) == 0) {
50 return false;
51 }
52 }
53 return true;
54}
55
57 SpaceClip *sc,
58 MovieTrackingTrack *track,
59 void *userdata,
63{
65 int width, height, coord;
66
67 BKE_movieclip_get_size(clip, &sc->user, &width, &height);
68
69 for (coord = 0; coord < 2; coord++) {
70 eClipCurveValueSource value_source = (coord == 0) ? CLIP_VALUE_SOURCE_SPEED_X :
72 int i, prevfra = track->markers[0].framenr;
73 bool open = false;
74 float prevval = 0.0f;
75
76 for (i = 0; i < track->markersnr; i++) {
77 MovieTrackingMarker *marker = &track->markers[i];
78 float val;
79
80 if (marker->flag & MARKER_DISABLED) {
81 if (open) {
82 if (segment_end) {
83 segment_end(userdata, value_source);
84 }
85
86 open = false;
87 }
88
89 continue;
90 }
91
92 if (!open) {
93 if (segment_start) {
94 if ((i + 1) == track->markersnr) {
95 segment_start(userdata, track, value_source, true);
96 }
97 else {
98 segment_start(
99 userdata, track, value_source, (track->markers[i + 1].flag & MARKER_DISABLED));
100 }
101 }
102
103 open = true;
104 prevval = marker->pos[coord];
105 }
106
107 /* value is a pixels per frame speed */
108 val = (marker->pos[coord] - prevval) * ((coord == 0) ? (width) : (height));
109 val /= marker->framenr - prevfra;
110
111 if (func) {
112 int scene_framenr = BKE_movieclip_remap_clip_to_scene_frame(clip, marker->framenr);
113
114 func(userdata, track, marker, value_source, scene_framenr, val);
115 }
116
117 prevval = marker->pos[coord];
118 prevfra = marker->framenr;
119 }
120
121 if (open) {
122 if (segment_end) {
123 segment_end(userdata, value_source);
124 }
125 }
126 }
127}
128
130 MovieTracking *tracking,
131 MovieTrackingObject *tracking_object,
132 MovieTrackingTrack *track,
133 MovieTrackingMarker *marker,
134 const int clip_width,
135 const int clip_height,
136 const int scene_framenr)
137{
138 float reprojected_position[4], bundle_position[4], marker_position[2], delta[2];
139 float weight = BKE_tracking_track_get_weight_for_marker(clip, track, marker);
140 const float aspy = 1.0f / tracking->camera.pixel_aspect;
141
142 float projection_matrix[4][4];
144 tracking, tracking_object, scene_framenr, clip_width, clip_height, projection_matrix);
145
146 copy_v3_v3(bundle_position, track->bundle_pos);
147 bundle_position[3] = 1;
148
149 mul_v4_m4v4(reprojected_position, projection_matrix, bundle_position);
150 reprojected_position[0] = (reprojected_position[0] / (reprojected_position[3] * 2.0f) + 0.5f) *
151 clip_width;
152 reprojected_position[1] = (reprojected_position[1] / (reprojected_position[3] * 2.0f) + 0.5f) *
153 clip_height * aspy;
154
156 tracking, clip_width, clip_height, reprojected_position, reprojected_position);
157
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;
160
161 sub_v2_v2v2(delta, reprojected_position, marker_position);
162 return len_v2(delta) * weight;
163}
164
166 SpaceClip *sc,
167 MovieTrackingTrack *track,
168 void *userdata,
172{
173 /* Tracks without bundle can not have any reprojection error curve. */
174 if ((track->flag & TRACK_HAS_BUNDLE) == 0) {
175 return;
176 }
177
179 MovieTracking *tracking = &clip->tracking;
180 MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
181
182 int clip_width, clip_height;
183 BKE_movieclip_get_size(clip, &sc->user, &clip_width, &clip_height);
184
185 /* Iterate over segments. */
186 bool is_segment_open = false;
187 for (int marker_index = 0; marker_index < track->markersnr; marker_index++) {
188 MovieTrackingMarker *marker = &track->markers[marker_index];
189
190 /* End of tracked segment, no reprojection error can be calculated here since the ground truth
191 * 2D position is not known. */
192 if (marker->flag & MARKER_DISABLED) {
193 if (is_segment_open) {
194 if (segment_end != nullptr) {
195 segment_end(userdata, CLIP_VALUE_SOURCE_REPROJECTION_ERROR);
196 }
197 is_segment_open = false;
198 }
199 continue;
200 }
201
202 /* Begin new segment if it is not open yet. */
203 if (!is_segment_open) {
204 if (segment_start != nullptr) {
205 if ((marker_index + 1) == track->markersnr) {
206 segment_start(userdata, track, CLIP_VALUE_SOURCE_REPROJECTION_ERROR, true);
207 }
208 else {
209 segment_start(userdata,
210 track,
212 (track->markers[marker_index + 1].flag & MARKER_DISABLED));
213 }
214 }
215 is_segment_open = true;
216 }
217
218 if (func != nullptr) {
219 const int scene_framenr = BKE_movieclip_remap_clip_to_scene_frame(clip, marker->framenr);
220 const float reprojection_error = calculate_reprojection_error_at_marker(
221 clip, tracking, tracking_object, track, marker, clip_width, clip_height, scene_framenr);
222 func(userdata,
223 track,
224 marker,
226 scene_framenr,
227 reprojection_error);
228 }
229 }
230
231 if (is_segment_open && segment_end != nullptr) {
232 segment_end(userdata, CLIP_VALUE_SOURCE_REPROJECTION_ERROR);
233 }
234}
235
237 MovieTrackingTrack *track,
238 void *userdata,
242{
244 sc, track, userdata, func, segment_start, segment_end);
245
247 sc, track, userdata, func, segment_start, segment_end);
248}
249
251 bool selected_only,
252 bool include_hidden,
253 void *userdata,
257{
259 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
260
261 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
262 if (!include_hidden && (track->flag & TRACK_HIDDEN) != 0) {
263 continue;
264 }
265
266 if (selected_only && !TRACK_SELECTED(track)) {
267 continue;
268 }
269
271 sc, track, userdata, func, segment_start, segment_end);
272 }
273}
274
276 bool selected_only,
277 bool include_hidden,
278 void *userdata,
279 void (*func)(void *userdata, MovieTrackingMarker *marker))
280{
282 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
283
284 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
285 if (!include_hidden && (track->flag & TRACK_HIDDEN) != 0) {
286 continue;
287 }
288
289 if (selected_only && !TRACK_SELECTED(track)) {
290 continue;
291 }
292
293 for (int i = 0; i < track->markersnr; i++) {
294 MovieTrackingMarker *marker = &track->markers[i];
295
296 if (marker->flag & MARKER_DISABLED) {
297 continue;
298 }
299
300 if (func) {
301 func(userdata, marker);
302 }
303 }
304 }
305}
306
308{
309 MovieTracking *tracking = &clip->tracking;
310 MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(tracking);
311 bool has_bundle = false;
312 const bool used_for_stabilization = (track->flag &
314 if (track == tracking_object->active_track) {
315 tracking_object->active_track = nullptr;
316 }
317 /* Handle reconstruction display in 3d viewport. */
318 if (track->flag & TRACK_HAS_BUNDLE) {
319 has_bundle = true;
320 }
321 /* Make sure no plane will use freed track */
323 /* Delete f-curves associated with the track (such as weight, i.e.) */
324 /* Escaped object name, escaped track name, rest of the path. */
325 char rna_path[MAX_NAME * 4 + 64];
326 BKE_tracking_get_rna_path_for_track(tracking, track, rna_path, sizeof(rna_path));
327 if (BKE_animdata_fix_paths_remove(&clip->id, rna_path)) {
329 }
330 /* Delete track itself. */
332 BLI_freelinkN(&tracking_object->tracks, track);
333 /* Send notifiers. */
335 if (used_for_stabilization) {
337 }
338 /* Inform dependency graph. */
339 DEG_id_tag_update(&clip->id, 0);
340 if (has_bundle) {
342 }
343}
344
346 MovieClip *clip,
347 MovieTrackingTrack *track,
348 MovieTrackingMarker *marker)
349{
350 if (track->markersnr == 1) {
351 clip_delete_track(C, clip, track);
352 }
353 else {
354 BKE_tracking_marker_delete(track, marker->framenr);
355
357 }
358}
359
361{
362 MovieTracking *tracking = &clip->tracking;
364
365 if (plane_track == tracking_object->active_plane_track) {
366 tracking_object->active_plane_track = nullptr;
367 }
368
369 /* Delete f-curves associated with the track (such as weight, i.e.) */
370 /* Escaped object name, escaped track name, rest of the path. */
371 char rna_path[MAX_NAME * 4 + 64];
372 BKE_tracking_get_rna_path_for_plane_track(tracking, plane_track, rna_path, sizeof(rna_path));
373 if (BKE_animdata_fix_paths_remove(&clip->id, rna_path)) {
375 }
376 /* Delete the plane track itself. */
378 BLI_freelinkN(&tracking_object->plane_tracks, plane_track);
379 /* TODO(sergey): Any notifiers to be sent here? */
380 (void)C;
381 /* Inform dependency graph. */
382 DEG_id_tag_update(&clip->id, 0);
383}
384
386 SpaceClip *sc, const float x, const float y, float *r_offset_x, float *r_offset_y)
387{
388 int width, height;
389 ED_space_clip_get_size(sc, &width, &height);
390
391 float aspx, aspy;
392 ED_space_clip_get_aspect(sc, &aspx, &aspy);
393
394 *r_offset_x = (x - 0.5f) * width * aspx;
395 *r_offset_y = (y - 0.5f) * height * aspy;
396}
397
398void clip_view_center_to_point(SpaceClip *sc, float x, float y)
399{
401}
402
403static bool selected_tracking_boundbox(SpaceClip *sc, float min[2], float max[2])
404{
406 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
407 const int framenr = ED_space_clip_get_clip_frame_number(sc);
408 int width, height;
409 bool ok = false;
410
412
413 ED_space_clip_get_size(sc, &width, &height);
414
415 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
416 if (TRACK_VIEW_SELECTED(sc, track)) {
417 MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
418
419 if (marker) {
420 float pos[3];
421
422 pos[0] = marker->pos[0] + track->offset[0];
423 pos[1] = marker->pos[1] + track->offset[1];
424 pos[2] = 0.0f;
425
426 /* undistortion happens for normalized coords */
428 /* undistortion happens for normalized coords */
430 }
431
432 pos[0] *= width;
433 pos[1] *= height;
434
435 mul_v3_m4v3(pos, sc->stabmat, pos);
436
438
439 ok = true;
440 }
441 }
442 }
443
444 return ok;
445}
446
447static bool tracking_has_selection(SpaceClip *space_clip)
448{
449 MovieClip *clip = ED_space_clip_get_clip(space_clip);
450 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
451 const int framenr = ED_space_clip_get_clip_frame_number(space_clip);
452
453 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
454 if (!TRACK_VIEW_SELECTED(space_clip, track)) {
455 continue;
456 }
457 const MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr);
458 if (marker != nullptr) {
459 return true;
460 }
461 }
462
463 return false;
464}
465
466static bool mask_has_selection(const bContext *C)
467{
469 if (mask == nullptr) {
470 return false;
471 }
472
473 LISTBASE_FOREACH (MaskLayer *, mask_layer, &mask->masklayers) {
474 if (mask_layer->visibility_flag & (MASK_HIDE_VIEW | MASK_HIDE_SELECT)) {
475 continue;
476 }
477 LISTBASE_FOREACH (MaskSpline *, spline, &mask_layer->splines) {
478 for (int i = 0; i < spline->tot_point; i++) {
479 const MaskSplinePoint *point = &spline->points[i];
480 const BezTriple *bezt = &point->bezt;
482 continue;
483 }
484 if (bezt->f2 & SELECT) {
485 return true;
486 }
487
489 return true;
490 }
491
492 if ((bezt->f1 & SELECT) && (bezt->h1 != HD_VECT)) {
493 return true;
494 }
495 if ((bezt->f3 & SELECT) && (bezt->h2 != HD_VECT)) {
496 return true;
497 }
498 }
499 }
500 }
501
502 return false;
503}
504
505static bool selected_boundbox(const bContext *C,
506 float min[2],
507 float max[2],
508 bool handles_as_control_point)
509{
511 if (sc->mode == SC_MODE_TRACKING) {
513 }
514
515 if (ED_mask_selected_minmax(C, min, max, handles_as_control_point)) {
517 int width, height;
518 ED_space_clip_get_size(sc, &width, &height);
521 min[0] *= width;
522 min[1] *= height;
523 max[0] *= width;
524 max[1] *= height;
525 return true;
526 }
527 return false;
528}
529
531 const bContext *C, bool fit, float *r_offset_x, float *r_offset_y, float *r_zoom)
532{
534
535 int frame_width, frame_height;
536 ED_space_clip_get_size(sc, &frame_width, &frame_height);
537
538 if ((frame_width == 0) || (frame_height == 0) || (sc->clip == nullptr)) {
539 return false;
540 }
541
542 /* NOTE: The `fit` argument is set to truth when doing "View to Selected" operator, and it set to
543 * false when this function is used for Lock-to-Selection functionality. When locking to
544 * selection the handles are to use control point position. So we can derive the
545 * `handles_as_control_point` from `fit`.
546 *
547 * TODO(sergey): Make such decision more explicit. Maybe pass use-case for the calculation to
548 * tell operator from lock-to-selection apart. */
549 float min[2], max[2];
550 if (!selected_boundbox(C, min, max, !fit)) {
551 return false;
552 }
553
554 /* center view */
556 (max[0] + min[0]) / (2 * frame_width),
557 (max[1] + min[1]) / (2 * frame_height),
558 r_offset_x,
559 r_offset_y);
560
561 const int w = max[0] - min[0];
562 const int h = max[1] - min[1];
563
564 /* set zoom to see all selection */
565 *r_zoom = sc->zoom;
566 if (w > 0 && h > 0) {
567 ARegion *region = CTX_wm_region(C);
568
569 int width, height;
570 float zoomx, zoomy, newzoom, aspx, aspy;
571
572 ED_space_clip_get_aspect(sc, &aspx, &aspy);
573
574 width = BLI_rcti_size_x(&region->winrct) + 1;
575 height = BLI_rcti_size_y(&region->winrct) + 1;
576
577 zoomx = float(width) / w / aspx;
578 zoomy = float(height) / h / aspy;
579
580 newzoom = 1.0f / power_of_2(1.0f / min_ff(zoomx, zoomy));
581
582 if (fit) {
583 *r_zoom = newzoom;
584 }
585 }
586
587 return true;
588}
589
591{
592 SpaceClip *space_clip = CTX_wm_space_clip(C);
593
594 if ((space_clip->flag & SC_LOCK_SELECTION) == 0) {
595 return false;
596 }
597
598 if (space_clip->mode == SC_MODE_TRACKING) {
599 return tracking_has_selection(space_clip);
600 }
601
602 return mask_has_selection(C);
603}
604
606{
608
609 /* currently clip editor supposes that editing clip length is equal to scene frame range */
611
614
615 immUniformColor4f(0.0f, 0.0f, 0.0f, 0.4f);
616 immRectf(pos, v2d->cur.xmin, v2d->cur.ymin, float(scene->r.sfra), v2d->cur.ymax);
617 immRectf(pos, float(scene->r.efra), v2d->cur.ymin, v2d->cur.xmax, v2d->cur.ymax);
618
620
622
623 /* thin lines where the actual frames are */
624 GPU_line_width(1.0f);
625
627 immVertex2f(pos, float(scene->r.sfra), v2d->cur.ymin);
628 immVertex2f(pos, float(scene->r.sfra), v2d->cur.ymax);
629 immVertex2f(pos, float(scene->r.efra), v2d->cur.ymin);
630 immVertex2f(pos, float(scene->r.efra), v2d->cur.ymax);
631 immEnd();
632
634}
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)
@ MASK_HANDLE_MODE_STICK
Definition BKE_mask.h:41
#define MASKPOINT_ISSEL_ANY(p)
Definition BKE_mask.h:297
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)
Definition tracking.cc:1675
void BKE_tracking_plane_track_free(struct MovieTrackingPlaneTrack *plane_track)
Definition tracking.cc:1625
#define TRACK_SELECTED(track)
float BKE_tracking_track_get_weight_for_marker(struct MovieClip *clip, struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker)
Definition tracking.cc:1172
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)
Definition tracking.cc:1358
struct MovieTrackingObject * BKE_tracking_object_get_active(const struct MovieTracking *tracking)
void BKE_tracking_track_free(struct MovieTrackingTrack *track)
Definition tracking.cc:596
void BKE_tracking_distort_v2(struct MovieTracking *tracking, int image_width, int image_height, const float co[2], float r_co[2])
Definition tracking.cc:2421
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])
Definition tracking.cc:386
void BKE_tracking_marker_delete(struct MovieTrackingTrack *track, int framenr)
Definition tracking.cc:1281
#define LISTBASE_FOREACH(type, var, list)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:269
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)
Definition BLI_rect.h:193
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
Definition BLI_rect.h:189
unsigned int uint
#define INIT_MINMAX2(min, max)
#define ELEM(...)
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
@ HD_VECT
#define MAX_NAME
Definition DNA_defs.h:50
@ MASK_HIDE_SELECT
@ MASK_HIDE_VIEW
@ MCLIP_PROXY_RENDER_UNDISTORT
@ SC_MODE_TRACKING
@ SC_LOCK_SELECTION
@ SC_SHOW_GRAPH_TRACKS_MOTION
@ SC_SHOW_GRAPH_TRACKS_ERROR
@ TRACK_HIDDEN
@ TRACK_USE_2D_STAB
@ TRACK_HAS_BUNDLE
@ TRACK_USE_2D_STAB_ROT
@ MARKER_DISABLED
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)
void immEnd()
void immUnbindProgram()
void immUniformColor4f(float r, float g, float b, float a)
void immVertex2f(uint attr_id, float x, float y)
void immUniformThemeColorShade(int color_id, int offset)
void immBindBuiltinProgram(eGPUBuiltinShader shader_id)
GPUVertFormat * immVertexFormat()
void immBegin(GPUPrimType, uint vertex_len)
void immRectf(uint pos, float x1, float y1, float x2, float y2)
@ GPU_PRIM_LINES
@ GPU_SHADER_3D_UNIFORM_COLOR
@ GPU_BLEND_NONE
Definition GPU_state.hh:85
@ GPU_BLEND_ALPHA
Definition GPU_state.hh:87
void GPU_blend(eGPUBlend blend)
Definition gpu_state.cc:42
void GPU_line_width(float width)
Definition gpu_state.cc:161
@ GPU_FETCH_FLOAT
uint GPU_vertformat_attr_add(GPUVertFormat *, const char *name, GPUVertCompType, uint comp_len, GPUVertFetchMode)
@ GPU_COMP_F32
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
#define C
Definition RandGen.cpp:29
@ TH_BACK
void UI_view2d_view_ortho(const View2D *v2d)
Definition view2d.cc:1091
#define ND_DISPLAY
Definition WM_types.hh:458
#define NC_MOVIECLIP
Definition WM_types.hh:364
#define NA_EDITED
Definition WM_types.hh:550
#define ND_SPACE_VIEW3D
Definition WM_types.hh:494
#define NC_SPACE
Definition WM_types.hh:359
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
eClipCurveValueSource
@ 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)
Definition clip_utils.cc:41
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)
Definition clip_utils.cc:56
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)
#define SELECT
draw_view in_light_buf[] float
ccl_device_inline float4 mask(const int4 mask, const float4 a)
#define min(a, b)
Definition sort.c:32
struct MovieTracking tracking
MovieTrackingPlaneTrack * active_plane_track
MovieTrackingTrack * active_track
MovieTrackingMarker * markers
MovieTrackingCamera camera
struct RenderData r
struct MovieClipUser user
float stabmat[4][4]
struct MovieClip * clip
float xmax
float xmin
float ymax
float ymin
float max
void WM_event_add_notifier(const bContext *C, uint type, void *reference)