Blender V4.3
rna_tracking.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include <climits>
10#include <cstdlib>
11
12#include "MEM_guardedalloc.h"
13
14#include "BKE_movieclip.h"
16#include "BKE_tracking.h"
17
18#include "BLT_translation.hh"
19
20#include "RNA_access.hh"
21#include "RNA_define.hh"
22
23#include "rna_internal.hh"
24
25#include "DNA_defaults.h"
26#include "DNA_movieclip_types.h"
27#include "DNA_object_types.h" /* SELECT */
28#include "DNA_scene_types.h"
29
30#include "WM_types.hh"
31
32#ifdef RNA_RUNTIME
33
34# include "DNA_anim_types.h"
35
36# include "BLI_math_vector.h"
37
38# include "BKE_anim_data.hh"
39# include "BKE_animsys.h"
40# include "BKE_node.hh"
41# include "BKE_report.hh"
42
43# include "DEG_depsgraph.hh"
44
45# include "IMB_imbuf.hh"
46
47# include "WM_api.hh"
48
49static std::optional<std::string> rna_tracking_path(const PointerRNA * /*ptr*/)
50{
51 return "tracking";
52}
53
54static std::optional<std::string> rna_trackingSettings_path(const PointerRNA * /*ptr*/)
55{
56 return "tracking.settings";
57}
58
59static void rna_tracking_defaultSettings_patternUpdate(Main * /*bmain*/,
60 Scene * /*scene*/,
62{
63 MovieClip *clip = (MovieClip *)ptr->owner_id;
64 MovieTracking *tracking = &clip->tracking;
65 MovieTrackingSettings *settings = &tracking->settings;
66
67 if (settings->default_search_size < settings->default_pattern_size) {
68 settings->default_search_size = settings->default_pattern_size;
69 }
70}
71
72static void rna_tracking_defaultSettings_searchUpdate(Main * /*bmain*/,
73 Scene * /*scene*/,
75{
76 MovieClip *clip = (MovieClip *)ptr->owner_id;
77 MovieTracking *tracking = &clip->tracking;
78 MovieTrackingSettings *settings = &tracking->settings;
79
80 if (settings->default_pattern_size > settings->default_search_size) {
81 settings->default_pattern_size = settings->default_search_size;
82 }
83}
84
85static std::optional<std::string> rna_trackingTrack_path(const PointerRNA *ptr)
86{
87 MovieClip *clip = (MovieClip *)ptr->owner_id;
89 /* Escaped object name, escaped track name, rest of the path. */
90 char rna_path[MAX_NAME * 4 + 64];
91 BKE_tracking_get_rna_path_for_track(&clip->tracking, track, rna_path, sizeof(rna_path));
92 return rna_path;
93}
94
95static void rna_trackingTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
96{
97 MovieClip *clip = (MovieClip *)ptr->owner_id;
98 MovieTrackingObject *tracking_camera_object = BKE_tracking_object_get_camera(&clip->tracking);
99
100 rna_iterator_listbase_begin(iter, &tracking_camera_object->tracks, nullptr);
101}
102
103static void rna_trackingPlaneTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
104{
105 MovieClip *clip = (MovieClip *)ptr->owner_id;
106 MovieTrackingObject *tracking_camera_object = BKE_tracking_object_get_camera(&clip->tracking);
107
108 rna_iterator_listbase_begin(iter, &tracking_camera_object->plane_tracks, nullptr);
109}
110
111static PointerRNA rna_trackingReconstruction_get(PointerRNA *ptr)
112{
113 MovieClip *clip = (MovieClip *)ptr->owner_id;
114 MovieTrackingObject *tracking_camera_object = BKE_tracking_object_get_camera(&clip->tracking);
115
117 ptr, &RNA_MovieTrackingReconstruction, &tracking_camera_object->reconstruction);
118}
119
120static void rna_trackingObjects_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
121{
122 MovieClip *clip = (MovieClip *)ptr->owner_id;
123
124 rna_iterator_listbase_begin(iter, &clip->tracking.objects, nullptr);
125}
126
127static int rna_tracking_active_object_index_get(PointerRNA *ptr)
128{
129 MovieClip *clip = (MovieClip *)ptr->owner_id;
130
131 return clip->tracking.objectnr;
132}
133
134static void rna_tracking_active_object_index_set(PointerRNA *ptr, int value)
135{
136 MovieClip *clip = (MovieClip *)ptr->owner_id;
137
138 clip->tracking.objectnr = value;
139 BKE_tracking_dopesheet_tag_update(&clip->tracking);
140}
141
142static void rna_tracking_active_object_index_range(
143 PointerRNA *ptr, int *min, int *max, int * /*softmin*/, int * /*softmax*/)
144{
145 MovieClip *clip = (MovieClip *)ptr->owner_id;
146
147 *min = 0;
148 *max = max_ii(0, clip->tracking.tot_object - 1);
149}
150
151static PointerRNA rna_tracking_active_track_get(PointerRNA *ptr)
152{
153 MovieClip *clip = (MovieClip *)ptr->owner_id;
154 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
155
156 return rna_pointer_inherit_refine(ptr, &RNA_MovieTrackingTrack, tracking_object->active_track);
157}
158
159static void rna_tracking_active_track_set(PointerRNA *ptr, PointerRNA value, ReportList *reports)
160{
161 MovieClip *clip = (MovieClip *)ptr->owner_id;
162 MovieTrackingTrack *track = (MovieTrackingTrack *)value.data;
163 MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
164 int index = BLI_findindex(&tracking_object->tracks, track);
165
166 if (index != -1) {
167 tracking_object->active_track = track;
168 }
169 else {
170 BKE_reportf(reports,
171 RPT_ERROR,
172 "Track '%s' is not found in the tracking object %s",
173 track->name,
174 tracking_object->name);
175 }
176}
177
178static PointerRNA rna_tracking_active_plane_track_get(PointerRNA *ptr)
179{
180 MovieClip *clip = (MovieClip *)ptr->owner_id;
181 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
182
184 ptr, &RNA_MovieTrackingPlaneTrack, tracking_object->active_plane_track);
185}
186
187static void rna_tracking_active_plane_track_set(PointerRNA *ptr,
188 PointerRNA value,
189 ReportList *reports)
190{
191 MovieClip *clip = (MovieClip *)ptr->owner_id;
192 MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)value.data;
193 MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
194 int index = BLI_findindex(&tracking_object->plane_tracks, plane_track);
195
196 if (index != -1) {
197 tracking_object->active_plane_track = plane_track;
198 }
199 else {
200 BKE_reportf(reports,
201 RPT_ERROR,
202 "Plane track '%s' is not found in the tracking object %s",
203 plane_track->name,
204 tracking_object->name);
205 }
206}
207
208static PointerRNA rna_tracking_object_active_track_get(PointerRNA *ptr)
209{
210 MovieClip *clip = (MovieClip *)ptr->owner_id;
211 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
212
213 return rna_pointer_inherit_refine(ptr, &RNA_MovieTrackingTrack, tracking_object->active_track);
214}
215
216static void rna_tracking_object_active_track_set(PointerRNA *ptr,
217 PointerRNA value,
218 ReportList *reports)
219{
220 MovieTrackingTrack *track = (MovieTrackingTrack *)value.data;
221 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
222 int index = BLI_findindex(&tracking_object->tracks, track);
223
224 if (index != -1) {
225 tracking_object->active_track = track;
226 }
227 else {
228 BKE_reportf(reports,
229 RPT_ERROR,
230 "Track '%s' is not found in the tracking object %s",
231 track->name,
232 tracking_object->name);
233 }
234}
235
236static PointerRNA rna_tracking_object_active_plane_track_get(PointerRNA *ptr)
237{
238 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
239
241 ptr, &RNA_MovieTrackingPlaneTrack, tracking_object->active_plane_track);
242}
243
244static void rna_tracking_object_active_plane_track_set(PointerRNA *ptr,
245 PointerRNA value,
246 ReportList *reports)
247{
248 MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)value.data;
249 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
250 int index = BLI_findindex(&tracking_object->plane_tracks, plane_track);
251
252 if (index != -1) {
253 tracking_object->active_plane_track = plane_track;
254 }
255 else {
256 BKE_reportf(reports,
257 RPT_ERROR,
258 "Plane track '%s' is not found in the tracking object %s",
259 plane_track->name,
260 tracking_object->name);
261 }
262}
263
264static void rna_trackingTrack_name_set(PointerRNA *ptr, const char *value)
265{
266 MovieClip *clip = (MovieClip *)ptr->owner_id;
268 MovieTrackingObject *tracking_object = BKE_tracking_find_object_for_track(&clip->tracking,
269 track);
270 /* Store old name, for the animation fix later. */
271 char old_name[sizeof(track->name)];
272 STRNCPY(old_name, track->name);
273 /* Update the name, */
274 STRNCPY(track->name, value);
275 BKE_tracking_track_unique_name(&tracking_object->tracks, track);
276 /* Fix animation paths. */
277 AnimData *adt = BKE_animdata_from_id(&clip->id);
278 if (adt != nullptr) {
279 char rna_path_prefix[MAX_NAME * 2 + 64];
281 &clip->tracking, track, rna_path_prefix, sizeof(rna_path_prefix));
283 &clip->id, adt, nullptr, rna_path_prefix, old_name, track->name, 0, 0, 1);
284 }
285}
286
287static bool rna_trackingTrack_select_get(PointerRNA *ptr)
288{
290
291 return TRACK_SELECTED(track);
292}
293
294static void rna_trackingTrack_select_set(PointerRNA *ptr, bool value)
295{
297
298 if (value) {
299 track->flag |= SELECT;
300 track->pat_flag |= SELECT;
301 track->search_flag |= SELECT;
302 }
303 else {
304 track->flag &= ~SELECT;
305 track->pat_flag &= ~SELECT;
306 track->search_flag &= ~SELECT;
307 }
308}
309
310static void rna_trackingPlaneMarker_frame_set(PointerRNA *ptr, int value)
311{
312 MovieClip *clip = (MovieClip *)ptr->owner_id;
313 MovieTracking *tracking = &clip->tracking;
315 MovieTrackingPlaneTrack *plane_track_of_marker = nullptr;
316
317 LISTBASE_FOREACH (MovieTrackingObject *, tracking_object, &tracking->objects) {
318 LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
319 if (plane_marker >= plane_track->markers &&
320 plane_marker < plane_track->markers + plane_track->markersnr)
321 {
322 plane_track_of_marker = plane_track;
323 break;
324 }
325 }
326
327 if (plane_track_of_marker) {
328 break;
329 }
330 }
331
332 if (plane_track_of_marker) {
333 MovieTrackingPlaneMarker new_plane_marker = *plane_marker;
334 new_plane_marker.framenr = value;
335
336 BKE_tracking_plane_marker_delete(plane_track_of_marker, plane_marker->framenr);
337 BKE_tracking_plane_marker_insert(plane_track_of_marker, &new_plane_marker);
338 }
339}
340
341static std::optional<std::string> rna_trackingPlaneTrack_path(const PointerRNA *ptr)
342{
343 MovieClip *clip = (MovieClip *)ptr->owner_id;
345 /* Escaped object name, escaped track name, rest of the path. */
346 char rna_path[MAX_NAME * 4 + 64];
348 &clip->tracking, plane_track, rna_path, sizeof(rna_path));
349 return rna_path;
350}
351
352static void rna_trackingPlaneTrack_name_set(PointerRNA *ptr, const char *value)
353{
354 MovieClip *clip = (MovieClip *)ptr->owner_id;
356 MovieTrackingObject *tracking_object = BKE_tracking_find_object_for_plane_track(&clip->tracking,
357 plane_track);
358 /* Store old name, for the animation fix later. */
359 char old_name[sizeof(plane_track->name)];
360 STRNCPY(old_name, plane_track->name);
361 /* Update the name, */
362 STRNCPY(plane_track->name, value);
363 BKE_tracking_plane_track_unique_name(&tracking_object->plane_tracks, plane_track);
364 /* Fix animation paths. */
365 AnimData *adt = BKE_animdata_from_id(&clip->id);
366 if (adt != nullptr) {
367 char rna_path[MAX_NAME * 2 + 64];
369 &clip->tracking, plane_track, rna_path, sizeof(rna_path));
371 &clip->id, adt, nullptr, rna_path, old_name, plane_track->name, 0, 0, 1);
372 }
373}
374
375static std::optional<std::string> rna_trackingCamera_path(const PointerRNA * /*ptr*/)
376{
377 return "tracking.camera";
378}
379
380static float rna_trackingCamera_focal_mm_get(PointerRNA *ptr)
381{
382 MovieClip *clip = (MovieClip *)ptr->owner_id;
383 MovieTrackingCamera *camera = &clip->tracking.camera;
384 float val = camera->focal;
385
386 if (clip->lastsize[0]) {
387 val = val * camera->sensor_width / float(clip->lastsize[0]);
388 }
389
390 return val;
391}
392
393static void rna_trackingCamera_focal_mm_set(PointerRNA *ptr, float value)
394{
395 MovieClip *clip = (MovieClip *)ptr->owner_id;
396 MovieTrackingCamera *camera = &clip->tracking.camera;
397
398 if (clip->lastsize[0]) {
399 value = clip->lastsize[0] * value / camera->sensor_width;
400 }
401
402 if (value >= 0.0001f) {
403 camera->focal = value;
404 }
405}
406
407static void rna_trackingCamera_principal_point_pixels_get(PointerRNA *ptr,
408 float *r_principal_point_pixels)
409{
410 MovieClip *clip = (MovieClip *)ptr->owner_id;
411 BKE_tracking_camera_principal_point_pixel_get(clip, r_principal_point_pixels);
412}
413
414static void rna_trackingCamera_principal_point_pixels_set(PointerRNA *ptr,
415 const float *principal_point_pixels)
416{
417 MovieClip *clip = (MovieClip *)ptr->owner_id;
418 BKE_tracking_camera_principal_point_pixel_set(clip, principal_point_pixels);
419}
420
421static std::optional<std::string> rna_trackingStabilization_path(const PointerRNA * /*ptr*/)
422{
423 return "tracking.stabilization";
424}
425
426static bool rna_track_2d_stabilization(CollectionPropertyIterator * /*iter*/, void *data)
427{
428 MovieTrackingTrack *track = (MovieTrackingTrack *)data;
429
430 if ((track->flag & TRACK_USE_2D_STAB) == 0) {
431 return true;
432 }
433
434 return false;
435}
436
437static bool rna_track_2d_stabilization_rotation(CollectionPropertyIterator * /*iter*/, void *data)
438{
439 MovieTrackingTrack *track = (MovieTrackingTrack *)data;
440
441 if ((track->flag & TRACK_USE_2D_STAB_ROT) == 0) {
442 return true;
443 }
444
445 return false;
446}
447
448static void rna_tracking_stabTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
449{
450 MovieClip *clip = (MovieClip *)ptr->owner_id;
451 MovieTrackingObject *tracking_camera_object = BKE_tracking_object_get_camera(&clip->tracking);
452 rna_iterator_listbase_begin(iter, &tracking_camera_object->tracks, rna_track_2d_stabilization);
453}
454
455static int rna_tracking_stabTracks_active_index_get(PointerRNA *ptr)
456{
457 MovieClip *clip = (MovieClip *)ptr->owner_id;
458 return clip->tracking.stabilization.act_track;
459}
460
461static void rna_tracking_stabTracks_active_index_set(PointerRNA *ptr, int value)
462{
463 MovieClip *clip = (MovieClip *)ptr->owner_id;
464 clip->tracking.stabilization.act_track = value;
465}
466
467static void rna_tracking_stabTracks_active_index_range(
468 PointerRNA *ptr, int *min, int *max, int * /*softmin*/, int * /*softmax*/)
469{
470 MovieClip *clip = (MovieClip *)ptr->owner_id;
471
472 *min = 0;
473 *max = max_ii(0, clip->tracking.stabilization.tot_track - 1);
474}
475
476static void rna_tracking_stabRotTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
477{
478 MovieClip *clip = (MovieClip *)ptr->owner_id;
479 MovieTrackingObject *tracking_camera_object = BKE_tracking_object_get_camera(&clip->tracking);
481 iter, &tracking_camera_object->tracks, rna_track_2d_stabilization_rotation);
482}
483
484static int rna_tracking_stabRotTracks_active_index_get(PointerRNA *ptr)
485{
486 MovieClip *clip = (MovieClip *)ptr->owner_id;
487 return clip->tracking.stabilization.act_rot_track;
488}
489
490static void rna_tracking_stabRotTracks_active_index_set(PointerRNA *ptr, int value)
491{
492 MovieClip *clip = (MovieClip *)ptr->owner_id;
493 clip->tracking.stabilization.act_rot_track = value;
494}
495
496static void rna_tracking_stabRotTracks_active_index_range(
497 PointerRNA *ptr, int *min, int *max, int * /*softmin*/, int * /*softmax*/)
498{
499 MovieClip *clip = (MovieClip *)ptr->owner_id;
500
501 *min = 0;
502 *max = max_ii(0, clip->tracking.stabilization.tot_rot_track - 1);
503}
504
505static void rna_tracking_flushUpdate(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
506{
507 MovieClip *clip = (MovieClip *)ptr->owner_id;
508
509 BKE_ntree_update_tag_id_changed(bmain, &clip->id);
510 BKE_ntree_update_main(bmain, nullptr);
511
514 DEG_id_tag_update(&clip->id, 0);
515}
516
517static void rna_tracking_resetIntrinsics(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
518{
519 MovieClip *clip = (MovieClip *)ptr->owner_id;
520 MovieTracking *tracking = &clip->tracking;
521
522 if (tracking->camera.intrinsics) {
523 BKE_tracking_distortion_free(static_cast<MovieDistortion *>(tracking->camera.intrinsics));
524 tracking->camera.intrinsics = nullptr;
525 }
526}
527
528static void rna_trackingObject_tracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
529{
530 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
531 rna_iterator_listbase_begin(iter, &tracking_object->tracks, nullptr);
532}
533
534static void rna_trackingObject_plane_tracks_begin(CollectionPropertyIterator *iter,
536{
537 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
538 rna_iterator_listbase_begin(iter, &tracking_object->plane_tracks, nullptr);
539}
540
541static PointerRNA rna_trackingObject_reconstruction_get(PointerRNA *ptr)
542{
543 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
545 ptr, &RNA_MovieTrackingReconstruction, &tracking_object->reconstruction);
546}
547
548static PointerRNA rna_tracking_active_object_get(PointerRNA *ptr)
549{
550 MovieClip *clip = (MovieClip *)ptr->owner_id;
551 MovieTrackingObject *tracking_object = static_cast<MovieTrackingObject *>(
552 BLI_findlink(&clip->tracking.objects, clip->tracking.objectnr));
553
554 return rna_pointer_inherit_refine(ptr, &RNA_MovieTrackingObject, tracking_object);
555}
556
557static void rna_tracking_active_object_set(PointerRNA *ptr,
558 PointerRNA value,
559 ReportList * /*reports*/)
560{
561 MovieClip *clip = (MovieClip *)ptr->owner_id;
562 MovieTrackingObject *tracking_object = (MovieTrackingObject *)value.data;
563 const int index = BLI_findindex(&clip->tracking.objects, tracking_object);
564
565 if (index != -1) {
566 clip->tracking.objectnr = index;
567 }
568 else {
569 clip->tracking.objectnr = 0;
570 }
571}
572
573static void rna_trackingObject_name_set(PointerRNA *ptr, const char *value)
574{
575 MovieClip *clip = (MovieClip *)ptr->owner_id;
576 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
577
578 STRNCPY(tracking_object->name, value);
579
580 BKE_tracking_object_unique_name(&clip->tracking, tracking_object);
581}
582
583static void rna_trackingObject_flushUpdate(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
584{
585 MovieClip *clip = (MovieClip *)ptr->owner_id;
586
588 DEG_id_tag_update(&clip->id, 0);
589}
590
591static void rna_trackingMarker_frame_set(PointerRNA *ptr, int value)
592{
593 MovieClip *clip = (MovieClip *)ptr->owner_id;
594 MovieTracking *tracking = &clip->tracking;
596 MovieTrackingTrack *track_of_marker = nullptr;
597
598 LISTBASE_FOREACH (MovieTrackingObject *, tracking_object, &tracking->objects) {
599 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
600 if (marker >= track->markers && marker < track->markers + track->markersnr) {
601 track_of_marker = track;
602 break;
603 }
604 }
605
606 if (track_of_marker) {
607 break;
608 }
609 }
610
611 if (track_of_marker) {
612 MovieTrackingMarker new_marker = *marker;
613 new_marker.framenr = value;
614
615 BKE_tracking_marker_delete(track_of_marker, marker->framenr);
616 BKE_tracking_marker_insert(track_of_marker, &new_marker);
617 }
618}
619
620static void rna_tracking_markerPattern_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
621{
623
625}
626
627static void rna_tracking_markerSearch_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
628{
630
632}
633
634static void rna_tracking_markerPattern_boundbox_get(PointerRNA *ptr, float *values)
635{
637 float min[2], max[2];
638
640
641 copy_v2_v2(values, min);
642 copy_v2_v2(values + 2, max);
643}
644
645static std::optional<std::string> rna_trackingDopesheet_path(const PointerRNA * /*ptr*/)
646{
647 return "tracking.dopesheet";
648}
649
650static void rna_trackingDopesheet_tagUpdate(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
651{
652 MovieClip *clip = (MovieClip *)ptr->owner_id;
653 MovieTrackingDopesheet *dopesheet = &clip->tracking.dopesheet;
654
655 dopesheet->ok = 0;
656}
657
658/* API */
659
660static MovieTrackingTrack *add_track_to_base(
661 MovieClip *clip, MovieTracking *tracking, ListBase *tracksbase, const char *name, int frame)
662{
663 int width, height;
665 MovieTrackingTrack *track;
666
667 user.framenr = 1;
668
669 BKE_movieclip_get_size(clip, &user, &width, &height);
670
671 track = BKE_tracking_track_add(tracking, tracksbase, 0, 0, frame, width, height);
672
673 if (name && name[0]) {
674 STRNCPY(track->name, name);
675 BKE_tracking_track_unique_name(tracksbase, track);
676 }
677
678 return track;
679}
680
681static MovieTrackingTrack *rna_trackingTracks_new(ID *id,
682 MovieTracking *tracking,
683 const char *name,
684 int frame)
685{
686 MovieClip *clip = (MovieClip *)id;
687 MovieTrackingObject *tracking_camera_object = BKE_tracking_object_get_camera(&clip->tracking);
688 MovieTrackingTrack *track = add_track_to_base(
689 clip, tracking, &tracking_camera_object->tracks, name, frame);
690
692
693 return track;
694}
695
696static MovieTrackingTrack *rna_trackingObject_tracks_new(ID *id,
697 MovieTrackingObject *tracking_object,
698 const char *name,
699 int frame)
700{
701 MovieClip *clip = (MovieClip *)id;
702 MovieTrackingTrack *track = add_track_to_base(
703 clip, &clip->tracking, &tracking_object->tracks, name, frame);
704
706
707 return track;
708}
709
710static MovieTrackingObject *rna_trackingObject_new(MovieTracking *tracking, const char *name)
711{
712 MovieTrackingObject *tracking_object = BKE_tracking_object_add(tracking, name);
713
715
716 return tracking_object;
717}
718
719static void rna_trackingObject_remove(MovieTracking *tracking,
720 ReportList *reports,
721 PointerRNA *object_ptr)
722{
723 MovieTrackingObject *tracking_object = static_cast<MovieTrackingObject *>(object_ptr->data);
724 if (BKE_tracking_object_delete(tracking, tracking_object) == false) {
725 BKE_reportf(reports, RPT_ERROR, "MovieTracking '%s' cannot be removed", tracking_object->name);
726 return;
727 }
728
729 RNA_POINTER_INVALIDATE(object_ptr);
730
732}
733
734static MovieTrackingMarker *rna_trackingMarkers_find_frame(MovieTrackingTrack *track,
735 int framenr,
736 bool exact)
737{
738 if (exact) {
739 return BKE_tracking_marker_get_exact(track, framenr);
740 }
741 else {
742 return BKE_tracking_marker_get(track, framenr);
743 }
744}
745
746static MovieTrackingMarker *rna_trackingMarkers_insert_frame(MovieTrackingTrack *track,
747 int framenr,
748 const float co[2])
749{
750 MovieTrackingMarker marker, *new_marker;
751
752 memset(&marker, 0, sizeof(marker));
753 marker.framenr = framenr;
754 copy_v2_v2(marker.pos, co);
755
756 /* a bit arbitrary, but better than creating markers with zero pattern
757 * which is forbidden actually
758 */
759 copy_v2_v2(marker.pattern_corners[0], track->markers[0].pattern_corners[0]);
760 copy_v2_v2(marker.pattern_corners[1], track->markers[0].pattern_corners[1]);
761 copy_v2_v2(marker.pattern_corners[2], track->markers[0].pattern_corners[2]);
762 copy_v2_v2(marker.pattern_corners[3], track->markers[0].pattern_corners[3]);
763
764 new_marker = BKE_tracking_marker_insert(track, &marker);
765
767
768 return new_marker;
769}
770
771static void rna_trackingMarkers_delete_frame(MovieTrackingTrack *track, int framenr)
772{
773 if (track->markersnr == 1) {
774 return;
775 }
776
777 BKE_tracking_marker_delete(track, framenr);
778
780}
781
782static MovieTrackingPlaneMarker *rna_trackingPlaneMarkers_find_frame(
783 MovieTrackingPlaneTrack *plane_track, int framenr, bool exact)
784{
785 if (exact) {
786 return BKE_tracking_plane_marker_get_exact(plane_track, framenr);
787 }
788 else {
789 return BKE_tracking_plane_marker_get(plane_track, framenr);
790 }
791}
792
793static MovieTrackingPlaneMarker *rna_trackingPlaneMarkers_insert_frame(
794 MovieTrackingPlaneTrack *plane_track, int framenr)
795{
796 MovieTrackingPlaneMarker plane_marker, *new_plane_marker;
797
798 memset(&plane_marker, 0, sizeof(plane_marker));
799 plane_marker.framenr = framenr;
800
801 /* a bit arbitrary, but better than creating zero markers */
802 copy_v2_v2(plane_marker.corners[0], plane_track->markers[0].corners[0]);
803 copy_v2_v2(plane_marker.corners[1], plane_track->markers[0].corners[1]);
804 copy_v2_v2(plane_marker.corners[2], plane_track->markers[0].corners[2]);
805 copy_v2_v2(plane_marker.corners[3], plane_track->markers[0].corners[3]);
806
807 new_plane_marker = BKE_tracking_plane_marker_insert(plane_track, &plane_marker);
808
810
811 return new_plane_marker;
812}
813
814static void rna_trackingPlaneMarkers_delete_frame(MovieTrackingPlaneTrack *plane_track,
815 int framenr)
816{
817 if (plane_track->markersnr == 1) {
818 return;
819 }
820
821 BKE_tracking_plane_marker_delete(plane_track, framenr);
822
824}
825
826static MovieTrackingObject *find_object_for_reconstruction(
828{
829 LISTBASE_FOREACH (MovieTrackingObject *, tracking_object, &tracking->objects) {
830 if (&tracking_object->reconstruction == reconstruction) {
831 return tracking_object;
832 }
833 }
834
835 return nullptr;
836}
837
838static MovieReconstructedCamera *rna_trackingCameras_find_frame(
840{
841 MovieClip *clip = (MovieClip *)id;
842 MovieTracking *tracking = &clip->tracking;
843 MovieTrackingObject *tracking_object = find_object_for_reconstruction(tracking, reconstruction);
844 return BKE_tracking_camera_get_reconstructed(tracking, tracking_object, framenr);
845}
846
847static void rna_trackingCameras_matrix_from_frame(ID *id,
849 int framenr,
850 float matrix[16])
851{
852 float mat[4][4];
853
854 MovieClip *clip = (MovieClip *)id;
855 MovieTracking *tracking = &clip->tracking;
856 MovieTrackingObject *tracking_object = find_object_for_reconstruction(tracking, reconstruction);
857 BKE_tracking_camera_get_reconstructed_interpolate(tracking, tracking_object, framenr, mat);
858
859 memcpy(matrix, mat, sizeof(float[4][4]));
860}
861
862#else
863
866 "Perspective",
867 0,
868 "Perspective",
869 "Search for markers that are perspectively deformed (homography) between frames"},
871 "Affine",
872 0,
873 "Affine",
874 "Search for markers that are affine-deformed (t, r, k, and skew) between frames"},
876 "LocRotScale",
877 0,
878 "Location, Rotation & Scale",
879 "Search for markers that are translated, rotated, and scaled between frames"},
881 "LocScale",
882 0,
883 "Location & Scale",
884 "Search for markers that are translated and scaled between frames"},
886 "LocRot",
887 0,
888 "Location & Rotation",
889 "Search for markers that are translated and rotated between frames"},
891 "Loc",
892 0,
893 "Location",
894 "Search for markers that are translated between frames"},
895 {0, nullptr, 0, nullptr, nullptr},
896};
897
899 {TRACK_MATCH_KEYFRAME, "KEYFRAME", 0, "Keyframe", "Track pattern from keyframe to next frame"},
901 "PREV_FRAME",
902 0,
903 "Previous frame",
904 "Track pattern from current frame to next frame"},
905 {0, nullptr, 0, nullptr, nullptr},
906};
907
909{
910 StructRNA *srna;
911 PropertyRNA *prop;
912
913 static const EnumPropertyItem speed_items[] = {
914 {0, "FASTEST", 0, "Fastest", "Track as fast as possible"},
915 {TRACKING_SPEED_DOUBLE, "DOUBLE", 0, "Double", "Track with double speed"},
916 {TRACKING_SPEED_REALTIME, "REALTIME", 0, "Realtime", "Track with realtime speed"},
917 {TRACKING_SPEED_HALF, "HALF", 0, "Half", "Track with half of realtime speed"},
918 {TRACKING_SPEED_QUARTER, "QUARTER", 0, "Quarter", "Track with quarter of realtime speed"},
919 {0, nullptr, 0, nullptr, nullptr},
920 };
921
922 static const EnumPropertyItem cleanup_items[] = {
923 {TRACKING_CLEAN_SELECT, "SELECT", 0, "Select", "Select unclean tracks"},
924 {TRACKING_CLEAN_DELETE_TRACK, "DELETE_TRACK", 0, "Delete Track", "Delete unclean tracks"},
926 "DELETE_SEGMENTS",
927 0,
928 "Delete Segments",
929 "Delete unclean segments of tracks"},
930 {0, nullptr, 0, nullptr, nullptr},
931 };
932
933 srna = RNA_def_struct(brna, "MovieTrackingSettings", nullptr);
934 RNA_def_struct_path_func(srna, "rna_trackingSettings_path");
935 RNA_def_struct_ui_text(srna, "Movie tracking settings", "Match moving settings");
936
937 /* speed */
938 prop = RNA_def_property(srna, "speed", PROP_ENUM, PROP_NONE);
940 RNA_def_property_enum_items(prop, speed_items);
942 "Speed",
943 "Limit speed of tracking to make visual feedback easier "
944 "(this does not affect the tracking quality)");
945
946 /* use keyframe selection */
947 prop = RNA_def_property(srna, "use_keyframe_selection", PROP_BOOLEAN, PROP_NONE);
950 prop, nullptr, "reconstruction_flag", TRACKING_USE_KEYFRAME_SELECTION);
952 "Keyframe Selection",
953 "Automatically select keyframes when solving camera/object motion");
954
955 /* intrinsics refinement during bundle adjustment */
956
957 prop = RNA_def_property(srna, "refine_intrinsics_focal_length", PROP_BOOLEAN, PROP_NONE);
958 RNA_def_property_boolean_sdna(prop, nullptr, "refine_camera_intrinsics", REFINE_FOCAL_LENGTH);
961 prop, "Refine Focal Length", "Refine focal length during camera solving");
962
963 prop = RNA_def_property(srna, "refine_intrinsics_principal_point", PROP_BOOLEAN, PROP_NONE);
964 RNA_def_property_boolean_sdna(prop, nullptr, "refine_camera_intrinsics", REFINE_PRINCIPAL_POINT);
967 prop, "Refine Principal Point", "Refine principal point during camera solving");
968
969 prop = RNA_def_property(srna, "refine_intrinsics_radial_distortion", PROP_BOOLEAN, PROP_NONE);
971 prop, nullptr, "refine_camera_intrinsics", REFINE_RADIAL_DISTORTION);
974 "Refine Radial",
975 "Refine radial coefficients of distortion model during camera solving");
976
977 prop = RNA_def_property(
978 srna, "refine_intrinsics_tangential_distortion", PROP_BOOLEAN, PROP_NONE);
980 prop, nullptr, "refine_camera_intrinsics", REFINE_TANGENTIAL_DISTORTION);
983 prop,
984 "Refine Tangential",
985 "Refine tangential coefficients of distortion model during camera solving");
986
987 /* tool settings */
988
989 /* distance */
990 prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
992 RNA_def_property_float_sdna(prop, nullptr, "dist");
995 prop, "Distance", "Distance between two bundles used for scene scaling");
996
997 /* frames count */
998 prop = RNA_def_property(srna, "clean_frames", PROP_INT, PROP_NONE);
1000 RNA_def_property_int_sdna(prop, nullptr, "clean_frames");
1001 RNA_def_property_range(prop, 0, INT_MAX);
1003 prop,
1004 "Tracked Frames",
1005 "Effect on tracks which are tracked less than the specified amount of frames");
1006
1007 /* re-projection error */
1008 prop = RNA_def_property(srna, "clean_error", PROP_FLOAT, PROP_NONE);
1010 RNA_def_property_float_sdna(prop, nullptr, "clean_error");
1013 prop, "Reprojection Error", "Effect on tracks which have a larger re-projection error");
1014
1015 /* cleanup action */
1016 prop = RNA_def_property(srna, "clean_action", PROP_ENUM, PROP_NONE);
1017 RNA_def_property_enum_sdna(prop, nullptr, "clean_action");
1019 RNA_def_property_enum_items(prop, cleanup_items);
1020 RNA_def_property_ui_text(prop, "Action", "Cleanup action to execute");
1021
1022 /* solver settings */
1023 prop = RNA_def_property(srna, "use_tripod_solver", PROP_BOOLEAN, PROP_NONE);
1025 RNA_def_property_boolean_sdna(prop, nullptr, "motion_flag", TRACKING_MOTION_TRIPOD);
1027 prop,
1028 "Tripod Motion",
1029 "Use special solver to track a stable camera position, such as a tripod");
1030
1031 /* default_limit_frames */
1032 prop = RNA_def_property(srna, "default_frames_limit", PROP_INT, PROP_NONE);
1034 RNA_def_property_int_sdna(prop, nullptr, "default_frames_limit");
1035 RNA_def_property_range(prop, 0, SHRT_MAX);
1037 prop, "Frames Limit", "Every tracking cycle, this number of frames are tracked");
1038
1039 /* default_pattern_match */
1040 prop = RNA_def_property(srna, "default_pattern_match", PROP_ENUM, PROP_NONE);
1042 RNA_def_property_enum_sdna(prop, nullptr, "default_pattern_match");
1045 prop, "Pattern Match", "Track pattern from given frame when tracking marker to next frame");
1046
1047 /* default_margin */
1048 prop = RNA_def_property(srna, "default_margin", PROP_INT, PROP_PIXEL);
1050 RNA_def_property_int_sdna(prop, nullptr, "default_margin");
1051 RNA_def_property_range(prop, 0, 300);
1053 prop, "Margin", "Default distance from image boundary at which marker stops tracking");
1054
1055 /* default_tracking_motion_model */
1056 prop = RNA_def_property(srna, "default_motion_model", PROP_ENUM, PROP_NONE);
1059 RNA_def_property_ui_text(prop, "Motion Model", "Default motion model to use for tracking");
1060
1061 /* default_use_brute */
1062 prop = RNA_def_property(srna, "use_default_brute", PROP_BOOLEAN, PROP_NONE);
1064 prop, nullptr, "default_algorithm_flag", TRACK_ALGORITHM_FLAG_USE_BRUTE);
1066 prop, "Prepass", "Use a brute-force translation-only initialization when tracking");
1068
1069 /* default_use_brute */
1070 prop = RNA_def_property(srna, "use_default_mask", PROP_BOOLEAN, PROP_NONE);
1072 prop, nullptr, "default_algorithm_flag", TRACK_ALGORITHM_FLAG_USE_MASK);
1074 prop,
1075 "Use Mask",
1076 "Use a grease pencil data-block as a mask to use only specified areas of pattern "
1077 "when tracking");
1079
1080 /* default_use_normalization */
1081 prop = RNA_def_property(srna, "use_default_normalization", PROP_BOOLEAN, PROP_NONE);
1083 prop, nullptr, "default_algorithm_flag", TRACK_ALGORITHM_FLAG_USE_NORMALIZATION);
1085 prop, "Normalize", "Normalize light intensities while tracking (slower)");
1087
1088 /* default minimal correlation */
1089 prop = RNA_def_property(srna, "default_correlation_min", PROP_FLOAT, PROP_NONE);
1091 RNA_def_property_float_sdna(prop, nullptr, "default_minimum_correlation");
1092 RNA_def_property_range(prop, 0.0f, 1.0f);
1093 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.05, 3);
1095 prop,
1096 "Correlation",
1097 "Default minimum value of correlation between matched pattern and reference "
1098 "that is still treated as successful tracking");
1099
1100 /* default pattern size */
1101 prop = RNA_def_property(srna, "default_pattern_size", PROP_INT, PROP_NONE);
1103 RNA_def_property_int_sdna(prop, nullptr, "default_pattern_size");
1104 RNA_def_property_range(prop, 5, 1000);
1105 RNA_def_property_update(prop, 0, "rna_tracking_defaultSettings_patternUpdate");
1106 RNA_def_property_ui_text(prop, "Pattern Size", "Size of pattern area for newly created tracks");
1107
1108 /* default search size */
1109 prop = RNA_def_property(srna, "default_search_size", PROP_INT, PROP_NONE);
1111 RNA_def_property_int_sdna(prop, nullptr, "default_search_size");
1112 RNA_def_property_range(prop, 5, 1000);
1113 RNA_def_property_update(prop, 0, "rna_tracking_defaultSettings_searchUpdate");
1114 RNA_def_property_ui_text(prop, "Search Size", "Size of search area for newly created tracks");
1115
1116 /* default use_red_channel */
1117 prop = RNA_def_property(srna, "use_default_red_channel", PROP_BOOLEAN, PROP_NONE);
1118 RNA_def_property_boolean_negative_sdna(prop, nullptr, "default_flag", TRACK_DISABLE_RED);
1119 RNA_def_property_ui_text(prop, "Use Red Channel", "Use red channel from footage for tracking");
1121
1122 /* default_use_green_channel */
1123 prop = RNA_def_property(srna, "use_default_green_channel", PROP_BOOLEAN, PROP_NONE);
1124 RNA_def_property_boolean_negative_sdna(prop, nullptr, "default_flag", TRACK_DISABLE_GREEN);
1126 prop, "Use Green Channel", "Use green channel from footage for tracking");
1128
1129 /* default_use_blue_channel */
1130 prop = RNA_def_property(srna, "use_default_blue_channel", PROP_BOOLEAN, PROP_NONE);
1131 RNA_def_property_boolean_negative_sdna(prop, nullptr, "default_flag", TRACK_DISABLE_BLUE);
1132 RNA_def_property_ui_text(prop, "Use Blue Channel", "Use blue channel from footage for tracking");
1134
1135 prop = RNA_def_property(srna, "default_weight", PROP_FLOAT, PROP_FACTOR);
1136 RNA_def_property_range(prop, 0.0f, 1.0f);
1137 RNA_def_property_ui_text(prop, "Weight", "Influence of newly created track on a final solution");
1138
1139 /* ** object tracking ** */
1140
1141 /* object distance */
1142 prop = RNA_def_property(srna, "object_distance", PROP_FLOAT, PROP_NONE);
1144 RNA_def_property_float_sdna(prop, nullptr, "object_distance");
1146 prop, "Distance", "Distance between two bundles used for object scaling");
1147 RNA_def_property_range(prop, 0.001, 10000);
1149 RNA_def_property_ui_range(prop, 0.001, 10000.0, 1, 3);
1150}
1151
1153{
1154 StructRNA *srna;
1155 PropertyRNA *prop;
1156
1157 static const EnumPropertyItem distortion_model_items[] = {
1159 "POLYNOMIAL",
1160 0,
1161 "Polynomial",
1162 "Radial distortion model which fits common cameras"},
1164 "DIVISION",
1165 0,
1166 "Divisions",
1167 "Division distortion model which "
1168 "better represents wide-angle cameras"},
1169 {TRACKING_DISTORTION_MODEL_NUKE, "NUKE", 0, "Nuke", "Nuke distortion model"},
1170 {TRACKING_DISTORTION_MODEL_BROWN, "BROWN", 0, "Brown", "Brown-Conrady distortion model"},
1171 {0, nullptr, 0, nullptr, nullptr},
1172 };
1173
1174 static const EnumPropertyItem camera_units_items[] = {
1175 {CAMERA_UNITS_PX, "PIXELS", 0, "px", "Use pixels for units of focal length"},
1176 {CAMERA_UNITS_MM, "MILLIMETERS", 0, "mm", "Use millimeters for units of focal length"},
1177 {0, nullptr, 0, nullptr, nullptr},
1178 };
1179
1180 srna = RNA_def_struct(brna, "MovieTrackingCamera", nullptr);
1181 RNA_def_struct_path_func(srna, "rna_trackingCamera_path");
1183 srna, "Movie tracking camera data", "Match-moving camera data for tracking");
1184
1185 /* Distortion model */
1186 prop = RNA_def_property(srna, "distortion_model", PROP_ENUM, PROP_NONE);
1188 RNA_def_property_enum_items(prop, distortion_model_items);
1189 RNA_def_property_ui_text(prop, "Distortion Model", "Distortion model used for camera lenses");
1190 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_resetIntrinsics");
1191
1192 /* Sensor */
1193 prop = RNA_def_property(srna, "sensor_width", PROP_FLOAT, PROP_NONE);
1194 RNA_def_property_float_sdna(prop, nullptr, "sensor_width");
1196 RNA_def_property_range(prop, 0.0f, 500.0f);
1197 RNA_def_property_ui_text(prop, "Sensor", "Width of CCD sensor in millimeters");
1199
1200 /* Focal Length */
1201 prop = RNA_def_property(srna, "focal_length", PROP_FLOAT, PROP_NONE);
1202 RNA_def_property_float_sdna(prop, nullptr, "focal");
1204 RNA_def_property_range(prop, 0.0001f, FLT_MAX);
1205 RNA_def_property_ui_range(prop, 0.0001f, 5000.0f, 1, 2);
1207 prop, "rna_trackingCamera_focal_mm_get", "rna_trackingCamera_focal_mm_set", nullptr);
1208 RNA_def_property_ui_text(prop, "Focal Length", "Camera's focal length");
1210
1211 /* Focal Length in pixels */
1212 prop = RNA_def_property(srna, "focal_length_pixels", PROP_FLOAT, PROP_NONE);
1213 RNA_def_property_float_sdna(prop, nullptr, "focal");
1215 RNA_def_property_range(prop, 0.0f, FLT_MAX);
1216 RNA_def_property_ui_range(prop, 0.0f, 5000.0f, 1, 2);
1217 RNA_def_property_ui_text(prop, "Focal Length", "Camera's focal length");
1219
1220 /* Units */
1221 prop = RNA_def_property(srna, "units", PROP_ENUM, PROP_NONE);
1222 RNA_def_property_enum_sdna(prop, nullptr, "units");
1224 RNA_def_property_enum_items(prop, camera_units_items);
1225 RNA_def_property_ui_text(prop, "Units", "Units used for camera focal length");
1226
1227 /* Principal Point */
1228 prop = RNA_def_property(srna, "principal_point", PROP_FLOAT, PROP_NONE);
1229 RNA_def_property_array(prop, 2);
1230 RNA_def_property_float_sdna(prop, nullptr, "principal_point");
1231 RNA_def_property_range(prop, -1, 1);
1232 RNA_def_property_ui_range(prop, -1, 1, 0.1, 3);
1234 RNA_def_property_ui_text(prop, "Principal Point", "Optical center of lens");
1236
1237 /* Principal Point, in pixels */
1238 prop = RNA_def_property(srna, "principal_point_pixels", PROP_FLOAT, PROP_PIXEL);
1239 RNA_def_property_array(prop, 2);
1242 "rna_trackingCamera_principal_point_pixels_get",
1243 "rna_trackingCamera_principal_point_pixels_set",
1244 nullptr);
1245 RNA_def_property_ui_text(prop, "Principal Point", "Optical center of lens in pixels");
1247
1248 /* Radial distortion parameters */
1249 prop = RNA_def_property(srna, "k1", PROP_FLOAT, PROP_NONE);
1250 RNA_def_property_float_sdna(prop, nullptr, "k1");
1252 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1254 prop, "K1", "First coefficient of third order polynomial radial distortion");
1255 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1256
1257 prop = RNA_def_property(srna, "k2", PROP_FLOAT, PROP_NONE);
1258 RNA_def_property_float_sdna(prop, nullptr, "k2");
1260 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1262 prop, "K2", "Second coefficient of third order polynomial radial distortion");
1263 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1264
1265 prop = RNA_def_property(srna, "k3", PROP_FLOAT, PROP_NONE);
1266 RNA_def_property_float_sdna(prop, nullptr, "k3");
1268 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1270 prop, "K3", "Third coefficient of third order polynomial radial distortion");
1271 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1272
1273 /* Division distortion parameters */
1274 prop = RNA_def_property(srna, "division_k1", PROP_FLOAT, PROP_NONE);
1276 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1277 RNA_def_property_ui_text(prop, "K1", "First coefficient of second order division distortion");
1278 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1279
1280 prop = RNA_def_property(srna, "division_k2", PROP_FLOAT, PROP_NONE);
1282 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1283 RNA_def_property_ui_text(prop, "K2", "Second coefficient of second order division distortion");
1284 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1285
1286 /* Nuke distortion parameters */
1287 prop = RNA_def_property(srna, "nuke_k1", PROP_FLOAT, PROP_NONE);
1289 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1290 RNA_def_property_ui_text(prop, "K1", "First coefficient of second order Nuke distortion");
1291 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1292
1293 prop = RNA_def_property(srna, "nuke_k2", PROP_FLOAT, PROP_NONE);
1295 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1296 RNA_def_property_ui_text(prop, "K2", "Second coefficient of second order Nuke distortion");
1297 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1298
1299 /* Brown-Conrady distortion parameters */
1300 prop = RNA_def_property(srna, "brown_k1", PROP_FLOAT, PROP_NONE);
1302 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1304 prop, "K1", "First coefficient of fourth order Brown-Conrady radial distortion");
1305 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1306
1307 prop = RNA_def_property(srna, "brown_k2", PROP_FLOAT, PROP_NONE);
1309 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1311 prop, "K2", "Second coefficient of fourth order Brown-Conrady radial distortion");
1312 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1313
1314 prop = RNA_def_property(srna, "brown_k3", PROP_FLOAT, PROP_NONE);
1316 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1318 prop, "K3", "Third coefficient of fourth order Brown-Conrady radial distortion");
1319 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1320
1321 prop = RNA_def_property(srna, "brown_k4", PROP_FLOAT, PROP_NONE);
1323 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1325 prop, "K4", "Fourth coefficient of fourth order Brown-Conrady radial distortion");
1326 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1327
1328 prop = RNA_def_property(srna, "brown_p1", PROP_FLOAT, PROP_NONE);
1330 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1332 prop, "P1", "First coefficient of second order Brown-Conrady tangential distortion");
1333 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1334
1335 prop = RNA_def_property(srna, "brown_p2", PROP_FLOAT, PROP_NONE);
1337 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1339 prop, "P2", "Second coefficient of second order Brown-Conrady tangential distortion");
1340 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1341
1342 /* pixel aspect */
1343 prop = RNA_def_property(srna, "pixel_aspect", PROP_FLOAT, PROP_XYZ);
1344 RNA_def_property_float_sdna(prop, nullptr, "pixel_aspect");
1346 RNA_def_property_range(prop, 0.1f, FLT_MAX);
1347 RNA_def_property_ui_range(prop, 0.1f, 5000.0f, 1, 2);
1349 RNA_def_property_ui_text(prop, "Pixel Aspect Ratio", "Pixel aspect ratio");
1350 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1351}
1352
1354{
1355 StructRNA *srna;
1356 PropertyRNA *prop;
1357
1358 static int boundbox_dimsize[] = {2, 2};
1359
1360 srna = RNA_def_struct(brna, "MovieTrackingMarker", nullptr);
1362 srna, "Movie tracking marker data", "Match-moving marker data for tracking");
1363
1364 /* position */
1365 prop = RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION);
1366 RNA_def_property_array(prop, 2);
1368 RNA_def_property_float_sdna(prop, nullptr, "pos");
1369 RNA_def_property_ui_text(prop, "Position", "Marker position at frame in normalized coordinates");
1371
1372 /* frame */
1373 prop = RNA_def_property(srna, "frame", PROP_INT, PROP_NONE);
1374 RNA_def_property_int_sdna(prop, nullptr, "framenr");
1375 RNA_def_property_ui_text(prop, "Frame", "Frame number marker is keyframed on");
1376 RNA_def_property_int_funcs(prop, nullptr, "rna_trackingMarker_frame_set", nullptr);
1378
1379 /* enable */
1380 prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
1381 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MARKER_DISABLED);
1382 RNA_def_property_ui_text(prop, "Mode", "Is marker muted for current frame");
1384
1385 /* pattern */
1386 prop = RNA_def_property(srna, "pattern_corners", PROP_FLOAT, PROP_MATRIX);
1387 RNA_def_property_float_sdna(prop, nullptr, "pattern_corners");
1392 "Pattern Corners",
1393 "Array of coordinates which represents pattern's corners in "
1394 "normalized coordinates relative to marker position");
1395 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_markerPattern_update");
1396
1397 prop = RNA_def_property(srna, "pattern_bound_box", PROP_FLOAT, PROP_NONE);
1398 RNA_def_property_multi_array(prop, 2, boundbox_dimsize);
1400 RNA_def_property_float_funcs(prop, "rna_tracking_markerPattern_boundbox_get", nullptr, nullptr);
1402 prop, "Pattern Bounding Box", "Pattern area bounding box in normalized coordinates");
1403
1404 /* search */
1405 prop = RNA_def_property(srna, "search_min", PROP_FLOAT, PROP_TRANSLATION);
1406 RNA_def_property_array(prop, 2);
1408 RNA_def_property_float_sdna(prop, nullptr, "search_min");
1411 "Search Min",
1412 "Left-bottom corner of search area in normalized coordinates relative "
1413 "to marker position");
1414 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_markerSearch_update");
1415
1416 prop = RNA_def_property(srna, "search_max", PROP_FLOAT, PROP_TRANSLATION);
1417 RNA_def_property_array(prop, 2);
1419 RNA_def_property_float_sdna(prop, nullptr, "search_max");
1422 "Search Max",
1423 "Right-bottom corner of search area in normalized coordinates relative "
1424 "to marker position");
1425 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_markerSearch_update");
1426
1427 /* is marker keyframed */
1428 prop = RNA_def_property(srna, "is_keyed", PROP_BOOLEAN, PROP_NONE);
1432 prop, "Keyframed", "Whether the position of the marker is keyframed or tracked");
1433}
1434
1436{
1437 StructRNA *srna;
1438 FunctionRNA *func;
1439 PropertyRNA *parm;
1440
1441 RNA_def_property_srna(cprop, "MovieTrackingMarkers");
1442 srna = RNA_def_struct(brna, "MovieTrackingMarkers", nullptr);
1443 RNA_def_struct_sdna(srna, "MovieTrackingTrack");
1445 srna, "Movie Tracking Markers", "Collection of markers for movie tracking track");
1446
1447 func = RNA_def_function(srna, "find_frame", "rna_trackingMarkers_find_frame");
1448 RNA_def_function_ui_description(func, "Get marker for specified frame");
1449 parm = RNA_def_int(func,
1450 "frame",
1451 1,
1452 MINFRAME,
1453 MAXFRAME,
1454 "Frame",
1455 "Frame number to find marker for",
1456 MINFRAME,
1457 MAXFRAME);
1459 RNA_def_boolean(func,
1460 "exact",
1461 true,
1462 "Exact",
1463 "Get marker at exact frame number rather than get estimated marker");
1464 parm = RNA_def_pointer(func, "marker", "MovieTrackingMarker", "", "Marker for specified frame");
1465 RNA_def_function_return(func, parm);
1466
1467 func = RNA_def_function(srna, "insert_frame", "rna_trackingMarkers_insert_frame");
1468 RNA_def_function_ui_description(func, "Insert a new marker at the specified frame");
1469 parm = RNA_def_int(func,
1470 "frame",
1471 1,
1472 MINFRAME,
1473 MAXFRAME,
1474 "Frame",
1475 "Frame number to insert marker to",
1476 MINFRAME,
1477 MAXFRAME);
1480 func,
1481 "co",
1482 2,
1483 nullptr,
1484 -1.0,
1485 1.0,
1486 "Coordinate",
1487 "Place new marker at the given frame using specified in normalized space coordinates",
1488 -1.0,
1489 1.0);
1491 parm = RNA_def_pointer(func, "marker", "MovieTrackingMarker", "", "Newly created marker");
1492 RNA_def_function_return(func, parm);
1493
1494 func = RNA_def_function(srna, "delete_frame", "rna_trackingMarkers_delete_frame");
1495 RNA_def_function_ui_description(func, "Delete marker at specified frame");
1496 parm = RNA_def_int(func,
1497 "frame",
1498 1,
1499 MINFRAME,
1500 MAXFRAME,
1501 "Frame",
1502 "Frame number to delete marker from",
1503 MINFRAME,
1504 MAXFRAME);
1506}
1507
1509{
1510 StructRNA *srna;
1511 PropertyRNA *prop;
1512
1514
1515 srna = RNA_def_struct(brna, "MovieTrackingTrack", nullptr);
1516 RNA_def_struct_path_func(srna, "rna_trackingTrack_path");
1518 srna, "Movie tracking track data", "Match-moving track data for tracking");
1519 RNA_def_struct_ui_icon(srna, ICON_ANIM_DATA);
1520
1521 /* name */
1522 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1523 RNA_def_property_ui_text(prop, "Name", "Unique name of track");
1524 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_trackingTrack_name_set");
1527 RNA_def_struct_name_property(srna, prop);
1528
1529 /* limit frames */
1530 prop = RNA_def_property(srna, "frames_limit", PROP_INT, PROP_NONE);
1532 RNA_def_property_int_sdna(prop, nullptr, "frames_limit");
1534 RNA_def_property_range(prop, 0, SHRT_MAX);
1536 prop, "Frames Limit", "Every tracking cycle, this number of frames are tracked");
1537
1538 /* pattern match */
1539 prop = RNA_def_property(srna, "pattern_match", PROP_ENUM, PROP_NONE);
1541 RNA_def_property_enum_sdna(prop, nullptr, "pattern_match");
1545 prop, "Pattern Match", "Track pattern from given frame when tracking marker to next frame");
1546
1547 /* margin */
1548 prop = RNA_def_property(srna, "margin", PROP_INT, PROP_PIXEL);
1550 RNA_def_property_int_sdna(prop, nullptr, "margin");
1552 RNA_def_property_range(prop, 0, 300);
1554 prop, "Margin", "Distance from image boundary at which marker stops tracking");
1555
1556 /* tracking motion model */
1557 prop = RNA_def_property(srna, "motion_model", PROP_ENUM, PROP_NONE);
1561 RNA_def_property_ui_text(prop, "Motion Model", "Default motion model to use for tracking");
1562
1563 /* minimum correlation */
1564 prop = RNA_def_property(srna, "correlation_min", PROP_FLOAT, PROP_NONE);
1566 RNA_def_property_float_sdna(prop, nullptr, "minimum_correlation");
1567 RNA_def_property_range(prop, 0.0f, 1.0f);
1568 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.05, 3);
1570 "Correlation",
1571 "Minimal value of correlation between matched pattern and reference "
1572 "that is still treated as successful tracking");
1573
1574 /* use_brute */
1575 prop = RNA_def_property(srna, "use_brute", PROP_BOOLEAN, PROP_NONE);
1576 RNA_def_property_boolean_sdna(prop, nullptr, "algorithm_flag", TRACK_ALGORITHM_FLAG_USE_BRUTE);
1579 prop, "Prepass", "Use a brute-force translation only pre-track before refinement");
1581
1582 /* use_brute */
1583 prop = RNA_def_property(srna, "use_mask", PROP_BOOLEAN, PROP_NONE);
1584 RNA_def_property_boolean_sdna(prop, nullptr, "algorithm_flag", TRACK_ALGORITHM_FLAG_USE_MASK);
1586 prop,
1587 "Use Mask",
1588 "Use a grease pencil data-block as a mask to use only specified areas of pattern "
1589 "when tracking");
1591
1592 /* use_normalization */
1593 prop = RNA_def_property(srna, "use_normalization", PROP_BOOLEAN, PROP_NONE);
1595 prop, nullptr, "algorithm_flag", TRACK_ALGORITHM_FLAG_USE_NORMALIZATION);
1598 prop, "Normalize", "Normalize light intensities while tracking (Slower)");
1600
1601 /* markers */
1602 prop = RNA_def_property(srna, "markers", PROP_COLLECTION, PROP_NONE);
1603 RNA_def_property_struct_type(prop, "MovieTrackingMarker");
1604 RNA_def_property_collection_sdna(prop, nullptr, "markers", "markersnr");
1605 RNA_def_property_ui_text(prop, "Markers", "Collection of markers in track");
1606 rna_def_trackingMarkers(brna, prop);
1607
1608 /* ** channels ** */
1609
1610 /* use_red_channel */
1611 prop = RNA_def_property(srna, "use_red_channel", PROP_BOOLEAN, PROP_NONE);
1614 RNA_def_property_ui_text(prop, "Use Red Channel", "Use red channel from footage for tracking");
1616
1617 /* use_green_channel */
1618 prop = RNA_def_property(srna, "use_green_channel", PROP_BOOLEAN, PROP_NONE);
1622 prop, "Use Green Channel", "Use green channel from footage for tracking");
1624
1625 /* use_blue_channel */
1626 prop = RNA_def_property(srna, "use_blue_channel", PROP_BOOLEAN, PROP_NONE);
1629 RNA_def_property_ui_text(prop, "Use Blue Channel", "Use blue channel from footage for tracking");
1631
1632 /* preview_grayscale */
1633 prop = RNA_def_property(srna, "use_grayscale_preview", PROP_BOOLEAN, PROP_NONE);
1637 prop, "Grayscale", "Display what the tracking algorithm sees in the preview");
1639
1640 /* preview_alpha */
1641 prop = RNA_def_property(srna, "use_alpha_preview", PROP_BOOLEAN, PROP_NONE);
1642 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_PREVIEW_ALPHA);
1644 RNA_def_property_ui_text(prop, "Alpha", "Apply track's mask on displaying preview");
1646
1647 /* has bundle */
1648 prop = RNA_def_property(srna, "has_bundle", PROP_BOOLEAN, PROP_NONE);
1649 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_HAS_BUNDLE);
1651 RNA_def_property_ui_text(prop, "Has Bundle", "True if track has a valid bundle");
1652
1653 /* bundle position */
1654 prop = RNA_def_property(srna, "bundle", PROP_FLOAT, PROP_TRANSLATION);
1655 RNA_def_property_array(prop, 3);
1656 RNA_def_property_float_sdna(prop, nullptr, "bundle_pos");
1658 RNA_def_property_ui_text(prop, "Bundle", "Position of bundle reconstructed from this track");
1660
1661 /* hide */
1662 prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
1663 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_HIDDEN);
1665 RNA_def_property_ui_text(prop, "Hide", "Track is hidden");
1667
1668 /* select */
1669 prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
1671 prop, "rna_trackingTrack_select_get", "rna_trackingTrack_select_set");
1672 RNA_def_property_ui_text(prop, "Select", "Track is selected");
1674
1675 /* select_anchor */
1676 prop = RNA_def_property(srna, "select_anchor", PROP_BOOLEAN, PROP_NONE);
1677 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SELECT);
1678 RNA_def_property_ui_text(prop, "Select Anchor", "Track's anchor point is selected");
1680
1681 /* select_pattern */
1682 prop = RNA_def_property(srna, "select_pattern", PROP_BOOLEAN, PROP_NONE);
1683 RNA_def_property_boolean_sdna(prop, nullptr, "pat_flag", SELECT);
1684 RNA_def_property_ui_text(prop, "Select Pattern", "Track's pattern area is selected");
1686
1687 /* select_search */
1688 prop = RNA_def_property(srna, "select_search", PROP_BOOLEAN, PROP_NONE);
1689 RNA_def_property_boolean_sdna(prop, nullptr, "search_flag", SELECT);
1690 RNA_def_property_ui_text(prop, "Select Search", "Track's search area is selected");
1692
1693 /* locked */
1694 prop = RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
1695 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_LOCKED);
1697 RNA_def_property_ui_text(prop, "Lock", "Track is locked and all changes to it are disabled");
1699
1700 /* custom color */
1701 prop = RNA_def_property(srna, "use_custom_color", PROP_BOOLEAN, PROP_NONE);
1702 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_CUSTOMCOLOR);
1704 RNA_def_property_ui_text(prop, "Custom Color", "Use custom color instead of theme-defined");
1706
1707 /* color */
1708 prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR_GAMMA);
1709 RNA_def_property_array(prop, 3);
1710 RNA_def_property_range(prop, 0.0f, 1.0f);
1712 prop,
1713 "Color",
1714 "Color of the track in the Movie Clip Editor and the 3D viewport after a solve");
1716
1717 /* average error */
1718 prop = RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE);
1719 RNA_def_property_float_sdna(prop, nullptr, "error");
1721 RNA_def_property_ui_text(prop, "Average Error", "Average error of re-projection");
1722
1723 /* grease pencil */
1724 prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
1725 RNA_def_property_pointer_sdna(prop, nullptr, "gpd");
1726 RNA_def_property_struct_type(prop, "GreasePencil");
1728 prop, nullptr, nullptr, nullptr, "rna_GPencil_datablocks_annotations_poll");
1730 RNA_def_property_ui_text(prop, "Grease Pencil", "Grease pencil data for this track");
1732
1733 /* weight */
1734 prop = RNA_def_property(srna, "weight", PROP_FLOAT, PROP_FACTOR);
1735 RNA_def_property_float_sdna(prop, nullptr, "weight");
1736 RNA_def_property_range(prop, 0.0f, 1.0f);
1737 RNA_def_property_ui_text(prop, "Weight", "Influence of this track on a final solution");
1738
1739 /* weight_stab */
1740 prop = RNA_def_property(srna, "weight_stab", PROP_FLOAT, PROP_FACTOR);
1741 RNA_def_property_float_sdna(prop, nullptr, "weight_stab");
1742 RNA_def_property_range(prop, 0.0f, 1.0f);
1743 RNA_def_property_ui_text(prop, "Stab Weight", "Influence of this track on 2D stabilization");
1744
1745 /* offset */
1746 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_TRANSLATION);
1747 RNA_def_property_array(prop, 2);
1749 RNA_def_property_float_sdna(prop, nullptr, "offset");
1750 RNA_def_property_ui_text(prop, "Offset", "Offset of track from the parenting point");
1752}
1753
1755{
1756 StructRNA *srna;
1757 PropertyRNA *prop;
1758
1759 srna = RNA_def_struct(brna, "MovieTrackingPlaneMarker", nullptr);
1761 srna, "Movie Tracking Plane Marker Data", "Match-moving plane marker data for tracking");
1762
1763 /* frame */
1764 prop = RNA_def_property(srna, "frame", PROP_INT, PROP_NONE);
1765 RNA_def_property_int_sdna(prop, nullptr, "framenr");
1766 RNA_def_property_ui_text(prop, "Frame", "Frame number marker is keyframed on");
1767 RNA_def_property_int_funcs(prop, nullptr, "rna_trackingPlaneMarker_frame_set", nullptr);
1769
1770 /* Corners */
1771 prop = RNA_def_property(srna, "corners", PROP_FLOAT, PROP_MATRIX);
1772 RNA_def_property_float_sdna(prop, nullptr, "corners");
1777 "Corners",
1778 "Array of coordinates which represents UI rectangle corners in "
1779 "frame normalized coordinates");
1781
1782 /* enable */
1783 prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
1785 RNA_def_property_ui_text(prop, "Mode", "Is marker muted for current frame");
1787}
1788
1790{
1791 StructRNA *srna;
1792 FunctionRNA *func;
1793 PropertyRNA *parm;
1794
1795 RNA_def_property_srna(cprop, "MovieTrackingPlaneMarkers");
1796 srna = RNA_def_struct(brna, "MovieTrackingPlaneMarkers", nullptr);
1797 RNA_def_struct_sdna(srna, "MovieTrackingPlaneTrack");
1799 "Movie Tracking Plane Markers",
1800 "Collection of markers for movie tracking plane track");
1801
1802 func = RNA_def_function(srna, "find_frame", "rna_trackingPlaneMarkers_find_frame");
1803 RNA_def_function_ui_description(func, "Get plane marker for specified frame");
1804 parm = RNA_def_int(func,
1805 "frame",
1806 1,
1807 MINFRAME,
1808 MAXFRAME,
1809 "Frame",
1810 "Frame number to find marker for",
1811 MINFRAME,
1812 MAXFRAME);
1814 RNA_def_boolean(func,
1815 "exact",
1816 true,
1817 "Exact",
1818 "Get plane marker at exact frame number rather than get estimated marker");
1819 parm = RNA_def_pointer(
1820 func, "plane_marker", "MovieTrackingPlaneMarker", "", "Plane marker for specified frame");
1821 RNA_def_function_return(func, parm);
1822
1823 func = RNA_def_function(srna, "insert_frame", "rna_trackingPlaneMarkers_insert_frame");
1824 RNA_def_function_ui_description(func, "Insert a new plane marker at the specified frame");
1825 parm = RNA_def_int(func,
1826 "frame",
1827 1,
1828 MINFRAME,
1829 MAXFRAME,
1830 "Frame",
1831 "Frame number to insert marker to",
1832 MINFRAME,
1833 MAXFRAME);
1835 parm = RNA_def_pointer(
1836 func, "plane_marker", "MovieTrackingPlaneMarker", "", "Newly created plane marker");
1837 RNA_def_function_return(func, parm);
1838
1839 func = RNA_def_function(srna, "delete_frame", "rna_trackingPlaneMarkers_delete_frame");
1840 RNA_def_function_ui_description(func, "Delete plane marker at specified frame");
1841 parm = RNA_def_int(func,
1842 "frame",
1843 1,
1844 MINFRAME,
1845 MAXFRAME,
1846 "Frame",
1847 "Frame number to delete plane marker from",
1848 MINFRAME,
1849 MAXFRAME);
1851}
1852
1854{
1855 StructRNA *srna;
1856 PropertyRNA *prop;
1857
1859
1860 srna = RNA_def_struct(brna, "MovieTrackingPlaneTrack", nullptr);
1861 RNA_def_struct_path_func(srna, "rna_trackingPlaneTrack_path");
1863 srna, "Movie tracking plane track data", "Match-moving plane track data for tracking");
1864 RNA_def_struct_ui_icon(srna, ICON_ANIM_DATA);
1865
1866 /* name */
1867 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1868 RNA_def_property_ui_text(prop, "Name", "Unique name of track");
1869 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_trackingPlaneTrack_name_set");
1872 RNA_def_struct_name_property(srna, prop);
1873
1874 /* markers */
1875 prop = RNA_def_property(srna, "markers", PROP_COLLECTION, PROP_NONE);
1876 RNA_def_property_struct_type(prop, "MovieTrackingPlaneMarker");
1877 RNA_def_property_collection_sdna(prop, nullptr, "markers", "markersnr");
1878 RNA_def_property_ui_text(prop, "Markers", "Collection of markers in track");
1879 rna_def_trackingPlaneMarkers(brna, prop);
1880
1881 /* select */
1882 prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
1883 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SELECT);
1884 RNA_def_property_ui_text(prop, "Select", "Plane track is selected");
1886
1887 /* auto keyframing */
1888 prop = RNA_def_property(srna, "use_auto_keying", PROP_BOOLEAN, PROP_NONE);
1889 RNA_def_property_boolean_sdna(prop, nullptr, "flag", PLANE_TRACK_AUTOKEY);
1892 prop, "Auto Keyframe", "Automatic keyframe insertion when moving plane corners");
1893 RNA_def_property_ui_icon(prop, ICON_REC, 0);
1894
1895 /* image */
1896 prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
1897 RNA_def_property_struct_type(prop, "Image");
1900 prop, "Image", "Image displayed in the track during editing in clip editor");
1902
1903 /* image opacity */
1904 prop = RNA_def_property(srna, "image_opacity", PROP_FLOAT, PROP_FACTOR);
1906 RNA_def_property_range(prop, 0.0, 1.0);
1907 RNA_def_property_ui_text(prop, "Image Opacity", "Opacity of the image");
1909}
1910
1912{
1913 StructRNA *srna;
1914 PropertyRNA *prop;
1915
1916 static const EnumPropertyItem filter_items[] = {
1918 "NEAREST",
1919 0,
1920 "Nearest",
1921 "No interpolation, use nearest neighbor pixel"},
1923 "BILINEAR",
1924 0,
1925 "Bilinear",
1926 "Simple interpolation between adjacent pixels"},
1927 {TRACKING_FILTER_BICUBIC, "BICUBIC", 0, "Bicubic", "High quality pixel interpolation"},
1928 {0, nullptr, 0, nullptr, nullptr},
1929 };
1930
1931 srna = RNA_def_struct(brna, "MovieTrackingStabilization", nullptr);
1932 RNA_def_struct_path_func(srna, "rna_trackingStabilization_path");
1934 srna, "Movie tracking stabilization data", "2D stabilization based on tracking markers");
1935
1936 /* 2d stabilization */
1937 prop = RNA_def_property(srna, "use_2d_stabilization", PROP_BOOLEAN, PROP_NONE);
1940 RNA_def_property_ui_text(prop, "Use 2D Stabilization", "Use 2D stabilization for footage");
1941 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1942
1943 /* use_stabilize_rotation */
1944 prop = RNA_def_property(srna, "use_stabilize_rotation", PROP_BOOLEAN, PROP_NONE);
1948 prop, "Stabilize Rotation", "Stabilize detected rotation around center of frame");
1949 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1950
1951 /* use_stabilize_scale */
1952 prop = RNA_def_property(srna, "use_stabilize_scale", PROP_BOOLEAN, PROP_NONE);
1956 prop, "Stabilize Scale", "Compensate any scale changes relative to center of rotation");
1957 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1958
1959 /* tracks */
1960 prop = RNA_def_property(srna, "tracks", PROP_COLLECTION, PROP_NONE);
1962 "rna_tracking_stabTracks_begin",
1963 "rna_iterator_listbase_next",
1964 "rna_iterator_listbase_end",
1965 "rna_iterator_listbase_get",
1966 nullptr,
1967 nullptr,
1968 nullptr,
1969 nullptr);
1970 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
1972 prop, "Translation Tracks", "Collection of tracks used for 2D stabilization (translation)");
1973 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1974
1975 /* active track index */
1976 prop = RNA_def_property(srna, "active_track_index", PROP_INT, PROP_NONE);
1977 RNA_def_property_int_sdna(prop, nullptr, "act_track");
1980 "rna_tracking_stabTracks_active_index_get",
1981 "rna_tracking_stabTracks_active_index_set",
1982 "rna_tracking_stabTracks_active_index_range");
1984 "Active Track Index",
1985 "Index of active track in translation stabilization tracks list");
1986
1987 /* tracks used for rotation stabilization */
1988 prop = RNA_def_property(srna, "rotation_tracks", PROP_COLLECTION, PROP_NONE);
1990 "rna_tracking_stabRotTracks_begin",
1991 "rna_iterator_listbase_next",
1992 "rna_iterator_listbase_end",
1993 "rna_iterator_listbase_get",
1994 nullptr,
1995 nullptr,
1996 nullptr,
1997 nullptr);
1998 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2000 prop, "Rotation Tracks", "Collection of tracks used for 2D stabilization (translation)");
2001 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2002
2003 /* active rotation track index */
2004 prop = RNA_def_property(srna, "active_rotation_track_index", PROP_INT, PROP_NONE);
2005 RNA_def_property_int_sdna(prop, nullptr, "act_rot_track");
2008 "rna_tracking_stabRotTracks_active_index_get",
2009 "rna_tracking_stabRotTracks_active_index_set",
2010 "rna_tracking_stabRotTracks_active_index_range");
2012 "Active Rotation Track Index",
2013 "Index of active track in rotation stabilization tracks list");
2014
2015 /* anchor frame */
2016 prop = RNA_def_property(srna, "anchor_frame", PROP_INT, PROP_NONE);
2017 RNA_def_property_int_sdna(prop, nullptr, "anchor_frame");
2021 "Anchor Frame",
2022 "Reference point to anchor stabilization "
2023 "(other frames will be adjusted relative to this frame's position)");
2024 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2025
2026 /* target position */
2027 prop = RNA_def_property(srna, "target_position", PROP_FLOAT, PROP_TRANSLATION);
2028 RNA_def_property_array(prop, 2);
2030 prop, -FLT_MAX, FLT_MAX, 1, 3); /* increment in steps of 0.01 and show 3 digit after point */
2031 RNA_def_property_float_sdna(prop, nullptr, "target_pos");
2033 "Expected Position",
2034 "Known relative offset of original shot, will be subtracted "
2035 "(e.g. for panning shot, can be animated)");
2037
2038 /* target rotation */
2039 prop = RNA_def_property(srna, "target_rotation", PROP_FLOAT, PROP_ANGLE);
2040 RNA_def_property_float_sdna(prop, nullptr, "target_rot");
2042 RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 10.0f, 3);
2044 prop,
2045 "Expected Rotation",
2046 "Rotation present on original shot, will be compensated (e.g. for deliberate tilting)");
2048
2049 /* target scale */
2050 prop = RNA_def_property(srna, "target_scale", PROP_FLOAT, PROP_FACTOR);
2051 RNA_def_property_float_sdna(prop, nullptr, "scale");
2052 RNA_def_property_range(prop, FLT_EPSILON, FLT_MAX);
2054 prop, 0.01f, 10.0f, 0.001f, 3); /* increment in steps of 0.001. Show 3 digit after point */
2056 "Expected Scale",
2057 "Explicitly scale resulting frame to compensate zoom of original shot");
2058 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2059
2060 /* Auto-scale. */
2061 prop = RNA_def_property(srna, "use_autoscale", PROP_BOOLEAN, PROP_NONE);
2062 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACKING_AUTOSCALE);
2065 prop, "Autoscale", "Automatically scale footage to cover unfilled areas when stabilizing");
2066 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2067
2068 /* max scale */
2069 prop = RNA_def_property(srna, "scale_max", PROP_FLOAT, PROP_FACTOR);
2070 RNA_def_property_float_sdna(prop, nullptr, "maxscale");
2071 RNA_def_property_range(prop, 0.0f, 10.0f);
2072 RNA_def_property_ui_text(prop, "Maximal Scale", "Limit the amount of automatic scaling");
2073 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2074
2075 /* influence_location */
2076 prop = RNA_def_property(srna, "influence_location", PROP_FLOAT, PROP_FACTOR);
2077 RNA_def_property_float_sdna(prop, nullptr, "locinf");
2078 RNA_def_property_range(prop, 0.0f, 1.0f);
2080 prop, "Location Influence", "Influence of stabilization algorithm on footage location");
2081 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2082
2083 /* influence_scale */
2084 prop = RNA_def_property(srna, "influence_scale", PROP_FLOAT, PROP_FACTOR);
2085 RNA_def_property_float_sdna(prop, nullptr, "scaleinf");
2086 RNA_def_property_range(prop, 0.0f, 1.0f);
2088 prop, "Scale Influence", "Influence of stabilization algorithm on footage scale");
2089 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2090
2091 /* influence_rotation */
2092 prop = RNA_def_property(srna, "influence_rotation", PROP_FLOAT, PROP_FACTOR);
2093 RNA_def_property_float_sdna(prop, nullptr, "rotinf");
2094 RNA_def_property_range(prop, 0.0f, 1.0f);
2096 prop, "Rotation Influence", "Influence of stabilization algorithm on footage rotation");
2097 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2098
2099 /* filter */
2100 prop = RNA_def_property(srna, "filter_type", PROP_ENUM, PROP_NONE);
2101 RNA_def_property_enum_sdna(prop, nullptr, "filter");
2102 RNA_def_property_enum_items(prop, filter_items);
2104 prop,
2105 "Interpolate",
2106 "Interpolation to use for sub-pixel shifts and rotations due to stabilization");
2107 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2108
2109 /* UI display : show participating tracks */
2110 prop = RNA_def_property(srna, "show_tracks_expanded", PROP_BOOLEAN, PROP_NONE);
2114 prop, "Show Tracks", "Show UI list of tracks participating in stabilization");
2115 RNA_def_property_ui_icon(prop, ICON_RIGHTARROW, 1);
2116}
2117
2119{
2120 StructRNA *srna;
2121 PropertyRNA *prop;
2122
2123 srna = RNA_def_struct(brna, "MovieReconstructedCamera", nullptr);
2125 "Movie tracking reconstructed camera data",
2126 "Match-moving reconstructed camera data from tracker");
2127
2128 /* frame */
2129 prop = RNA_def_property(srna, "frame", PROP_INT, PROP_NONE);
2131 RNA_def_property_int_sdna(prop, nullptr, "framenr");
2132 RNA_def_property_ui_text(prop, "Frame", "Frame number marker is keyframed on");
2133
2134 /* matrix */
2135 prop = RNA_def_property(srna, "matrix", PROP_FLOAT, PROP_MATRIX);
2136 RNA_def_property_float_sdna(prop, nullptr, "mat");
2139 RNA_def_property_ui_text(prop, "Matrix", "Worldspace transformation matrix");
2140
2141 /* average_error */
2142 prop = RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE);
2143 RNA_def_property_float_sdna(prop, nullptr, "error");
2145 RNA_def_property_ui_text(prop, "Average Error", "Average error of reconstruction");
2146}
2147
2149{
2150 StructRNA *srna;
2151 FunctionRNA *func;
2152 PropertyRNA *parm;
2153
2154 srna = RNA_def_struct(brna, "MovieTrackingReconstructedCameras", nullptr);
2155 RNA_def_struct_sdna(srna, "MovieTrackingReconstruction");
2156 RNA_def_struct_ui_text(srna, "Reconstructed Cameras", "Collection of solved cameras");
2157
2158 func = RNA_def_function(srna, "find_frame", "rna_trackingCameras_find_frame");
2160 RNA_def_function_ui_description(func, "Find a reconstructed camera for a give frame number");
2161 RNA_def_int(func,
2162 "frame",
2163 1,
2164 MINFRAME,
2165 MAXFRAME,
2166 "Frame",
2167 "Frame number to find camera for",
2168 MINFRAME,
2169 MAXFRAME);
2170 parm = RNA_def_pointer(
2171 func, "camera", "MovieReconstructedCamera", "", "Camera for a given frame");
2172 RNA_def_function_return(func, parm);
2173
2174 func = RNA_def_function(srna, "matrix_from_frame", "rna_trackingCameras_matrix_from_frame");
2176 RNA_def_function_ui_description(func, "Return interpolated camera matrix for a given frame");
2177 RNA_def_int(func,
2178 "frame",
2179 1,
2180 MINFRAME,
2181 MAXFRAME,
2182 "Frame",
2183 "Frame number to find camera for",
2184 MINFRAME,
2185 MAXFRAME);
2186 parm = RNA_def_float_matrix(func,
2187 "matrix",
2188 4,
2189 4,
2190 nullptr,
2191 -FLT_MAX,
2192 FLT_MAX,
2193 "Matrix",
2194 "Interpolated camera matrix for a given frame",
2195 -FLT_MAX,
2196 FLT_MAX);
2198 parm, PROP_THICK_WRAP, ParameterFlag(0)); /* needed for string return value */
2199 RNA_def_function_output(func, parm);
2200}
2201
2203{
2204 StructRNA *srna;
2205 PropertyRNA *prop;
2206
2208
2209 srna = RNA_def_struct(brna, "MovieTrackingReconstruction", nullptr);
2211 srna, "Movie tracking reconstruction data", "Match-moving reconstruction data from tracker");
2212
2213 /* is_valid */
2214 prop = RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
2218 prop, "Reconstructed", "Is tracking data contains valid reconstruction information");
2219
2220 /* average_error */
2221 prop = RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE);
2222 RNA_def_property_float_sdna(prop, nullptr, "error");
2224 RNA_def_property_ui_text(prop, "Average Error", "Average error of reconstruction");
2225
2226 /* cameras */
2227 prop = RNA_def_property(srna, "cameras", PROP_COLLECTION, PROP_NONE);
2228 RNA_def_property_struct_type(prop, "MovieReconstructedCamera");
2229 RNA_def_property_collection_sdna(prop, nullptr, "cameras", "camnr");
2230 RNA_def_property_ui_text(prop, "Cameras", "Collection of solved cameras");
2231 RNA_def_property_srna(prop, "MovieTrackingReconstructedCameras");
2232}
2233
2235{
2236 StructRNA *srna;
2237 FunctionRNA *func;
2238 PropertyRNA *prop;
2239 PropertyRNA *parm;
2240
2241 srna = RNA_def_struct(brna, "MovieTrackingTracks", nullptr);
2242 RNA_def_struct_sdna(srna, "MovieTracking");
2243 RNA_def_struct_ui_text(srna, "Movie Tracks", "Collection of movie tracking tracks");
2244
2245 func = RNA_def_function(srna, "new", "rna_trackingTracks_new");
2247 RNA_def_function_ui_description(func, "Create new motion track in this movie clip");
2248 RNA_def_string(func, "name", nullptr, 0, "", "Name of new track");
2249 RNA_def_int(func,
2250 "frame",
2251 1,
2252 MINFRAME,
2253 MAXFRAME,
2254 "Frame",
2255 "Frame number to add track on",
2256 MINFRAME,
2257 MAXFRAME);
2258 parm = RNA_def_pointer(func, "track", "MovieTrackingTrack", "", "Newly created track");
2259 RNA_def_function_return(func, parm);
2260
2261 /* active track */
2262 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2263 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2265 prop, "rna_tracking_active_track_get", "rna_tracking_active_track_set", nullptr, nullptr);
2268 "Active Track",
2269 "Active track in this tracking data object. "
2270 "Deprecated, use objects[name].tracks.active");
2273}
2274
2276{
2277 StructRNA *srna;
2278 PropertyRNA *prop;
2279
2280 srna = RNA_def_struct(brna, "MovieTrackingPlaneTracks", nullptr);
2281 RNA_def_struct_sdna(srna, "MovieTracking");
2282 RNA_def_struct_ui_text(srna, "Movie Plane Tracks", "Collection of movie tracking plane tracks");
2283
2284 /* TODO(sergey): Add API to create new plane tracks */
2285
2286 /* active plane track */
2287 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2288 RNA_def_property_struct_type(prop, "MovieTrackingPlaneTrack");
2290 "rna_tracking_active_plane_track_get",
2291 "rna_tracking_active_plane_track_set",
2292 nullptr,
2293 nullptr);
2296 "Active Plane Track",
2297 "Active plane track in this tracking data object. "
2298 "Deprecated, use objects[name].plane_tracks.active");
2300}
2301
2303{
2304 StructRNA *srna;
2305 FunctionRNA *func;
2306 PropertyRNA *prop;
2307 PropertyRNA *parm;
2308
2309 srna = RNA_def_struct(brna, "MovieTrackingObjectTracks", nullptr);
2310 RNA_def_struct_sdna(srna, "MovieTrackingObject");
2311 RNA_def_struct_ui_text(srna, "Movie Tracks", "Collection of movie tracking tracks");
2312
2313 func = RNA_def_function(srna, "new", "rna_trackingObject_tracks_new");
2315 RNA_def_function_ui_description(func, "create new motion track in this movie clip");
2316 RNA_def_string(func, "name", nullptr, 0, "", "Name of new track");
2317 RNA_def_int(func,
2318 "frame",
2319 1,
2320 MINFRAME,
2321 MAXFRAME,
2322 "Frame",
2323 "Frame number to add tracks on",
2324 MINFRAME,
2325 MAXFRAME);
2326 parm = RNA_def_pointer(func, "track", "MovieTrackingTrack", "", "Newly created track");
2327 RNA_def_function_return(func, parm);
2328
2329 /* active track */
2330 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2331 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2333 "rna_tracking_object_active_track_get",
2334 "rna_tracking_object_active_track_set",
2335 nullptr,
2336 nullptr);
2338 RNA_def_property_ui_text(prop, "Active Track", "Active track in this tracking data object");
2341}
2342
2344{
2345 StructRNA *srna;
2346 PropertyRNA *prop;
2347
2348 srna = RNA_def_struct(brna, "MovieTrackingObjectPlaneTracks", nullptr);
2349 RNA_def_struct_sdna(srna, "MovieTrackingObject");
2350 RNA_def_struct_ui_text(srna, "Plane Tracks", "Collection of tracking plane tracks");
2351
2352 /* active track */
2353 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2354 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2356 "rna_tracking_object_active_plane_track_get",
2357 "rna_tracking_object_active_plane_track_set",
2358 nullptr,
2359 nullptr);
2361 RNA_def_property_ui_text(prop, "Active Track", "Active track in this tracking data object");
2364}
2365
2367{
2368 StructRNA *srna;
2369 PropertyRNA *prop;
2370
2371 srna = RNA_def_struct(brna, "MovieTrackingObject", nullptr);
2373 srna, "Movie tracking object data", "Match-moving object tracking and reconstruction data");
2374
2375 /* name */
2376 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
2377 RNA_def_property_ui_text(prop, "Name", "Unique name of object");
2378 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_trackingObject_name_set");
2381 RNA_def_struct_name_property(srna, prop);
2382
2383 /* is_camera */
2384 prop = RNA_def_property(srna, "is_camera", PROP_BOOLEAN, PROP_NONE);
2387 RNA_def_property_ui_text(prop, "Camera", "Object is used for camera tracking");
2389
2390 /* tracks */
2391 prop = RNA_def_property(srna, "tracks", PROP_COLLECTION, PROP_NONE);
2393 "rna_trackingObject_tracks_begin",
2394 "rna_iterator_listbase_next",
2395 "rna_iterator_listbase_end",
2396 "rna_iterator_listbase_get",
2397 nullptr,
2398 nullptr,
2399 nullptr,
2400 nullptr);
2401 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2402 RNA_def_property_ui_text(prop, "Tracks", "Collection of tracks in this tracking data object");
2403 RNA_def_property_srna(prop, "MovieTrackingObjectTracks");
2404
2405 /* plane tracks */
2406 prop = RNA_def_property(srna, "plane_tracks", PROP_COLLECTION, PROP_NONE);
2408 "rna_trackingObject_plane_tracks_begin",
2409 "rna_iterator_listbase_next",
2410 "rna_iterator_listbase_end",
2411 "rna_iterator_listbase_get",
2412 nullptr,
2413 nullptr,
2414 nullptr,
2415 nullptr);
2416 RNA_def_property_struct_type(prop, "MovieTrackingPlaneTrack");
2418 prop, "Plane Tracks", "Collection of plane tracks in this tracking data object");
2419 RNA_def_property_srna(prop, "MovieTrackingObjectPlaneTracks");
2420
2421 /* reconstruction */
2422 prop = RNA_def_property(srna, "reconstruction", PROP_POINTER, PROP_NONE);
2423 RNA_def_property_struct_type(prop, "MovieTrackingReconstruction");
2425 prop, "rna_trackingObject_reconstruction_get", nullptr, nullptr, nullptr);
2426
2427 /* scale */
2428 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
2430 RNA_def_property_float_sdna(prop, nullptr, "scale");
2431 RNA_def_property_range(prop, 0.0001f, 10000.0f);
2432 RNA_def_property_ui_range(prop, 0.0001f, 10000.0, 1, 4);
2434 RNA_def_property_ui_text(prop, "Scale", "Scale of object solution in camera space");
2435 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingObject_flushUpdate");
2436
2437 /* keyframe_a */
2438 prop = RNA_def_property(srna, "keyframe_a", PROP_INT, PROP_NONE);
2440 RNA_def_property_int_sdna(prop, nullptr, "keyframe1");
2442 prop, "Keyframe A", "First keyframe used for reconstruction initialization");
2444
2445 /* keyframe_b */
2446 prop = RNA_def_property(srna, "keyframe_b", PROP_INT, PROP_NONE);
2448 RNA_def_property_int_sdna(prop, nullptr, "keyframe2");
2450 prop, "Keyframe B", "Second keyframe used for reconstruction initialization");
2452}
2453
2455{
2456 StructRNA *srna;
2457 PropertyRNA *prop;
2458
2459 FunctionRNA *func;
2460 PropertyRNA *parm;
2461
2462 RNA_def_property_srna(cprop, "MovieTrackingObjects");
2463 srna = RNA_def_struct(brna, "MovieTrackingObjects", nullptr);
2464 RNA_def_struct_sdna(srna, "MovieTracking");
2465 RNA_def_struct_ui_text(srna, "Movie Objects", "Collection of movie tracking objects");
2466
2467 func = RNA_def_function(srna, "new", "rna_trackingObject_new");
2468 RNA_def_function_ui_description(func, "Add tracking object to this movie clip");
2469 parm = RNA_def_string(func, "name", nullptr, 0, "", "Name of new object");
2471 parm = RNA_def_pointer(func, "object", "MovieTrackingObject", "", "New motion tracking object");
2472 RNA_def_function_return(func, parm);
2473
2474 func = RNA_def_function(srna, "remove", "rna_trackingObject_remove");
2476 RNA_def_function_ui_description(func, "Remove tracking object from this movie clip");
2477 parm = RNA_def_pointer(
2478 func, "object", "MovieTrackingObject", "", "Motion tracking object to be removed");
2481
2482 /* active object */
2483 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2484 RNA_def_property_struct_type(prop, "MovieTrackingObject");
2486 prop, "rna_tracking_active_object_get", "rna_tracking_active_object_set", nullptr, nullptr);
2488 RNA_def_property_ui_text(prop, "Active Object", "Active object in this tracking data object");
2489}
2490
2492{
2493 StructRNA *srna;
2494 PropertyRNA *prop;
2495
2496 static const EnumPropertyItem sort_items[] = {
2497 {TRACKING_DOPE_SORT_NAME, "NAME", 0, "Name", "Sort channels by their names"},
2499 "LONGEST",
2500 0,
2501 "Longest",
2502 "Sort channels by longest tracked segment"},
2504 "TOTAL",
2505 0,
2506 "Total",
2507 "Sort channels by overall amount of tracked segments"},
2509 "AVERAGE_ERROR",
2510 0,
2511 "Average Error",
2512 "Sort channels by average reprojection error of tracks after solve"},
2513 {TRACKING_DOPE_SORT_START, "START", 0, "Start Frame", "Sort channels by first frame number"},
2514 {TRACKING_DOPE_SORT_END, "END", 0, "End Frame", "Sort channels by last frame number"},
2515 {0, nullptr, 0, nullptr, nullptr},
2516 };
2517
2518 srna = RNA_def_struct(brna, "MovieTrackingDopesheet", nullptr);
2519 RNA_def_struct_path_func(srna, "rna_trackingDopesheet_path");
2520 RNA_def_struct_ui_text(srna, "Movie Tracking Dopesheet", "Match-moving dopesheet data");
2521
2522 /* dopesheet sort */
2523 prop = RNA_def_property(srna, "sort_method", PROP_ENUM, PROP_NONE);
2524 RNA_def_property_enum_sdna(prop, nullptr, "sort_method");
2525 RNA_def_property_enum_items(prop, sort_items);
2527 prop, "Dopesheet Sort Field", "Method to be used to sort channels in dopesheet view");
2528 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2529
2530 /* invert_dopesheet_sort */
2531 prop = RNA_def_property(srna, "use_invert_sort", PROP_BOOLEAN, PROP_NONE);
2534 prop, "Invert Dopesheet Sort", "Invert sort order of dopesheet channels");
2535 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2536
2537 /* show_only_selected */
2538 prop = RNA_def_property(srna, "show_only_selected", PROP_BOOLEAN, PROP_NONE);
2541 prop, "Only Show Selected", "Only include channels relating to selected objects and data");
2542 RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, 0);
2543 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2544
2545 /* show_hidden */
2546 prop = RNA_def_property(srna, "show_hidden", PROP_BOOLEAN, PROP_NONE);
2549 prop, "Display Hidden", "Include channels from objects/bone that are not visible");
2550 RNA_def_property_ui_icon(prop, ICON_GHOST_ENABLED, 0);
2551 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2552}
2553
2555{
2556 StructRNA *srna;
2557 PropertyRNA *prop;
2558
2572
2573 srna = RNA_def_struct(brna, "MovieTracking", nullptr);
2574 RNA_def_struct_path_func(srna, "rna_tracking_path");
2575 RNA_def_struct_ui_text(srna, "Movie tracking data", "Match-moving data for tracking");
2576
2577 /* settings */
2578 prop = RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
2579 RNA_def_property_struct_type(prop, "MovieTrackingSettings");
2580
2581 /* camera properties */
2582 prop = RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
2583 RNA_def_property_struct_type(prop, "MovieTrackingCamera");
2584
2585 /* tracks */
2586 prop = RNA_def_property(srna, "tracks", PROP_COLLECTION, PROP_NONE);
2588 "rna_trackingTracks_begin",
2589 "rna_iterator_listbase_next",
2590 "rna_iterator_listbase_end",
2591 "rna_iterator_listbase_get",
2592 nullptr,
2593 nullptr,
2594 nullptr,
2595 nullptr);
2596 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2598 "Tracks",
2599 "Collection of tracks in this tracking data object. "
2600 "Deprecated, use objects[name].tracks");
2601 RNA_def_property_srna(prop, "MovieTrackingTracks");
2602
2603 /* tracks */
2604 prop = RNA_def_property(srna, "plane_tracks", PROP_COLLECTION, PROP_NONE);
2606 "rna_trackingPlaneTracks_begin",
2607 "rna_iterator_listbase_next",
2608 "rna_iterator_listbase_end",
2609 "rna_iterator_listbase_get",
2610 nullptr,
2611 nullptr,
2612 nullptr,
2613 nullptr);
2614 RNA_def_property_struct_type(prop, "MovieTrackingPlaneTrack");
2616 "Plane Tracks",
2617 "Collection of plane tracks in this tracking data object. "
2618 "Deprecated, use objects[name].plane_tracks");
2619 RNA_def_property_srna(prop, "MovieTrackingPlaneTracks");
2620
2621 /* stabilization */
2622 prop = RNA_def_property(srna, "stabilization", PROP_POINTER, PROP_NONE);
2623 RNA_def_property_struct_type(prop, "MovieTrackingStabilization");
2624
2625 /* reconstruction */
2626 prop = RNA_def_property(srna, "reconstruction", PROP_POINTER, PROP_NONE);
2627 RNA_def_property_pointer_sdna(prop, nullptr, "reconstruction_legacy");
2629 prop, "rna_trackingReconstruction_get", nullptr, nullptr, nullptr);
2630 RNA_def_property_struct_type(prop, "MovieTrackingReconstruction");
2631
2632 /* objects */
2633 prop = RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE);
2635 "rna_trackingObjects_begin",
2636 "rna_iterator_listbase_next",
2637 "rna_iterator_listbase_end",
2638 "rna_iterator_listbase_get",
2639 nullptr,
2640 nullptr,
2641 nullptr,
2642 nullptr);
2643 RNA_def_property_struct_type(prop, "MovieTrackingObject");
2644 RNA_def_property_ui_text(prop, "Objects", "Collection of objects in this tracking data object");
2645 rna_def_trackingObjects(brna, prop);
2646
2647 /* active object index */
2648 prop = RNA_def_property(srna, "active_object_index", PROP_INT, PROP_NONE);
2649 RNA_def_property_int_sdna(prop, nullptr, "objectnr");
2652 "rna_tracking_active_object_index_get",
2653 "rna_tracking_active_object_index_set",
2654 "rna_tracking_active_object_index_range");
2655 RNA_def_property_ui_text(prop, "Active Object Index", "Index of active object");
2657
2658 /* dopesheet */
2659 prop = RNA_def_property(srna, "dopesheet", PROP_POINTER, PROP_NONE);
2660 RNA_def_property_struct_type(prop, "MovieTrackingDopesheet");
2661}
2662
2664{
2665 rna_def_tracking(brna);
2666}
2667
2668#endif
AnimData * BKE_animdata_from_id(const ID *id)
Definition anim_data.cc:89
void BKE_animdata_fix_paths_rename(struct ID *owner_id, struct AnimData *adt, struct ID *ref_id, const char *prefix, const char *oldName, const char *newName, int oldSubscript, int newSubscript, bool verify_paths)
void BKE_movieclip_get_size(struct MovieClip *clip, const struct MovieClipUser *user, int *r_width, int *r_height)
void BKE_ntree_update_main(Main *bmain, NodeTreeUpdateExtraParams *params)
void BKE_ntree_update_tag_id_changed(Main *bmain, ID *id)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
struct MovieTrackingObject * BKE_tracking_object_get_camera(const struct MovieTracking *tracking)
void BKE_tracking_get_rna_path_prefix_for_plane_track(const struct MovieTracking *tracking, const struct MovieTrackingPlaneTrack *plane_track, char *rna_path, size_t rna_path_maxncpy)
struct MovieTrackingPlaneMarker * BKE_tracking_plane_marker_insert(struct MovieTrackingPlaneTrack *plane_track, struct MovieTrackingPlaneMarker *plane_marker)
Definition tracking.cc:1719
void BKE_tracking_plane_marker_delete(struct MovieTrackingPlaneTrack *plane_track, int framenr)
Definition tracking.cc:1760
struct MovieTrackingPlaneMarker * BKE_tracking_plane_marker_get_exact(struct MovieTrackingPlaneTrack *plane_track, int framenr)
Definition tracking.cc:1837
void BKE_tracking_camera_principal_point_pixel_set(struct MovieClip *clip, const float principal_point_pixel[2])
Definition tracking.cc:2186
#define TRACK_SELECTED(track)
void BKE_tracking_plane_track_unique_name(struct ListBase *plane_tracks_base, struct MovieTrackingPlaneTrack *plane_track)
Definition tracking.cc:1614
void BKE_tracking_track_unique_name(struct ListBase *tracksbase, struct MovieTrackingTrack *track)
Definition tracking.cc:586
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)
bool BKE_tracking_object_delete(struct MovieTracking *tracking, struct MovieTrackingObject *tracking_object)
Definition tracking.cc:1926
void BKE_tracking_dopesheet_tag_update(struct MovieTracking *tracking)
Definition tracking.cc:3411
struct MovieTrackingMarker * BKE_tracking_marker_get_exact(struct MovieTrackingTrack *track, int framenr)
Definition tracking.cc:1391
struct MovieTrackingTrack * BKE_tracking_track_add(struct MovieTracking *tracking, struct ListBase *tracksbase, float x, float y, int framenr, int width, int height)
Definition tracking.cc:525
struct MovieTrackingObject * BKE_tracking_find_object_for_plane_track(const struct MovieTracking *tracking, const struct MovieTrackingPlaneTrack *plane_track)
void BKE_tracking_camera_principal_point_pixel_get(struct MovieClip *clip, float r_principal_point_pixel[2])
Definition tracking.cc:2173
struct MovieTrackingObject * BKE_tracking_object_add(struct MovieTracking *tracking, const char *name)
Definition tracking.cc:1897
void BKE_tracking_object_unique_name(struct MovieTracking *tracking, struct MovieTrackingObject *tracking_object)
Definition tracking.cc:1956
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)
void BKE_tracking_distortion_free(struct MovieDistortion *distortion)
Definition tracking.cc:2414
void BKE_tracking_marker_clamp_search_size(struct MovieTrackingMarker *marker)
Definition tracking.cc:1327
void BKE_tracking_get_rna_path_prefix_for_track(const struct MovieTracking *tracking, const struct MovieTrackingTrack *track, char *rna_path, size_t rna_path_maxncpy)
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)
Definition tracking.cc:1791
struct MovieTrackingObject * BKE_tracking_find_object_for_track(const struct MovieTracking *tracking, const struct MovieTrackingTrack *track)
struct MovieTrackingMarker * BKE_tracking_marker_insert(struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker)
Definition tracking.cc:1235
struct MovieReconstructedCamera * BKE_tracking_camera_get_reconstructed(struct MovieTracking *tracking, struct MovieTrackingObject *tracking_object, int framenr)
Definition tracking.cc:2133
void BKE_tracking_marker_delete(struct MovieTrackingTrack *track, int framenr)
Definition tracking.cc:1281
void BKE_tracking_camera_get_reconstructed_interpolate(struct MovieTracking *tracking, struct MovieTrackingObject *tracking_object, float framenr, float mat[4][4])
Definition tracking.cc:2146
#define LISTBASE_FOREACH(type, var, list)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int max_ii(int a, int b)
MINLINE void copy_v2_v2(float r[2], const float a[2])
#define STRNCPY(dst, src)
Definition BLI_string.h:593
#define BLT_I18NCONTEXT_ID_MOVIECLIP
void DEG_id_tag_update(ID *id, unsigned int flags)
#define MAX_ID_NAME
Definition DNA_ID.h:377
#define DNA_struct_default_get(struct_name)
#define MAX_NAME
Definition DNA_defs.h:50
Object is a sort of wrapper for general info.
#define MINFRAME
#define MAXFRAME
@ TRACKING_FILTER_BICUBIC
@ TRACKING_FILTER_NEAREST
@ TRACKING_FILTER_BILINEAR
@ TRACKING_MOTION_TRIPOD
@ TRACKING_DOPE_SORT_START
@ TRACKING_DOPE_SORT_AVERAGE_ERROR
@ TRACKING_DOPE_SORT_LONGEST
@ TRACKING_DOPE_SORT_NAME
@ TRACKING_DOPE_SORT_END
@ TRACKING_DOPE_SORT_TOTAL
@ TRACKING_SPEED_DOUBLE
@ TRACKING_SPEED_HALF
@ TRACKING_SPEED_QUARTER
@ TRACKING_SPEED_REALTIME
@ TRACKING_CLEAN_DELETE_SEGMENT
@ TRACKING_CLEAN_SELECT
@ TRACKING_CLEAN_DELETE_TRACK
@ CAMERA_UNITS_MM
@ CAMERA_UNITS_PX
@ TRACKING_AUTOSCALE
@ TRACKING_SHOW_STAB_TRACKS
@ TRACKING_STABILIZE_SCALE
@ TRACKING_STABILIZE_ROTATION
@ TRACKING_2D_STABILIZATION
@ TRACKING_DISTORTION_MODEL_DIVISION
@ TRACKING_DISTORTION_MODEL_POLYNOMIAL
@ TRACKING_DISTORTION_MODEL_NUKE
@ TRACKING_DISTORTION_MODEL_BROWN
@ TRACK_CUSTOMCOLOR
@ TRACK_PREVIEW_ALPHA
@ TRACK_DISABLE_BLUE
@ TRACK_HIDDEN
@ TRACK_PREVIEW_GRAYSCALE
@ TRACK_LOCKED
@ TRACK_USE_2D_STAB
@ TRACK_HAS_BUNDLE
@ TRACK_USE_2D_STAB_ROT
@ TRACK_DISABLE_RED
@ TRACK_DISABLE_GREEN
@ TRACK_ALGORITHM_FLAG_USE_NORMALIZATION
@ TRACK_ALGORITHM_FLAG_USE_BRUTE
@ TRACK_ALGORITHM_FLAG_USE_MASK
@ PLANE_MARKER_DISABLED
@ TRACKING_RECONSTRUCTED
@ TRACK_MOTION_MODEL_TRANSLATION_SCALE
@ TRACK_MOTION_MODEL_TRANSLATION
@ TRACK_MOTION_MODEL_TRANSLATION_ROTATION_SCALE
@ TRACK_MOTION_MODEL_TRANSLATION_ROTATION
@ TRACK_MOTION_MODEL_HOMOGRAPHY
@ TRACK_MOTION_MODEL_AFFINE
@ PLANE_TRACK_AUTOKEY
@ MARKER_TRACKED
@ MARKER_DISABLED
@ TRACKING_DOPE_SELECTED_ONLY
@ TRACKING_DOPE_SORT_INVERSE
@ TRACKING_DOPE_SHOW_HIDDEN
@ TRACKING_OBJECT_CAMERA
@ TRACK_MATCH_PREVIOUS_FRAME
@ TRACK_MATCH_KEYFRAME
@ REFINE_PRINCIPAL_POINT
@ REFINE_TANGENTIAL_DISTORTION
@ REFINE_RADIAL_DISTORTION
@ REFINE_FOCAL_LENGTH
@ TRACKING_USE_KEYFRAME_SELECTION
Read Guarded memory(de)allocation.
#define RNA_POINTER_INVALIDATE(ptr)
ParameterFlag
Definition RNA_types.hh:396
@ PARM_RNAPTR
Definition RNA_types.hh:399
@ PARM_REQUIRED
Definition RNA_types.hh:397
@ FUNC_USE_REPORTS
Definition RNA_types.hh:680
@ FUNC_USE_SELF_ID
Definition RNA_types.hh:667
@ PROP_FLOAT
Definition RNA_types.hh:67
@ PROP_BOOLEAN
Definition RNA_types.hh:65
@ PROP_ENUM
Definition RNA_types.hh:69
@ PROP_INT
Definition RNA_types.hh:66
@ PROP_STRING
Definition RNA_types.hh:68
@ PROP_POINTER
Definition RNA_types.hh:70
@ PROP_COLLECTION
Definition RNA_types.hh:71
#define RNA_TRANSLATION_PREC_DEFAULT
Definition RNA_types.hh:127
PropertyFlag
Definition RNA_types.hh:201
@ PROP_THICK_WRAP
Definition RNA_types.hh:312
@ PROP_ANIMATABLE
Definition RNA_types.hh:220
@ PROP_NEVER_UNLINK
Definition RNA_types.hh:273
@ PROP_EDITABLE
Definition RNA_types.hh:207
@ PROP_NEVER_NULL
Definition RNA_types.hh:266
@ PROP_ID_REFCOUNT
Definition RNA_types.hh:253
@ PROP_MATRIX
Definition RNA_types.hh:168
@ PROP_XYZ
Definition RNA_types.hh:172
@ PROP_PIXEL
Definition RNA_types.hh:151
@ PROP_ANGLE
Definition RNA_types.hh:155
@ PROP_NONE
Definition RNA_types.hh:136
@ PROP_FACTOR
Definition RNA_types.hh:154
@ PROP_COLOR_GAMMA
Definition RNA_types.hh:175
@ PROP_TRANSLATION
Definition RNA_types.hh:164
#define ND_DISPLAY
Definition WM_types.hh:458
#define NC_MOVIECLIP
Definition WM_types.hh:364
#define NC_SCENE
Definition WM_types.hh:345
#define ND_NODES
Definition WM_types.hh:403
#define NA_EDITED
Definition WM_types.hh:550
#define ND_SELECT
Definition WM_types.hh:474
#define ND_TRANSFORM
Definition WM_types.hh:423
#define NC_OBJECT
Definition WM_types.hh:346
#define SELECT
draw_view in_light_buf[] float
const vector< Marker > & markers
const ProjectiveReconstruction & reconstruction
Definition intersect.cc:198
void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb, IteratorSkipFunc skip)
PointerRNA rna_pointer_inherit_refine(const PointerRNA *ptr, StructRNA *type, void *data)
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
void RNA_def_parameter_clear_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_property_float_default(PropertyRNA *prop, float value)
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
const int rna_matrix_dimsize_4x2[]
void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
PropertyRNA * RNA_def_float_matrix(StructOrFunctionRNA *cont_, const char *identifier, const int rows, const int columns, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring, const char *assignint)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
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)
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, const int length[])
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
void RNA_def_property_array(PropertyRNA *prop, int length)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
const int rna_matrix_dimsize_4x4[]
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_def_function_flag(FunctionRNA *func, int flag)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
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_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_function_output(FunctionRNA *, PropertyRNA *ret)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
static const EnumPropertyItem pattern_match_items[]
static void rna_def_trackingTracks(BlenderRNA *brna)
static void rna_def_trackingMarker(BlenderRNA *brna)
static void rna_def_trackingTrack(BlenderRNA *brna)
static void rna_def_tracking(BlenderRNA *brna)
static void rna_def_trackingStabilization(BlenderRNA *brna)
static const EnumPropertyItem tracker_motion_model[]
static void rna_def_trackingPlaneTrack(BlenderRNA *brna)
static void rna_def_trackingSettings(BlenderRNA *brna)
static void rna_def_trackingReconstructedCameras(BlenderRNA *brna)
static void rna_def_trackingPlaneMarkers(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_trackingObjectPlaneTracks(BlenderRNA *brna)
static void rna_def_trackingPlaneTracks(BlenderRNA *brna)
static void rna_def_trackingObjectTracks(BlenderRNA *brna)
static void rna_def_trackingCamera(BlenderRNA *brna)
void RNA_def_tracking(BlenderRNA *brna)
static void rna_def_trackingMarkers(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_trackingObjects(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_trackingPlaneMarker(BlenderRNA *brna)
static void rna_def_reconstructedCamera(BlenderRNA *brna)
static void rna_def_trackingReconstruction(BlenderRNA *brna)
static void rna_def_trackingObject(BlenderRNA *brna)
static void rna_def_trackingDopesheet(BlenderRNA *brna)
#define min(a, b)
Definition sort.c:32
#define FLT_MAX
Definition stdcycles.h:14
Definition DNA_ID.h:413
MovieTrackingPlaneTrack * active_plane_track
MovieTrackingReconstruction reconstruction
MovieTrackingTrack * active_track
MovieTrackingPlaneMarker * markers
MovieTrackingMarker * markers
ID * owner_id
Definition RNA_types.hh:40
void * data
Definition RNA_types.hh:42
void WM_main_add_notifier(uint type, void *reference)
PointerRNA * ptr
Definition wm_files.cc:4126