Blender V5.0
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
8
9#include <climits>
10#include <cstdlib>
11
12#include "BLT_translation.hh"
13
14#include "RNA_define.hh"
15
16#include "rna_internal.hh"
17
18#include "DNA_object_types.h" /* SELECT */
19#include "DNA_scene_types.h"
20
21#include "WM_types.hh"
22
23#ifdef RNA_RUNTIME
24
25# include "DNA_anim_types.h"
26# include "DNA_defaults.h"
27# include "DNA_movieclip_types.h"
28
29# include "BLI_math_vector.h"
30
31# include "BKE_anim_data.hh"
32# include "BKE_animsys.h"
33# include "BKE_movieclip.h"
34# include "BKE_node.hh"
36# include "BKE_report.hh"
37# include "BKE_tracking.h"
38
39# include "DEG_depsgraph.hh"
40
41# include "IMB_imbuf.hh"
42
43# include "WM_api.hh"
44
45static std::optional<std::string> rna_tracking_path(const PointerRNA * /*ptr*/)
46{
47 return "tracking";
48}
49
50static std::optional<std::string> rna_trackingSettings_path(const PointerRNA * /*ptr*/)
51{
52 return "tracking.settings";
53}
54
55static void rna_tracking_defaultSettings_patternUpdate(Main * /*bmain*/,
56 Scene * /*scene*/,
58{
59 MovieClip *clip = (MovieClip *)ptr->owner_id;
60 MovieTracking *tracking = &clip->tracking;
61 MovieTrackingSettings *settings = &tracking->settings;
62
63 if (settings->default_search_size < settings->default_pattern_size) {
64 settings->default_search_size = settings->default_pattern_size;
65 }
66}
67
68static void rna_tracking_defaultSettings_searchUpdate(Main * /*bmain*/,
69 Scene * /*scene*/,
71{
72 MovieClip *clip = (MovieClip *)ptr->owner_id;
73 MovieTracking *tracking = &clip->tracking;
74 MovieTrackingSettings *settings = &tracking->settings;
75
76 if (settings->default_pattern_size > settings->default_search_size) {
77 settings->default_pattern_size = settings->default_search_size;
78 }
79}
80
81static std::optional<std::string> rna_trackingTrack_path(const PointerRNA *ptr)
82{
83 MovieClip *clip = (MovieClip *)ptr->owner_id;
85 /* Escaped object name, escaped track name, rest of the path. */
86 char rna_path[MAX_NAME * 4 + 64];
87 BKE_tracking_get_rna_path_for_track(&clip->tracking, track, rna_path, sizeof(rna_path));
88 return rna_path;
89}
90
91static void rna_trackingTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
92{
93 MovieClip *clip = (MovieClip *)ptr->owner_id;
94 MovieTrackingObject *tracking_camera_object = BKE_tracking_object_get_camera(&clip->tracking);
95
96 rna_iterator_listbase_begin(iter, ptr, &tracking_camera_object->tracks, nullptr);
97}
98
99static void rna_trackingPlaneTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
100{
101 MovieClip *clip = (MovieClip *)ptr->owner_id;
102 MovieTrackingObject *tracking_camera_object = BKE_tracking_object_get_camera(&clip->tracking);
103
104 rna_iterator_listbase_begin(iter, ptr, &tracking_camera_object->plane_tracks, nullptr);
105}
106
107static PointerRNA rna_trackingReconstruction_get(PointerRNA *ptr)
108{
109 MovieClip *clip = (MovieClip *)ptr->owner_id;
110 MovieTrackingObject *tracking_camera_object = BKE_tracking_object_get_camera(&clip->tracking);
111
113 *ptr, &RNA_MovieTrackingReconstruction, &tracking_camera_object->reconstruction);
114}
115
116static void rna_trackingObjects_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
117{
118 MovieClip *clip = (MovieClip *)ptr->owner_id;
119
120 rna_iterator_listbase_begin(iter, ptr, &clip->tracking.objects, nullptr);
121}
122
123static int rna_tracking_active_object_index_get(PointerRNA *ptr)
124{
125 MovieClip *clip = (MovieClip *)ptr->owner_id;
126
127 return clip->tracking.objectnr;
128}
129
130static void rna_tracking_active_object_index_set(PointerRNA *ptr, int value)
131{
132 MovieClip *clip = (MovieClip *)ptr->owner_id;
133
134 clip->tracking.objectnr = value;
135 BKE_tracking_dopesheet_tag_update(&clip->tracking);
136}
137
138static void rna_tracking_active_object_index_range(
139 PointerRNA *ptr, int *min, int *max, int * /*softmin*/, int * /*softmax*/)
140{
141 MovieClip *clip = (MovieClip *)ptr->owner_id;
142
143 *min = 0;
144 *max = max_ii(0, clip->tracking.tot_object - 1);
145}
146
147static PointerRNA rna_tracking_active_track_get(PointerRNA *ptr)
148{
149 MovieClip *clip = (MovieClip *)ptr->owner_id;
150 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
151
153 *ptr, &RNA_MovieTrackingTrack, tracking_object->active_track);
154}
155
156static void rna_tracking_active_track_set(PointerRNA *ptr, PointerRNA value, ReportList *reports)
157{
158 MovieClip *clip = (MovieClip *)ptr->owner_id;
159 MovieTrackingTrack *track = (MovieTrackingTrack *)value.data;
160 MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
161 int index = BLI_findindex(&tracking_object->tracks, track);
162
163 if (index != -1) {
164 tracking_object->active_track = track;
165 }
166 else {
167 BKE_reportf(reports,
168 RPT_ERROR,
169 "Track '%s' is not found in the tracking object %s",
170 track->name,
171 tracking_object->name);
172 }
173}
174
175static PointerRNA rna_tracking_active_plane_track_get(PointerRNA *ptr)
176{
177 MovieClip *clip = (MovieClip *)ptr->owner_id;
178 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
179
181 *ptr, &RNA_MovieTrackingPlaneTrack, tracking_object->active_plane_track);
182}
183
184static void rna_tracking_active_plane_track_set(PointerRNA *ptr,
185 PointerRNA value,
186 ReportList *reports)
187{
188 MovieClip *clip = (MovieClip *)ptr->owner_id;
189 MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)value.data;
190 MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
191 int index = BLI_findindex(&tracking_object->plane_tracks, plane_track);
192
193 if (index != -1) {
194 tracking_object->active_plane_track = plane_track;
195 }
196 else {
197 BKE_reportf(reports,
198 RPT_ERROR,
199 "Plane track '%s' is not found in the tracking object %s",
200 plane_track->name,
201 tracking_object->name);
202 }
203}
204
205static PointerRNA rna_tracking_object_active_track_get(PointerRNA *ptr)
206{
207 MovieClip *clip = (MovieClip *)ptr->owner_id;
208 const MovieTrackingObject *tracking_object = BKE_tracking_object_get_active(&clip->tracking);
209
211 *ptr, &RNA_MovieTrackingTrack, tracking_object->active_track);
212}
213
214static void rna_tracking_object_active_track_set(PointerRNA *ptr,
215 PointerRNA value,
216 ReportList *reports)
217{
219 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
220 int index = BLI_findindex(&tracking_object->tracks, track);
221
222 if (index != -1) {
223 tracking_object->active_track = track;
224 }
225 else {
226 BKE_reportf(reports,
227 RPT_ERROR,
228 "Track '%s' is not found in the tracking object %s",
229 track->name,
230 tracking_object->name);
231 }
232}
233
234static PointerRNA rna_tracking_object_active_plane_track_get(PointerRNA *ptr)
235{
236 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
237
239 *ptr, &RNA_MovieTrackingPlaneTrack, tracking_object->active_plane_track);
240}
241
242static void rna_tracking_object_active_plane_track_set(PointerRNA *ptr,
243 PointerRNA value,
244 ReportList *reports)
245{
247 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
248 int index = BLI_findindex(&tracking_object->plane_tracks, plane_track);
249
250 if (index != -1) {
251 tracking_object->active_plane_track = plane_track;
252 }
253 else {
254 BKE_reportf(reports,
255 RPT_ERROR,
256 "Plane track '%s' is not found in the tracking object %s",
257 plane_track->name,
258 tracking_object->name);
259 }
260}
261
262static void rna_trackingTrack_name_set(PointerRNA *ptr, const char *value)
263{
264 MovieClip *clip = (MovieClip *)ptr->owner_id;
265 MovieTrackingTrack *track = (MovieTrackingTrack *)ptr->data;
266 MovieTrackingObject *tracking_object = BKE_tracking_find_object_for_track(&clip->tracking,
267 track);
268 /* Store old name, for the animation fix later. */
269 char old_name[sizeof(track->name)];
270 STRNCPY_UTF8(old_name, track->name);
271 /* Update the name, */
272 STRNCPY_UTF8(track->name, value);
273 BKE_tracking_track_unique_name(&tracking_object->tracks, track);
274 /* Fix animation paths. */
275 AnimData *adt = BKE_animdata_from_id(&clip->id);
276 if (adt != nullptr) {
277 char rna_path_prefix[MAX_NAME * 2 + 64];
279 &clip->tracking, track, rna_path_prefix, sizeof(rna_path_prefix));
281 &clip->id, adt, nullptr, rna_path_prefix, old_name, track->name, 0, 0, 1);
282 }
283}
284
285static bool rna_trackingTrack_select_get(PointerRNA *ptr)
286{
287 MovieTrackingTrack *track = (MovieTrackingTrack *)ptr->data;
288
289 return TRACK_SELECTED(track);
290}
291
292static void rna_trackingTrack_select_set(PointerRNA *ptr, bool value)
293{
294 MovieTrackingTrack *track = (MovieTrackingTrack *)ptr->data;
295
296 if (value) {
297 track->flag |= SELECT;
298 track->pat_flag |= SELECT;
299 track->search_flag |= SELECT;
300 }
301 else {
302 track->flag &= ~SELECT;
303 track->pat_flag &= ~SELECT;
304 track->search_flag &= ~SELECT;
305 }
306}
307
308static void rna_trackingPlaneMarker_frame_set(PointerRNA *ptr, int value)
309{
310 MovieClip *clip = (MovieClip *)ptr->owner_id;
311 MovieTracking *tracking = &clip->tracking;
313 MovieTrackingPlaneTrack *plane_track_of_marker = nullptr;
314
315 LISTBASE_FOREACH (MovieTrackingObject *, tracking_object, &tracking->objects) {
316 LISTBASE_FOREACH (MovieTrackingPlaneTrack *, plane_track, &tracking_object->plane_tracks) {
317 if (plane_marker >= plane_track->markers &&
318 plane_marker < plane_track->markers + plane_track->markersnr)
319 {
320 plane_track_of_marker = plane_track;
321 break;
322 }
323 }
324
325 if (plane_track_of_marker) {
326 break;
327 }
328 }
329
330 if (plane_track_of_marker) {
331 MovieTrackingPlaneMarker new_plane_marker = *plane_marker;
332 new_plane_marker.framenr = value;
333
334 BKE_tracking_plane_marker_delete(plane_track_of_marker, plane_marker->framenr);
335 BKE_tracking_plane_marker_insert(plane_track_of_marker, &new_plane_marker);
336 }
337}
338
339static std::optional<std::string> rna_trackingPlaneTrack_path(const PointerRNA *ptr)
340{
341 MovieClip *clip = (MovieClip *)ptr->owner_id;
343 /* Escaped object name, escaped track name, rest of the path. */
344 char rna_path[MAX_NAME * 4 + 64];
346 &clip->tracking, plane_track, rna_path, sizeof(rna_path));
347 return rna_path;
348}
349
350static void rna_trackingPlaneTrack_name_set(PointerRNA *ptr, const char *value)
351{
352 MovieClip *clip = (MovieClip *)ptr->owner_id;
354 MovieTrackingObject *tracking_object = BKE_tracking_find_object_for_plane_track(&clip->tracking,
355 plane_track);
356 /* Store old name, for the animation fix later. */
357 char old_name[sizeof(plane_track->name)];
358 STRNCPY(old_name, plane_track->name);
359 /* Update the name, */
360 STRNCPY(plane_track->name, value);
361 BKE_tracking_plane_track_unique_name(&tracking_object->plane_tracks, plane_track);
362 /* Fix animation paths. */
363 AnimData *adt = BKE_animdata_from_id(&clip->id);
364 if (adt != nullptr) {
365 char rna_path[MAX_NAME * 2 + 64];
367 &clip->tracking, plane_track, rna_path, sizeof(rna_path));
369 &clip->id, adt, nullptr, rna_path, old_name, plane_track->name, 0, 0, 1);
370 }
371}
372
373static std::optional<std::string> rna_trackingCamera_path(const PointerRNA * /*ptr*/)
374{
375 return "tracking.camera";
376}
377
378static float rna_trackingCamera_focal_mm_get(PointerRNA *ptr)
379{
380 MovieClip *clip = (MovieClip *)ptr->owner_id;
381 MovieTrackingCamera *camera = &clip->tracking.camera;
382 float val = camera->focal;
383
384 if (clip->lastsize[0]) {
385 val = val * camera->sensor_width / float(clip->lastsize[0]);
386 }
387
388 return val;
389}
390
391static void rna_trackingCamera_focal_mm_set(PointerRNA *ptr, float value)
392{
393 MovieClip *clip = (MovieClip *)ptr->owner_id;
394 MovieTrackingCamera *camera = &clip->tracking.camera;
395
396 if (clip->lastsize[0]) {
397 value = clip->lastsize[0] * value / camera->sensor_width;
398 }
399
400 if (value >= 0.0001f) {
401 camera->focal = value;
402 }
403}
404
405static void rna_trackingCamera_principal_point_pixels_get(PointerRNA *ptr,
406 float *r_principal_point_pixels)
407{
408 MovieClip *clip = (MovieClip *)ptr->owner_id;
409 BKE_tracking_camera_principal_point_pixel_get(clip, r_principal_point_pixels);
410}
411
412static void rna_trackingCamera_principal_point_pixels_set(PointerRNA *ptr,
413 const float *principal_point_pixels)
414{
415 MovieClip *clip = (MovieClip *)ptr->owner_id;
416 BKE_tracking_camera_principal_point_pixel_set(clip, principal_point_pixels);
417}
418
419static std::optional<std::string> rna_trackingStabilization_path(const PointerRNA * /*ptr*/)
420{
421 return "tracking.stabilization";
422}
423
424static bool rna_track_2d_stabilization(CollectionPropertyIterator * /*iter*/, void *data)
425{
427
428 if ((track->flag & TRACK_USE_2D_STAB) == 0) {
429 return true;
430 }
431
432 return false;
433}
434
435static bool rna_track_2d_stabilization_rotation(CollectionPropertyIterator * /*iter*/, void *data)
436{
438
439 if ((track->flag & TRACK_USE_2D_STAB_ROT) == 0) {
440 return true;
441 }
442
443 return false;
444}
445
446static void rna_tracking_stabTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
447{
448 MovieClip *clip = (MovieClip *)ptr->owner_id;
449 MovieTrackingObject *tracking_camera_object = BKE_tracking_object_get_camera(&clip->tracking);
451 iter, ptr, &tracking_camera_object->tracks, rna_track_2d_stabilization);
452}
453
454static int rna_tracking_stabTracks_active_index_get(PointerRNA *ptr)
455{
456 MovieClip *clip = (MovieClip *)ptr->owner_id;
457 return clip->tracking.stabilization.act_track;
458}
459
460static void rna_tracking_stabTracks_active_index_set(PointerRNA *ptr, int value)
461{
462 MovieClip *clip = (MovieClip *)ptr->owner_id;
463 clip->tracking.stabilization.act_track = value;
464}
465
466static void rna_tracking_stabTracks_active_index_range(
467 PointerRNA *ptr, int *min, int *max, int * /*softmin*/, int * /*softmax*/)
468{
469 MovieClip *clip = (MovieClip *)ptr->owner_id;
470
471 *min = 0;
472 *max = max_ii(0, clip->tracking.stabilization.tot_track - 1);
473}
474
475static void rna_tracking_stabRotTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
476{
477 MovieClip *clip = (MovieClip *)ptr->owner_id;
478 MovieTrackingObject *tracking_camera_object = BKE_tracking_object_get_camera(&clip->tracking);
480 iter, ptr, &tracking_camera_object->tracks, rna_track_2d_stabilization_rotation);
481}
482
483static int rna_tracking_stabRotTracks_active_index_get(PointerRNA *ptr)
484{
485 MovieClip *clip = (MovieClip *)ptr->owner_id;
486 return clip->tracking.stabilization.act_rot_track;
487}
488
489static void rna_tracking_stabRotTracks_active_index_set(PointerRNA *ptr, int value)
490{
491 MovieClip *clip = (MovieClip *)ptr->owner_id;
492 clip->tracking.stabilization.act_rot_track = value;
493}
494
495static void rna_tracking_stabRotTracks_active_index_range(
496 PointerRNA *ptr, int *min, int *max, int * /*softmin*/, int * /*softmax*/)
497{
498 MovieClip *clip = (MovieClip *)ptr->owner_id;
499
500 *min = 0;
501 *max = max_ii(0, clip->tracking.stabilization.tot_rot_track - 1);
502}
503
504static void rna_tracking_flushUpdate(Main *bmain, Scene * /*scene*/, PointerRNA *ptr)
505{
506 MovieClip *clip = (MovieClip *)ptr->owner_id;
507
508 BKE_ntree_update_tag_id_changed(bmain, &clip->id);
509 BKE_ntree_update(*bmain);
510
513 DEG_id_tag_update(&clip->id, 0);
514}
515
516static void rna_tracking_resetIntrinsics(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
517{
518 MovieClip *clip = (MovieClip *)ptr->owner_id;
519 MovieTracking *tracking = &clip->tracking;
520
521 if (tracking->camera.intrinsics) {
523 tracking->camera.intrinsics = nullptr;
524 }
525}
526
527static void rna_trackingObject_tracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
528{
529 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
530 rna_iterator_listbase_begin(iter, ptr, &tracking_object->tracks, nullptr);
531}
532
533static void rna_trackingObject_plane_tracks_begin(CollectionPropertyIterator *iter,
535{
536 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
537 rna_iterator_listbase_begin(iter, ptr, &tracking_object->plane_tracks, nullptr);
538}
539
540static PointerRNA rna_trackingObject_reconstruction_get(PointerRNA *ptr)
541{
542 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
544 *ptr, &RNA_MovieTrackingReconstruction, &tracking_object->reconstruction);
545}
546
547static PointerRNA rna_tracking_active_object_get(PointerRNA *ptr)
548{
549 MovieClip *clip = (MovieClip *)ptr->owner_id;
550 MovieTrackingObject *tracking_object = static_cast<MovieTrackingObject *>(
551 BLI_findlink(&clip->tracking.objects, clip->tracking.objectnr));
552
553 return RNA_pointer_create_with_parent(*ptr, &RNA_MovieTrackingObject, tracking_object);
554}
555
556static void rna_tracking_active_object_set(PointerRNA *ptr,
557 PointerRNA value,
558 ReportList * /*reports*/)
559{
560 MovieClip *clip = (MovieClip *)ptr->owner_id;
561 MovieTrackingObject *tracking_object = (MovieTrackingObject *)value.data;
562 const int index = BLI_findindex(&clip->tracking.objects, tracking_object);
563
564 if (index != -1) {
565 clip->tracking.objectnr = index;
566 }
567 else {
568 clip->tracking.objectnr = 0;
569 }
570}
571
572static void rna_trackingObject_name_set(PointerRNA *ptr, const char *value)
573{
574 MovieClip *clip = (MovieClip *)ptr->owner_id;
575 MovieTrackingObject *tracking_object = (MovieTrackingObject *)ptr->data;
576
577 STRNCPY_UTF8(tracking_object->name, value);
578
579 BKE_tracking_object_unique_name(&clip->tracking, tracking_object);
580}
581
582static void rna_trackingObject_flushUpdate(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
583{
584 MovieClip *clip = (MovieClip *)ptr->owner_id;
585
587 DEG_id_tag_update(&clip->id, 0);
588}
589
590static void rna_trackingMarker_frame_set(PointerRNA *ptr, int value)
591{
592 MovieClip *clip = (MovieClip *)ptr->owner_id;
593 MovieTracking *tracking = &clip->tracking;
595 MovieTrackingTrack *track_of_marker = nullptr;
596
597 LISTBASE_FOREACH (MovieTrackingObject *, tracking_object, &tracking->objects) {
598 LISTBASE_FOREACH (MovieTrackingTrack *, track, &tracking_object->tracks) {
599 if (marker >= track->markers && marker < track->markers + track->markersnr) {
600 track_of_marker = track;
601 break;
602 }
603 }
604
605 if (track_of_marker) {
606 break;
607 }
608 }
609
610 if (track_of_marker) {
611 MovieTrackingMarker new_marker = *marker;
612 new_marker.framenr = value;
613
614 BKE_tracking_marker_delete(track_of_marker, marker->framenr);
615 BKE_tracking_marker_insert(track_of_marker, &new_marker);
616 }
617}
618
619static void rna_tracking_markerPattern_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
620{
622
624}
625
626static void rna_tracking_markerSearch_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
627{
629
631}
632
633static void rna_tracking_markerPattern_boundbox_get(PointerRNA *ptr, float *values)
634{
636 float min[2], max[2];
637
639
640 copy_v2_v2(values, min);
641 copy_v2_v2(values + 2, max);
642}
643
644static std::optional<std::string> rna_trackingDopesheet_path(const PointerRNA * /*ptr*/)
645{
646 return "tracking.dopesheet";
647}
648
649static void rna_trackingDopesheet_tagUpdate(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
650{
651 MovieClip *clip = (MovieClip *)ptr->owner_id;
652 MovieTrackingDopesheet *dopesheet = &clip->tracking.dopesheet;
653
654 dopesheet->ok = 0;
655}
656
657/* API */
658
659static MovieTrackingTrack *add_track_to_base(
660 MovieClip *clip, MovieTracking *tracking, ListBase *tracksbase, const char *name, int frame)
661{
662 int width, height;
664 MovieTrackingTrack *track;
665
666 user.framenr = 1;
667
668 BKE_movieclip_get_size(clip, &user, &width, &height);
669
670 track = BKE_tracking_track_add(tracking, tracksbase, 0, 0, frame, width, height);
671
672 if (name && name[0]) {
673 STRNCPY_UTF8(track->name, name);
674 BKE_tracking_track_unique_name(tracksbase, track);
675 }
676
677 return track;
678}
679
680static MovieTrackingTrack *rna_trackingTracks_new(ID *id,
681 MovieTracking *tracking,
682 const char *name,
683 int frame)
684{
685 MovieClip *clip = (MovieClip *)id;
686 MovieTrackingObject *tracking_camera_object = BKE_tracking_object_get_camera(&clip->tracking);
687 MovieTrackingTrack *track = add_track_to_base(
688 clip, tracking, &tracking_camera_object->tracks, name, frame);
689
691
692 return track;
693}
694
695static MovieTrackingTrack *rna_trackingObject_tracks_new(ID *id,
696 MovieTrackingObject *tracking_object,
697 const char *name,
698 int frame)
699{
700 MovieClip *clip = (MovieClip *)id;
701 MovieTrackingTrack *track = add_track_to_base(
702 clip, &clip->tracking, &tracking_object->tracks, name, frame);
703
705
706 return track;
707}
708
709static MovieTrackingObject *rna_trackingObject_new(MovieTracking *tracking, const char *name)
710{
711 MovieTrackingObject *tracking_object = BKE_tracking_object_add(tracking, name);
712
714
715 return tracking_object;
716}
717
718static void rna_trackingObject_remove(MovieTracking *tracking,
719 ReportList *reports,
720 PointerRNA *object_ptr)
721{
722 MovieTrackingObject *tracking_object = static_cast<MovieTrackingObject *>(object_ptr->data);
723 if (BKE_tracking_object_delete(tracking, tracking_object) == false) {
724 BKE_reportf(reports, RPT_ERROR, "MovieTracking '%s' cannot be removed", tracking_object->name);
725 return;
726 }
727
728 object_ptr->invalidate();
729
731}
732
733static MovieTrackingMarker *rna_trackingMarkers_find_frame(MovieTrackingTrack *track,
734 int framenr,
735 bool exact)
736{
737 if (exact) {
738 return BKE_tracking_marker_get_exact(track, framenr);
739 }
740 else {
741 return BKE_tracking_marker_get(track, framenr);
742 }
743}
744
745static MovieTrackingMarker *rna_trackingMarkers_insert_frame(MovieTrackingTrack *track,
746 int framenr,
747 const float co[2])
748{
749 MovieTrackingMarker marker = {}, *new_marker;
750
751 marker.framenr = framenr;
752 copy_v2_v2(marker.pos, co);
753
754 /* a bit arbitrary, but better than creating markers with zero pattern
755 * which is forbidden actually
756 */
757 copy_v2_v2(marker.pattern_corners[0], track->markers[0].pattern_corners[0]);
758 copy_v2_v2(marker.pattern_corners[1], track->markers[0].pattern_corners[1]);
759 copy_v2_v2(marker.pattern_corners[2], track->markers[0].pattern_corners[2]);
760 copy_v2_v2(marker.pattern_corners[3], track->markers[0].pattern_corners[3]);
761
762 new_marker = BKE_tracking_marker_insert(track, &marker);
763
765
766 return new_marker;
767}
768
769static void rna_trackingMarkers_delete_frame(MovieTrackingTrack *track, int framenr)
770{
771 if (track->markersnr == 1) {
772 return;
773 }
774
775 BKE_tracking_marker_delete(track, framenr);
776
778}
779
780static MovieTrackingPlaneMarker *rna_trackingPlaneMarkers_find_frame(
781 MovieTrackingPlaneTrack *plane_track, int framenr, bool exact)
782{
783 if (exact) {
784 return BKE_tracking_plane_marker_get_exact(plane_track, framenr);
785 }
786 else {
787 return BKE_tracking_plane_marker_get(plane_track, framenr);
788 }
789}
790
791static MovieTrackingPlaneMarker *rna_trackingPlaneMarkers_insert_frame(
792 MovieTrackingPlaneTrack *plane_track, int framenr)
793{
794 MovieTrackingPlaneMarker plane_marker = {}, *new_plane_marker;
795
796 plane_marker.framenr = framenr;
797
798 /* a bit arbitrary, but better than creating zero markers */
799 copy_v2_v2(plane_marker.corners[0], plane_track->markers[0].corners[0]);
800 copy_v2_v2(plane_marker.corners[1], plane_track->markers[0].corners[1]);
801 copy_v2_v2(plane_marker.corners[2], plane_track->markers[0].corners[2]);
802 copy_v2_v2(plane_marker.corners[3], plane_track->markers[0].corners[3]);
803
804 new_plane_marker = BKE_tracking_plane_marker_insert(plane_track, &plane_marker);
805
807
808 return new_plane_marker;
809}
810
811static void rna_trackingPlaneMarkers_delete_frame(MovieTrackingPlaneTrack *plane_track,
812 int framenr)
813{
814 if (plane_track->markersnr == 1) {
815 return;
816 }
817
818 BKE_tracking_plane_marker_delete(plane_track, framenr);
819
821}
822
823static MovieTrackingObject *find_object_for_reconstruction(
824 MovieTracking *tracking, MovieTrackingReconstruction *reconstruction)
825{
826 LISTBASE_FOREACH (MovieTrackingObject *, tracking_object, &tracking->objects) {
827 if (&tracking_object->reconstruction == reconstruction) {
828 return tracking_object;
829 }
830 }
831
832 return nullptr;
833}
834
835static MovieReconstructedCamera *rna_trackingCameras_find_frame(
836 ID *id, MovieTrackingReconstruction *reconstruction, int framenr)
837{
838 MovieClip *clip = (MovieClip *)id;
839 MovieTracking *tracking = &clip->tracking;
840 MovieTrackingObject *tracking_object = find_object_for_reconstruction(tracking, reconstruction);
841 return BKE_tracking_camera_get_reconstructed(tracking, tracking_object, framenr);
842}
843
844static void rna_trackingCameras_matrix_from_frame(ID *id,
845 MovieTrackingReconstruction *reconstruction,
846 int framenr,
847 float matrix[16])
848{
849 float mat[4][4];
850
851 MovieClip *clip = (MovieClip *)id;
852 MovieTracking *tracking = &clip->tracking;
853 MovieTrackingObject *tracking_object = find_object_for_reconstruction(tracking, reconstruction);
854 BKE_tracking_camera_get_reconstructed_interpolate(tracking, tracking_object, framenr, mat);
855
856 memcpy(matrix, mat, sizeof(float[4][4]));
857}
858
859#else
860
863 "Perspective",
864 0,
865 "Perspective",
866 "Search for markers that are perspectively deformed (homography) between frames"},
868 "Affine",
869 0,
870 "Affine",
871 "Search for markers that are affine-deformed (t, r, k, and skew) between frames"},
873 "LocRotScale",
874 0,
875 "Location, Rotation & Scale",
876 "Search for markers that are translated, rotated, and scaled between frames"},
878 "LocScale",
879 0,
880 "Location & Scale",
881 "Search for markers that are translated and scaled between frames"},
883 "LocRot",
884 0,
885 "Location & Rotation",
886 "Search for markers that are translated and rotated between frames"},
888 "Loc",
889 0,
890 "Location",
891 "Search for markers that are translated between frames"},
892 {0, nullptr, 0, nullptr, nullptr},
893};
894
896 {TRACK_MATCH_KEYFRAME, "KEYFRAME", 0, "Keyframe", "Track pattern from keyframe to next frame"},
898 "PREV_FRAME",
899 0,
900 "Previous frame",
901 "Track pattern from current frame to next frame"},
902 {0, nullptr, 0, nullptr, nullptr},
903};
904
906{
907 StructRNA *srna;
908 PropertyRNA *prop;
909
910 static const EnumPropertyItem speed_items[] = {
911 {0, "FASTEST", 0, "Fastest", "Track as fast as possible"},
912 {TRACKING_SPEED_DOUBLE, "DOUBLE", 0, "Double", "Track with double speed"},
913 {TRACKING_SPEED_REALTIME, "REALTIME", 0, "Realtime", "Track with realtime speed"},
914 {TRACKING_SPEED_HALF, "HALF", 0, "Half", "Track with half of realtime speed"},
915 {TRACKING_SPEED_QUARTER, "QUARTER", 0, "Quarter", "Track with quarter of realtime speed"},
916 {0, nullptr, 0, nullptr, nullptr},
917 };
918
919 static const EnumPropertyItem cleanup_items[] = {
920 {TRACKING_CLEAN_SELECT, "SELECT", 0, "Select", "Select unclean tracks"},
921 {TRACKING_CLEAN_DELETE_TRACK, "DELETE_TRACK", 0, "Delete Track", "Delete unclean tracks"},
923 "DELETE_SEGMENTS",
924 0,
925 "Delete Segments",
926 "Delete unclean segments of tracks"},
927 {0, nullptr, 0, nullptr, nullptr},
928 };
929
930 srna = RNA_def_struct(brna, "MovieTrackingSettings", nullptr);
931 RNA_def_struct_path_func(srna, "rna_trackingSettings_path");
932 RNA_def_struct_ui_text(srna, "Movie tracking settings", "Match moving settings");
933
934 /* speed */
935 prop = RNA_def_property(srna, "speed", PROP_ENUM, PROP_NONE);
937 RNA_def_property_enum_items(prop, speed_items);
939 "Speed",
940 "Limit speed of tracking to make visual feedback easier "
941 "(this does not affect the tracking quality)");
942
943 /* use keyframe selection */
944 prop = RNA_def_property(srna, "use_keyframe_selection", PROP_BOOLEAN, PROP_NONE);
947 prop, nullptr, "reconstruction_flag", TRACKING_USE_KEYFRAME_SELECTION);
949 "Keyframe Selection",
950 "Automatically select keyframes when solving camera/object motion");
951
952 /* intrinsics refinement during bundle adjustment */
953
954 prop = RNA_def_property(srna, "refine_intrinsics_focal_length", PROP_BOOLEAN, PROP_NONE);
955 RNA_def_property_boolean_sdna(prop, nullptr, "refine_camera_intrinsics", REFINE_FOCAL_LENGTH);
958 prop, "Refine Focal Length", "Refine focal length during camera solving");
959
960 prop = RNA_def_property(srna, "refine_intrinsics_principal_point", PROP_BOOLEAN, PROP_NONE);
961 RNA_def_property_boolean_sdna(prop, nullptr, "refine_camera_intrinsics", REFINE_PRINCIPAL_POINT);
964 prop, "Refine Principal Point", "Refine principal point during camera solving");
965
966 prop = RNA_def_property(srna, "refine_intrinsics_radial_distortion", PROP_BOOLEAN, PROP_NONE);
968 prop, nullptr, "refine_camera_intrinsics", REFINE_RADIAL_DISTORTION);
971 "Refine Radial",
972 "Refine radial coefficients of distortion model during camera solving");
973
974 prop = RNA_def_property(
975 srna, "refine_intrinsics_tangential_distortion", PROP_BOOLEAN, PROP_NONE);
977 prop, nullptr, "refine_camera_intrinsics", REFINE_TANGENTIAL_DISTORTION);
980 prop,
981 "Refine Tangential",
982 "Refine tangential coefficients of distortion model during camera solving");
983
984 /* tool settings */
985
986 /* distance */
987 prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
989 RNA_def_property_float_sdna(prop, nullptr, "dist");
992 prop, "Distance", "Distance between two bundles used for scene scaling");
993
994 /* frames count */
995 prop = RNA_def_property(srna, "clean_frames", PROP_INT, PROP_NONE);
997 RNA_def_property_int_sdna(prop, nullptr, "clean_frames");
998 RNA_def_property_range(prop, 0, INT_MAX);
1000 prop,
1001 "Tracked Frames",
1002 "Effect on tracks which are tracked less than the specified amount of frames");
1003
1004 /* re-projection error */
1005 prop = RNA_def_property(srna, "clean_error", PROP_FLOAT, PROP_NONE);
1007 RNA_def_property_float_sdna(prop, nullptr, "clean_error");
1010 prop, "Reprojection Error", "Effect on tracks which have a larger re-projection error");
1011
1012 /* cleanup action */
1013 prop = RNA_def_property(srna, "clean_action", PROP_ENUM, PROP_NONE);
1014 RNA_def_property_enum_sdna(prop, nullptr, "clean_action");
1016 RNA_def_property_enum_items(prop, cleanup_items);
1017 RNA_def_property_ui_text(prop, "Action", "Cleanup action to execute");
1018
1019 /* solver settings */
1020 prop = RNA_def_property(srna, "use_tripod_solver", PROP_BOOLEAN, PROP_NONE);
1022 RNA_def_property_boolean_sdna(prop, nullptr, "motion_flag", TRACKING_MOTION_TRIPOD);
1024 prop,
1025 "Tripod Motion",
1026 "Use special solver to track a stable camera position, such as a tripod");
1027
1028 /* default_limit_frames */
1029 prop = RNA_def_property(srna, "default_frames_limit", PROP_INT, PROP_NONE);
1031 RNA_def_property_int_sdna(prop, nullptr, "default_frames_limit");
1032 RNA_def_property_range(prop, 0, SHRT_MAX);
1034 prop, "Frames Limit", "Every tracking cycle, this number of frames are tracked");
1035
1036 /* default_pattern_match */
1037 prop = RNA_def_property(srna, "default_pattern_match", PROP_ENUM, PROP_NONE);
1039 RNA_def_property_enum_sdna(prop, nullptr, "default_pattern_match");
1042 prop, "Pattern Match", "Track pattern from given frame when tracking marker to next frame");
1043
1044 /* default_margin */
1045 prop = RNA_def_property(srna, "default_margin", PROP_INT, PROP_PIXEL);
1047 RNA_def_property_int_sdna(prop, nullptr, "default_margin");
1048 RNA_def_property_range(prop, 0, 300);
1050 prop, "Margin", "Default distance from image boundary at which marker stops tracking");
1051
1052 /* default_tracking_motion_model */
1053 prop = RNA_def_property(srna, "default_motion_model", PROP_ENUM, PROP_NONE);
1056 RNA_def_property_ui_text(prop, "Motion Model", "Default motion model to use for tracking");
1057
1058 /* default_use_brute */
1059 prop = RNA_def_property(srna, "use_default_brute", PROP_BOOLEAN, PROP_NONE);
1061 prop, nullptr, "default_algorithm_flag", TRACK_ALGORITHM_FLAG_USE_BRUTE);
1063 prop, "Prepass", "Use a brute-force translation-only initialization when tracking");
1065
1066 /* default_use_brute */
1067 prop = RNA_def_property(srna, "use_default_mask", PROP_BOOLEAN, PROP_NONE);
1069 prop, nullptr, "default_algorithm_flag", TRACK_ALGORITHM_FLAG_USE_MASK);
1071 prop,
1072 "Use Mask",
1073 "Use a Grease Pencil data-block as a mask to use only specified areas of pattern "
1074 "when tracking");
1076
1077 /* default_use_normalization */
1078 prop = RNA_def_property(srna, "use_default_normalization", PROP_BOOLEAN, PROP_NONE);
1080 prop, nullptr, "default_algorithm_flag", TRACK_ALGORITHM_FLAG_USE_NORMALIZATION);
1082 prop, "Normalize", "Normalize light intensities while tracking (slower)");
1084
1085 /* default minimal correlation */
1086 prop = RNA_def_property(srna, "default_correlation_min", PROP_FLOAT, PROP_NONE);
1088 RNA_def_property_float_sdna(prop, nullptr, "default_minimum_correlation");
1089 RNA_def_property_range(prop, 0.0f, 1.0f);
1090 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.05, 3);
1092 prop,
1093 "Correlation",
1094 "Default minimum value of correlation between matched pattern and reference "
1095 "that is still treated as successful tracking");
1096
1097 /* default pattern size */
1098 prop = RNA_def_property(srna, "default_pattern_size", PROP_INT, PROP_NONE);
1100 RNA_def_property_int_sdna(prop, nullptr, "default_pattern_size");
1101 RNA_def_property_range(prop, 5, 1000);
1102 RNA_def_property_update(prop, 0, "rna_tracking_defaultSettings_patternUpdate");
1103 RNA_def_property_ui_text(prop, "Pattern Size", "Size of pattern area for newly created tracks");
1104
1105 /* default search size */
1106 prop = RNA_def_property(srna, "default_search_size", PROP_INT, PROP_NONE);
1108 RNA_def_property_int_sdna(prop, nullptr, "default_search_size");
1109 RNA_def_property_range(prop, 5, 1000);
1110 RNA_def_property_update(prop, 0, "rna_tracking_defaultSettings_searchUpdate");
1111 RNA_def_property_ui_text(prop, "Search Size", "Size of search area for newly created tracks");
1112
1113 /* default use_red_channel */
1114 prop = RNA_def_property(srna, "use_default_red_channel", PROP_BOOLEAN, PROP_NONE);
1115 RNA_def_property_boolean_negative_sdna(prop, nullptr, "default_flag", TRACK_DISABLE_RED);
1116 RNA_def_property_ui_text(prop, "Use Red Channel", "Use red channel from footage for tracking");
1118
1119 /* default_use_green_channel */
1120 prop = RNA_def_property(srna, "use_default_green_channel", PROP_BOOLEAN, PROP_NONE);
1121 RNA_def_property_boolean_negative_sdna(prop, nullptr, "default_flag", TRACK_DISABLE_GREEN);
1123 prop, "Use Green Channel", "Use green channel from footage for tracking");
1125
1126 /* default_use_blue_channel */
1127 prop = RNA_def_property(srna, "use_default_blue_channel", PROP_BOOLEAN, PROP_NONE);
1128 RNA_def_property_boolean_negative_sdna(prop, nullptr, "default_flag", TRACK_DISABLE_BLUE);
1129 RNA_def_property_ui_text(prop, "Use Blue Channel", "Use blue channel from footage for tracking");
1131
1132 prop = RNA_def_property(srna, "default_weight", PROP_FLOAT, PROP_FACTOR);
1133 RNA_def_property_range(prop, 0.0f, 1.0f);
1134 RNA_def_property_ui_text(prop, "Weight", "Influence of newly created track on a final solution");
1135
1136 /* ** object tracking ** */
1137
1138 /* object distance */
1139 prop = RNA_def_property(srna, "object_distance", PROP_FLOAT, PROP_NONE);
1141 RNA_def_property_float_sdna(prop, nullptr, "object_distance");
1143 prop, "Distance", "Distance between two bundles used for object scaling");
1144 RNA_def_property_range(prop, 0.001, 10000);
1146 RNA_def_property_ui_range(prop, 0.001, 10000.0, 1, 3);
1147}
1148
1150{
1151 StructRNA *srna;
1152 PropertyRNA *prop;
1153
1154 static const EnumPropertyItem distortion_model_items[] = {
1156 "POLYNOMIAL",
1157 0,
1158 "Polynomial",
1159 "Radial distortion model which fits common cameras"},
1161 "DIVISION",
1162 0,
1163 "Divisions",
1164 "Division distortion model which "
1165 "better represents wide-angle cameras"},
1166 {TRACKING_DISTORTION_MODEL_NUKE, "NUKE", 0, "Nuke", "Nuke distortion model"},
1167 {TRACKING_DISTORTION_MODEL_BROWN, "BROWN", 0, "Brown", "Brown-Conrady distortion model"},
1168 {0, nullptr, 0, nullptr, nullptr},
1169 };
1170
1171 static const EnumPropertyItem camera_units_items[] = {
1172 {CAMERA_UNITS_PX, "PIXELS", 0, "px", "Use pixels for units of focal length"},
1173 {CAMERA_UNITS_MM, "MILLIMETERS", 0, "mm", "Use millimeters for units of focal length"},
1174 {0, nullptr, 0, nullptr, nullptr},
1175 };
1176
1177 srna = RNA_def_struct(brna, "MovieTrackingCamera", nullptr);
1178 RNA_def_struct_path_func(srna, "rna_trackingCamera_path");
1180 srna, "Movie tracking camera data", "Match-moving camera data for tracking");
1181
1182 /* Distortion model */
1183 prop = RNA_def_property(srna, "distortion_model", PROP_ENUM, PROP_NONE);
1185 RNA_def_property_enum_items(prop, distortion_model_items);
1186 RNA_def_property_ui_text(prop, "Distortion Model", "Distortion model used for camera lenses");
1187 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_resetIntrinsics");
1188
1189 /* Sensor */
1190 prop = RNA_def_property(srna, "sensor_width", PROP_FLOAT, PROP_NONE);
1191 RNA_def_property_float_sdna(prop, nullptr, "sensor_width");
1193 RNA_def_property_range(prop, 0.0f, 500.0f);
1194 RNA_def_property_ui_text(prop, "Sensor", "Width of CCD sensor in millimeters");
1196
1197 /* Focal Length */
1198 prop = RNA_def_property(srna, "focal_length", PROP_FLOAT, PROP_NONE);
1199 RNA_def_property_float_sdna(prop, nullptr, "focal");
1201 RNA_def_property_range(prop, 0.0001f, FLT_MAX);
1202 RNA_def_property_ui_range(prop, 0.0001f, 5000.0f, 1, 2);
1204 prop, "rna_trackingCamera_focal_mm_get", "rna_trackingCamera_focal_mm_set", nullptr);
1205 RNA_def_property_ui_text(prop, "Focal Length", "Camera's focal length");
1207
1208 /* Focal Length in pixels */
1209 prop = RNA_def_property(srna, "focal_length_pixels", PROP_FLOAT, PROP_NONE);
1210 RNA_def_property_float_sdna(prop, nullptr, "focal");
1212 RNA_def_property_range(prop, 0.0f, FLT_MAX);
1213 RNA_def_property_ui_range(prop, 0.0f, 5000.0f, 1, 2);
1214 RNA_def_property_ui_text(prop, "Focal Length", "Camera's focal length");
1216
1217 /* Units */
1218 prop = RNA_def_property(srna, "units", PROP_ENUM, PROP_NONE);
1219 RNA_def_property_enum_sdna(prop, nullptr, "units");
1221 RNA_def_property_enum_items(prop, camera_units_items);
1222 RNA_def_property_ui_text(prop, "Units", "Units used for camera focal length");
1223
1224 /* Principal Point */
1225 prop = RNA_def_property(srna, "principal_point", PROP_FLOAT, PROP_NONE);
1226 RNA_def_property_array(prop, 2);
1227 RNA_def_property_float_sdna(prop, nullptr, "principal_point");
1228 RNA_def_property_range(prop, -1, 1);
1229 RNA_def_property_ui_range(prop, -1, 1, 0.1, 3);
1231 RNA_def_property_ui_text(prop, "Principal Point", "Optical center of lens");
1233
1234 /* Principal Point, in pixels */
1235 prop = RNA_def_property(srna, "principal_point_pixels", PROP_FLOAT, PROP_PIXEL);
1236 RNA_def_property_array(prop, 2);
1239 "rna_trackingCamera_principal_point_pixels_get",
1240 "rna_trackingCamera_principal_point_pixels_set",
1241 nullptr);
1242 RNA_def_property_ui_text(prop, "Principal Point", "Optical center of lens in pixels");
1244
1245 /* Radial distortion parameters */
1246 prop = RNA_def_property(srna, "k1", PROP_FLOAT, PROP_NONE);
1247 RNA_def_property_float_sdna(prop, nullptr, "k1");
1249 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1251 prop, "K1", "First coefficient of third order polynomial radial distortion");
1252 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1253
1254 prop = RNA_def_property(srna, "k2", PROP_FLOAT, PROP_NONE);
1255 RNA_def_property_float_sdna(prop, nullptr, "k2");
1257 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1259 prop, "K2", "Second coefficient of third order polynomial radial distortion");
1260 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1261
1262 prop = RNA_def_property(srna, "k3", PROP_FLOAT, PROP_NONE);
1263 RNA_def_property_float_sdna(prop, nullptr, "k3");
1265 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1267 prop, "K3", "Third coefficient of third order polynomial radial distortion");
1268 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1269
1270 /* Division distortion parameters */
1271 prop = RNA_def_property(srna, "division_k1", PROP_FLOAT, PROP_NONE);
1273 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1274 RNA_def_property_ui_text(prop, "K1", "First coefficient of second order division distortion");
1275 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1276
1277 prop = RNA_def_property(srna, "division_k2", PROP_FLOAT, PROP_NONE);
1279 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1280 RNA_def_property_ui_text(prop, "K2", "Second coefficient of second order division distortion");
1281 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1282
1283 /* Nuke distortion parameters */
1284 prop = RNA_def_property(srna, "nuke_k1", PROP_FLOAT, PROP_NONE);
1286 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1287 RNA_def_property_ui_text(prop, "K1", "First coefficient of second order Nuke distortion");
1288 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1289
1290 prop = RNA_def_property(srna, "nuke_k2", PROP_FLOAT, PROP_NONE);
1292 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1293 RNA_def_property_ui_text(prop, "K2", "Second coefficient of second order Nuke distortion");
1294 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1295
1296 /* Brown-Conrady distortion parameters */
1297 prop = RNA_def_property(srna, "brown_k1", PROP_FLOAT, PROP_NONE);
1299 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1301 prop, "K1", "First coefficient of fourth order Brown-Conrady radial distortion");
1302 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1303
1304 prop = RNA_def_property(srna, "brown_k2", PROP_FLOAT, PROP_NONE);
1306 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1308 prop, "K2", "Second coefficient of fourth order Brown-Conrady radial distortion");
1309 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1310
1311 prop = RNA_def_property(srna, "brown_k3", PROP_FLOAT, PROP_NONE);
1313 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1315 prop, "K3", "Third coefficient of fourth order Brown-Conrady radial distortion");
1316 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1317
1318 prop = RNA_def_property(srna, "brown_k4", PROP_FLOAT, PROP_NONE);
1320 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1322 prop, "K4", "Fourth coefficient of fourth order Brown-Conrady radial distortion");
1323 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1324
1325 prop = RNA_def_property(srna, "brown_p1", PROP_FLOAT, PROP_NONE);
1327 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1329 prop, "P1", "First coefficient of second order Brown-Conrady tangential distortion");
1330 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1331
1332 prop = RNA_def_property(srna, "brown_p2", PROP_FLOAT, PROP_NONE);
1334 RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1336 prop, "P2", "Second coefficient of second order Brown-Conrady tangential distortion");
1337 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1338
1339 /* pixel aspect */
1340 prop = RNA_def_property(srna, "pixel_aspect", PROP_FLOAT, PROP_XYZ);
1341 RNA_def_property_float_sdna(prop, nullptr, "pixel_aspect");
1343 RNA_def_property_range(prop, 0.1f, FLT_MAX);
1344 RNA_def_property_ui_range(prop, 0.1f, 5000.0f, 1, 2);
1346 RNA_def_property_ui_text(prop, "Pixel Aspect Ratio", "Pixel aspect ratio");
1347 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1348}
1349
1351{
1352 StructRNA *srna;
1353 PropertyRNA *prop;
1354
1355 static int boundbox_dimsize[] = {2, 2};
1356
1357 srna = RNA_def_struct(brna, "MovieTrackingMarker", nullptr);
1359 srna, "Movie tracking marker data", "Match-moving marker data for tracking");
1360
1361 /* position */
1362 prop = RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION);
1363 RNA_def_property_array(prop, 2);
1365 RNA_def_property_float_sdna(prop, nullptr, "pos");
1366 RNA_def_property_ui_text(prop, "Position", "Marker position at frame in normalized coordinates");
1368
1369 /* frame */
1370 prop = RNA_def_property(srna, "frame", PROP_INT, PROP_NONE);
1371 RNA_def_property_int_sdna(prop, nullptr, "framenr");
1372 RNA_def_property_ui_text(prop, "Frame", "Frame number marker is keyframed on");
1373 RNA_def_property_int_funcs(prop, nullptr, "rna_trackingMarker_frame_set", nullptr);
1375
1376 /* enable */
1377 prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
1378 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MARKER_DISABLED);
1379 RNA_def_property_ui_text(prop, "Mode", "Is marker muted for current frame");
1381
1382 /* pattern */
1383 prop = RNA_def_property(srna, "pattern_corners", PROP_FLOAT, PROP_MATRIX);
1384 RNA_def_property_float_sdna(prop, nullptr, "pattern_corners");
1389 "Pattern Corners",
1390 "Array of coordinates which represents pattern's corners in "
1391 "normalized coordinates relative to marker position");
1392 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_markerPattern_update");
1393
1394 prop = RNA_def_property(srna, "pattern_bound_box", PROP_FLOAT, PROP_NONE);
1395 RNA_def_property_multi_array(prop, 2, boundbox_dimsize);
1397 RNA_def_property_float_funcs(prop, "rna_tracking_markerPattern_boundbox_get", nullptr, nullptr);
1399 prop, "Pattern Bounding Box", "Pattern area bounding box in normalized coordinates");
1400
1401 /* search */
1402 prop = RNA_def_property(srna, "search_min", PROP_FLOAT, PROP_TRANSLATION);
1403 RNA_def_property_array(prop, 2);
1405 RNA_def_property_float_sdna(prop, nullptr, "search_min");
1408 "Search Min",
1409 "Left-bottom corner of search area in normalized coordinates relative "
1410 "to marker position");
1411 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_markerSearch_update");
1412
1413 prop = RNA_def_property(srna, "search_max", PROP_FLOAT, PROP_TRANSLATION);
1414 RNA_def_property_array(prop, 2);
1416 RNA_def_property_float_sdna(prop, nullptr, "search_max");
1419 "Search Max",
1420 "Right-bottom corner of search area in normalized coordinates relative "
1421 "to marker position");
1422 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_markerSearch_update");
1423
1424 /* is marker keyframed */
1425 prop = RNA_def_property(srna, "is_keyed", PROP_BOOLEAN, PROP_NONE);
1429 prop, "Keyframed", "Whether the position of the marker is keyframed or tracked");
1430}
1431
1433{
1434 StructRNA *srna;
1435 FunctionRNA *func;
1436 PropertyRNA *parm;
1437
1438 RNA_def_property_srna(cprop, "MovieTrackingMarkers");
1439 srna = RNA_def_struct(brna, "MovieTrackingMarkers", nullptr);
1440 RNA_def_struct_sdna(srna, "MovieTrackingTrack");
1442 srna, "Movie Tracking Markers", "Collection of markers for movie tracking track");
1443
1444 func = RNA_def_function(srna, "find_frame", "rna_trackingMarkers_find_frame");
1445 RNA_def_function_ui_description(func, "Get marker for specified frame");
1446 parm = RNA_def_int(func,
1447 "frame",
1448 1,
1449 MINFRAME,
1450 MAXFRAME,
1451 "Frame",
1452 "Frame number to find marker for",
1453 MINFRAME,
1454 MAXFRAME);
1456 RNA_def_boolean(func,
1457 "exact",
1458 true,
1459 "Exact",
1460 "Get marker at exact frame number rather than get estimated marker");
1461 parm = RNA_def_pointer(func, "marker", "MovieTrackingMarker", "", "Marker for specified frame");
1462 RNA_def_function_return(func, parm);
1463
1464 func = RNA_def_function(srna, "insert_frame", "rna_trackingMarkers_insert_frame");
1465 RNA_def_function_ui_description(func, "Insert a new marker at the specified frame");
1466 parm = RNA_def_int(func,
1467 "frame",
1468 1,
1469 MINFRAME,
1470 MAXFRAME,
1471 "Frame",
1472 "Frame number to insert marker to",
1473 MINFRAME,
1474 MAXFRAME);
1477 func,
1478 "co",
1479 2,
1480 nullptr,
1481 -1.0,
1482 1.0,
1483 "Coordinate",
1484 "Place new marker at the given frame using specified in normalized space coordinates",
1485 -1.0,
1486 1.0);
1488 parm = RNA_def_pointer(func, "marker", "MovieTrackingMarker", "", "Newly created marker");
1489 RNA_def_function_return(func, parm);
1490
1491 func = RNA_def_function(srna, "delete_frame", "rna_trackingMarkers_delete_frame");
1492 RNA_def_function_ui_description(func, "Delete marker at specified frame");
1493 parm = RNA_def_int(func,
1494 "frame",
1495 1,
1496 MINFRAME,
1497 MAXFRAME,
1498 "Frame",
1499 "Frame number to delete marker from",
1500 MINFRAME,
1501 MAXFRAME);
1503}
1504
1506{
1507 StructRNA *srna;
1508 PropertyRNA *prop;
1509
1511
1512 srna = RNA_def_struct(brna, "MovieTrackingTrack", nullptr);
1513 RNA_def_struct_path_func(srna, "rna_trackingTrack_path");
1515 srna, "Movie tracking track data", "Match-moving track data for tracking");
1516 RNA_def_struct_ui_icon(srna, ICON_ANIM_DATA);
1517
1518 /* name */
1519 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1520 RNA_def_property_ui_text(prop, "Name", "Unique name of track");
1521 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_trackingTrack_name_set");
1524 RNA_def_struct_name_property(srna, prop);
1525
1526 /* limit frames */
1527 prop = RNA_def_property(srna, "frames_limit", PROP_INT, PROP_NONE);
1529 RNA_def_property_int_sdna(prop, nullptr, "frames_limit");
1531 RNA_def_property_range(prop, 0, SHRT_MAX);
1533 prop, "Frames Limit", "Every tracking cycle, this number of frames are tracked");
1534
1535 /* pattern match */
1536 prop = RNA_def_property(srna, "pattern_match", PROP_ENUM, PROP_NONE);
1538 RNA_def_property_enum_sdna(prop, nullptr, "pattern_match");
1542 prop, "Pattern Match", "Track pattern from given frame when tracking marker to next frame");
1543
1544 /* margin */
1545 prop = RNA_def_property(srna, "margin", PROP_INT, PROP_PIXEL);
1547 RNA_def_property_int_sdna(prop, nullptr, "margin");
1549 RNA_def_property_range(prop, 0, 300);
1551 prop, "Margin", "Distance from image boundary at which marker stops tracking");
1552
1553 /* tracking motion model */
1554 prop = RNA_def_property(srna, "motion_model", PROP_ENUM, PROP_NONE);
1558 RNA_def_property_ui_text(prop, "Motion Model", "Default motion model to use for tracking");
1559
1560 /* minimum correlation */
1561 prop = RNA_def_property(srna, "correlation_min", PROP_FLOAT, PROP_NONE);
1563 RNA_def_property_float_sdna(prop, nullptr, "minimum_correlation");
1564 RNA_def_property_range(prop, 0.0f, 1.0f);
1565 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.05, 3);
1567 "Correlation",
1568 "Minimal value of correlation between matched pattern and reference "
1569 "that is still treated as successful tracking");
1570
1571 /* use_brute */
1572 prop = RNA_def_property(srna, "use_brute", PROP_BOOLEAN, PROP_NONE);
1573 RNA_def_property_boolean_sdna(prop, nullptr, "algorithm_flag", TRACK_ALGORITHM_FLAG_USE_BRUTE);
1576 prop, "Prepass", "Use a brute-force translation only pre-track before refinement");
1578
1579 /* use_brute */
1580 prop = RNA_def_property(srna, "use_mask", PROP_BOOLEAN, PROP_NONE);
1581 RNA_def_property_boolean_sdna(prop, nullptr, "algorithm_flag", TRACK_ALGORITHM_FLAG_USE_MASK);
1583 prop,
1584 "Use Mask",
1585 "Use a Grease Pencil data-block as a mask to use only specified areas of pattern "
1586 "when tracking");
1588
1589 /* use_normalization */
1590 prop = RNA_def_property(srna, "use_normalization", PROP_BOOLEAN, PROP_NONE);
1592 prop, nullptr, "algorithm_flag", TRACK_ALGORITHM_FLAG_USE_NORMALIZATION);
1595 prop, "Normalize", "Normalize light intensities while tracking (slower)");
1597
1598 /* markers */
1599 prop = RNA_def_property(srna, "markers", PROP_COLLECTION, PROP_NONE);
1600 RNA_def_property_struct_type(prop, "MovieTrackingMarker");
1601 RNA_def_property_collection_sdna(prop, nullptr, "markers", "markersnr");
1602 RNA_def_property_ui_text(prop, "Markers", "Collection of markers in track");
1604 rna_def_trackingMarkers(brna, prop);
1605
1606 /* ** channels ** */
1607
1608 /* use_red_channel */
1609 prop = RNA_def_property(srna, "use_red_channel", PROP_BOOLEAN, PROP_NONE);
1612 RNA_def_property_ui_text(prop, "Use Red Channel", "Use red channel from footage for tracking");
1614
1615 /* use_green_channel */
1616 prop = RNA_def_property(srna, "use_green_channel", PROP_BOOLEAN, PROP_NONE);
1620 prop, "Use Green Channel", "Use green channel from footage for tracking");
1622
1623 /* use_blue_channel */
1624 prop = RNA_def_property(srna, "use_blue_channel", PROP_BOOLEAN, PROP_NONE);
1627 RNA_def_property_ui_text(prop, "Use Blue Channel", "Use blue channel from footage for tracking");
1629
1630 /* preview_grayscale */
1631 prop = RNA_def_property(srna, "use_grayscale_preview", PROP_BOOLEAN, PROP_NONE);
1635 prop, "Grayscale", "Display what the tracking algorithm sees in the preview");
1637
1638 /* preview_alpha */
1639 prop = RNA_def_property(srna, "use_alpha_preview", PROP_BOOLEAN, PROP_NONE);
1640 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_PREVIEW_ALPHA);
1642 RNA_def_property_ui_text(prop, "Alpha", "Apply track's mask on displaying preview");
1644
1645 /* has bundle */
1646 prop = RNA_def_property(srna, "has_bundle", PROP_BOOLEAN, PROP_NONE);
1647 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_HAS_BUNDLE);
1649 RNA_def_property_ui_text(prop, "Has Bundle", "True if track has a valid bundle");
1650
1651 /* bundle position */
1652 prop = RNA_def_property(srna, "bundle", PROP_FLOAT, PROP_TRANSLATION);
1653 RNA_def_property_array(prop, 3);
1654 RNA_def_property_float_sdna(prop, nullptr, "bundle_pos");
1656 RNA_def_property_ui_text(prop, "Bundle", "Position of bundle reconstructed from this track");
1659
1660 /* hide */
1661 prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
1662 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_HIDDEN);
1664 RNA_def_property_ui_text(prop, "Hide", "Track is hidden");
1666
1667 /* select */
1668 prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
1670 prop, "rna_trackingTrack_select_get", "rna_trackingTrack_select_set");
1671 RNA_def_property_ui_text(prop, "Select", "Track is selected");
1673
1674 /* select_anchor */
1675 prop = RNA_def_property(srna, "select_anchor", PROP_BOOLEAN, PROP_NONE);
1676 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SELECT);
1677 RNA_def_property_ui_text(prop, "Select Anchor", "Track's anchor point is selected");
1679
1680 /* select_pattern */
1681 prop = RNA_def_property(srna, "select_pattern", PROP_BOOLEAN, PROP_NONE);
1682 RNA_def_property_boolean_sdna(prop, nullptr, "pat_flag", SELECT);
1683 RNA_def_property_ui_text(prop, "Select Pattern", "Track's pattern area is selected");
1685
1686 /* select_search */
1687 prop = RNA_def_property(srna, "select_search", PROP_BOOLEAN, PROP_NONE);
1688 RNA_def_property_boolean_sdna(prop, nullptr, "search_flag", SELECT);
1689 RNA_def_property_ui_text(prop, "Select Search", "Track's search area is selected");
1691
1692 /* locked */
1693 prop = RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
1694 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_LOCKED);
1696 RNA_def_property_ui_text(prop, "Lock", "Track is locked and all changes to it are disabled");
1698
1699 /* custom color */
1700 prop = RNA_def_property(srna, "use_custom_color", PROP_BOOLEAN, PROP_NONE);
1701 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_CUSTOMCOLOR);
1703 RNA_def_property_ui_text(prop, "Custom Color", "Use custom color instead of theme-defined");
1705
1706 /* color */
1707 prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR_GAMMA);
1708 RNA_def_property_array(prop, 3);
1709 RNA_def_property_range(prop, 0.0f, 1.0f);
1711 prop,
1712 "Color",
1713 "Color of the track in the Movie Clip Editor and the 3D viewport after a solve");
1715
1716 /* average error */
1717 prop = RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE);
1718 RNA_def_property_float_sdna(prop, nullptr, "error");
1720 RNA_def_property_ui_text(prop, "Average Error", "Average error of re-projection");
1721
1722 /* Annotations */
1723 prop = RNA_def_property(srna, "annotation", PROP_POINTER, PROP_NONE);
1724 RNA_def_property_pointer_sdna(prop, nullptr, "gpd");
1725 RNA_def_property_struct_type(prop, "Annotation");
1727 prop, nullptr, nullptr, nullptr, "rna_GPencil_datablocks_annotations_poll");
1729 RNA_def_property_ui_text(prop, "Annotation", "Annotation data for this track");
1731
1732 /* weight */
1733 prop = RNA_def_property(srna, "weight", PROP_FLOAT, PROP_FACTOR);
1734 RNA_def_property_float_sdna(prop, nullptr, "weight");
1735 RNA_def_property_range(prop, 0.0f, 1.0f);
1736 RNA_def_property_ui_text(prop, "Weight", "Influence of this track on a final solution");
1737
1738 /* weight_stab */
1739 prop = RNA_def_property(srna, "weight_stab", PROP_FLOAT, PROP_FACTOR);
1740 RNA_def_property_float_sdna(prop, nullptr, "weight_stab");
1741 RNA_def_property_range(prop, 0.0f, 1.0f);
1742 RNA_def_property_ui_text(prop, "Stab Weight", "Influence of this track on 2D stabilization");
1743
1744 /* offset */
1745 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_TRANSLATION);
1746 RNA_def_property_array(prop, 2);
1748 RNA_def_property_float_sdna(prop, nullptr, "offset");
1749 RNA_def_property_ui_text(prop, "Offset", "Offset of track from the parenting point");
1751}
1752
1754{
1755 StructRNA *srna;
1756 PropertyRNA *prop;
1757
1758 srna = RNA_def_struct(brna, "MovieTrackingPlaneMarker", nullptr);
1760 srna, "Movie Tracking Plane Marker Data", "Match-moving plane marker data for tracking");
1761
1762 /* frame */
1763 prop = RNA_def_property(srna, "frame", PROP_INT, PROP_NONE);
1764 RNA_def_property_int_sdna(prop, nullptr, "framenr");
1765 RNA_def_property_ui_text(prop, "Frame", "Frame number marker is keyframed on");
1766 RNA_def_property_int_funcs(prop, nullptr, "rna_trackingPlaneMarker_frame_set", nullptr);
1768
1769 /* Corners */
1770 prop = RNA_def_property(srna, "corners", PROP_FLOAT, PROP_MATRIX);
1771 RNA_def_property_float_sdna(prop, nullptr, "corners");
1776 "Corners",
1777 "Array of coordinates which represents UI rectangle corners in "
1778 "frame normalized coordinates");
1780
1781 /* enable */
1782 prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
1784 RNA_def_property_ui_text(prop, "Mode", "Is marker muted for current frame");
1786}
1787
1789{
1790 StructRNA *srna;
1791 FunctionRNA *func;
1792 PropertyRNA *parm;
1793
1794 RNA_def_property_srna(cprop, "MovieTrackingPlaneMarkers");
1795 srna = RNA_def_struct(brna, "MovieTrackingPlaneMarkers", nullptr);
1796 RNA_def_struct_sdna(srna, "MovieTrackingPlaneTrack");
1798 "Movie Tracking Plane Markers",
1799 "Collection of markers for movie tracking plane track");
1800
1801 func = RNA_def_function(srna, "find_frame", "rna_trackingPlaneMarkers_find_frame");
1802 RNA_def_function_ui_description(func, "Get plane marker for specified frame");
1803 parm = RNA_def_int(func,
1804 "frame",
1805 1,
1806 MINFRAME,
1807 MAXFRAME,
1808 "Frame",
1809 "Frame number to find marker for",
1810 MINFRAME,
1811 MAXFRAME);
1813 RNA_def_boolean(func,
1814 "exact",
1815 true,
1816 "Exact",
1817 "Get plane marker at exact frame number rather than get estimated marker");
1818 parm = RNA_def_pointer(
1819 func, "plane_marker", "MovieTrackingPlaneMarker", "", "Plane marker for specified frame");
1820 RNA_def_function_return(func, parm);
1821
1822 func = RNA_def_function(srna, "insert_frame", "rna_trackingPlaneMarkers_insert_frame");
1823 RNA_def_function_ui_description(func, "Insert a new plane marker at the specified frame");
1824 parm = RNA_def_int(func,
1825 "frame",
1826 1,
1827 MINFRAME,
1828 MAXFRAME,
1829 "Frame",
1830 "Frame number to insert marker to",
1831 MINFRAME,
1832 MAXFRAME);
1834 parm = RNA_def_pointer(
1835 func, "plane_marker", "MovieTrackingPlaneMarker", "", "Newly created plane marker");
1836 RNA_def_function_return(func, parm);
1837
1838 func = RNA_def_function(srna, "delete_frame", "rna_trackingPlaneMarkers_delete_frame");
1839 RNA_def_function_ui_description(func, "Delete plane marker at specified frame");
1840 parm = RNA_def_int(func,
1841 "frame",
1842 1,
1843 MINFRAME,
1844 MAXFRAME,
1845 "Frame",
1846 "Frame number to delete plane marker from",
1847 MINFRAME,
1848 MAXFRAME);
1850}
1851
1853{
1854 StructRNA *srna;
1855 PropertyRNA *prop;
1856
1858
1859 srna = RNA_def_struct(brna, "MovieTrackingPlaneTrack", nullptr);
1860 RNA_def_struct_path_func(srna, "rna_trackingPlaneTrack_path");
1862 srna, "Movie tracking plane track data", "Match-moving plane track data for tracking");
1863 RNA_def_struct_ui_icon(srna, ICON_ANIM_DATA);
1864
1865 /* name */
1866 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1867 RNA_def_property_ui_text(prop, "Name", "Unique name of track");
1868 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_trackingPlaneTrack_name_set");
1871 RNA_def_struct_name_property(srna, prop);
1872
1873 /* markers */
1874 prop = RNA_def_property(srna, "markers", PROP_COLLECTION, PROP_NONE);
1875 RNA_def_property_struct_type(prop, "MovieTrackingPlaneMarker");
1876 RNA_def_property_collection_sdna(prop, nullptr, "markers", "markersnr");
1877 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 "Reconstructed",
2219 "Whether the tracking data contains valid reconstruction information");
2220
2221 /* average_error */
2222 prop = RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE);
2223 RNA_def_property_float_sdna(prop, nullptr, "error");
2225 RNA_def_property_ui_text(prop, "Average Error", "Average error of reconstruction");
2226
2227 /* cameras */
2228 prop = RNA_def_property(srna, "cameras", PROP_COLLECTION, PROP_NONE);
2229 RNA_def_property_struct_type(prop, "MovieReconstructedCamera");
2230 RNA_def_property_collection_sdna(prop, nullptr, "cameras", "camnr");
2231 RNA_def_property_ui_text(prop, "Cameras", "Collection of solved cameras");
2232 RNA_def_property_srna(prop, "MovieTrackingReconstructedCameras");
2233}
2234
2236{
2237 StructRNA *srna;
2238 FunctionRNA *func;
2239 PropertyRNA *prop;
2240 PropertyRNA *parm;
2241
2242 srna = RNA_def_struct(brna, "MovieTrackingTracks", nullptr);
2243 RNA_def_struct_sdna(srna, "MovieTracking");
2244 RNA_def_struct_ui_text(srna, "Movie Tracks", "Collection of movie tracking tracks");
2245
2246 func = RNA_def_function(srna, "new", "rna_trackingTracks_new");
2248 RNA_def_function_ui_description(func, "Create new motion track in this movie clip");
2249 RNA_def_string(func, "name", nullptr, 0, "", "Name of new track");
2250 RNA_def_int(func,
2251 "frame",
2252 1,
2253 MINFRAME,
2254 MAXFRAME,
2255 "Frame",
2256 "Frame number to add track on",
2257 MINFRAME,
2258 MAXFRAME);
2259 parm = RNA_def_pointer(func, "track", "MovieTrackingTrack", "", "Newly created track");
2260 RNA_def_function_return(func, parm);
2261
2262 /* active track */
2263 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2264 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2266 prop, "rna_tracking_active_track_get", "rna_tracking_active_track_set", nullptr, nullptr);
2269 "Active Track",
2270 "Active track in this tracking data object. "
2271 "Deprecated, use objects[name].tracks.active");
2274}
2275
2277{
2278 StructRNA *srna;
2279 PropertyRNA *prop;
2280
2281 srna = RNA_def_struct(brna, "MovieTrackingPlaneTracks", nullptr);
2282 RNA_def_struct_sdna(srna, "MovieTracking");
2283 RNA_def_struct_ui_text(srna, "Movie Plane Tracks", "Collection of movie tracking plane tracks");
2284
2285 /* TODO(sergey): Add API to create new plane tracks */
2286
2287 /* active plane track */
2288 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2289 RNA_def_property_struct_type(prop, "MovieTrackingPlaneTrack");
2291 "rna_tracking_active_plane_track_get",
2292 "rna_tracking_active_plane_track_set",
2293 nullptr,
2294 nullptr);
2297 "Active Plane Track",
2298 "Active plane track in this tracking data object. "
2299 "Deprecated, use objects[name].plane_tracks.active");
2301}
2302
2304{
2305 StructRNA *srna;
2306 FunctionRNA *func;
2307 PropertyRNA *prop;
2308 PropertyRNA *parm;
2309
2310 srna = RNA_def_struct(brna, "MovieTrackingObjectTracks", nullptr);
2311 RNA_def_struct_sdna(srna, "MovieTrackingObject");
2312 RNA_def_struct_ui_text(srna, "Movie Tracks", "Collection of movie tracking tracks");
2313
2314 func = RNA_def_function(srna, "new", "rna_trackingObject_tracks_new");
2316 RNA_def_function_ui_description(func, "create new motion track in this movie clip");
2317 RNA_def_string(func, "name", nullptr, 0, "", "Name of new track");
2318 RNA_def_int(func,
2319 "frame",
2320 1,
2321 MINFRAME,
2322 MAXFRAME,
2323 "Frame",
2324 "Frame number to add tracks on",
2325 MINFRAME,
2326 MAXFRAME);
2327 parm = RNA_def_pointer(func, "track", "MovieTrackingTrack", "", "Newly created track");
2328 RNA_def_function_return(func, parm);
2329
2330 /* active track */
2331 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2332 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2334 "rna_tracking_object_active_track_get",
2335 "rna_tracking_object_active_track_set",
2336 nullptr,
2337 nullptr);
2339 RNA_def_property_ui_text(prop, "Active Track", "Active track in this tracking data object");
2342}
2343
2345{
2346 StructRNA *srna;
2347 PropertyRNA *prop;
2348
2349 srna = RNA_def_struct(brna, "MovieTrackingObjectPlaneTracks", nullptr);
2350 RNA_def_struct_sdna(srna, "MovieTrackingObject");
2351 RNA_def_struct_ui_text(srna, "Plane Tracks", "Collection of tracking plane tracks");
2352
2353 /* active track */
2354 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2355 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2357 "rna_tracking_object_active_plane_track_get",
2358 "rna_tracking_object_active_plane_track_set",
2359 nullptr,
2360 nullptr);
2362 RNA_def_property_ui_text(prop, "Active Track", "Active track in this tracking data object");
2365}
2366
2368{
2369 StructRNA *srna;
2370 PropertyRNA *prop;
2371
2372 srna = RNA_def_struct(brna, "MovieTrackingObject", nullptr);
2374 srna, "Movie tracking object data", "Match-moving object tracking and reconstruction data");
2375
2376 /* name */
2377 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
2378 RNA_def_property_ui_text(prop, "Name", "Unique name of object");
2379 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_trackingObject_name_set");
2382 RNA_def_struct_name_property(srna, prop);
2383
2384 /* is_camera */
2385 prop = RNA_def_property(srna, "is_camera", PROP_BOOLEAN, PROP_NONE);
2388 RNA_def_property_ui_text(prop, "Camera", "Object is used for camera tracking");
2390
2391 /* tracks */
2392 prop = RNA_def_property(srna, "tracks", PROP_COLLECTION, PROP_NONE);
2394 "rna_trackingObject_tracks_begin",
2395 "rna_iterator_listbase_next",
2396 "rna_iterator_listbase_end",
2397 "rna_iterator_listbase_get",
2398 nullptr,
2399 nullptr,
2400 nullptr,
2401 nullptr);
2402 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2403 RNA_def_property_ui_text(prop, "Tracks", "Collection of tracks in this tracking data object");
2404 RNA_def_property_srna(prop, "MovieTrackingObjectTracks");
2405
2406 /* plane tracks */
2407 prop = RNA_def_property(srna, "plane_tracks", PROP_COLLECTION, PROP_NONE);
2409 "rna_trackingObject_plane_tracks_begin",
2410 "rna_iterator_listbase_next",
2411 "rna_iterator_listbase_end",
2412 "rna_iterator_listbase_get",
2413 nullptr,
2414 nullptr,
2415 nullptr,
2416 nullptr);
2417 RNA_def_property_struct_type(prop, "MovieTrackingPlaneTrack");
2419 prop, "Plane Tracks", "Collection of plane tracks in this tracking data object");
2420 RNA_def_property_srna(prop, "MovieTrackingObjectPlaneTracks");
2421
2422 /* reconstruction */
2423 prop = RNA_def_property(srna, "reconstruction", PROP_POINTER, PROP_NONE);
2424 RNA_def_property_struct_type(prop, "MovieTrackingReconstruction");
2426 prop, "rna_trackingObject_reconstruction_get", nullptr, nullptr, nullptr);
2427
2428 /* scale */
2429 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
2431 RNA_def_property_float_sdna(prop, nullptr, "scale");
2432 RNA_def_property_range(prop, 0.0001f, 10000.0f);
2433 RNA_def_property_ui_range(prop, 0.0001f, 10000.0, 1, 4);
2435 RNA_def_property_ui_text(prop, "Scale", "Scale of object solution in camera space");
2436 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingObject_flushUpdate");
2437
2438 /* keyframe_a */
2439 prop = RNA_def_property(srna, "keyframe_a", PROP_INT, PROP_NONE);
2441 RNA_def_property_int_sdna(prop, nullptr, "keyframe1");
2443 prop, "Keyframe A", "First keyframe used for reconstruction initialization");
2445
2446 /* keyframe_b */
2447 prop = RNA_def_property(srna, "keyframe_b", PROP_INT, PROP_NONE);
2449 RNA_def_property_int_sdna(prop, nullptr, "keyframe2");
2451 prop, "Keyframe B", "Second keyframe used for reconstruction initialization");
2453}
2454
2456{
2457 StructRNA *srna;
2458 PropertyRNA *prop;
2459
2460 FunctionRNA *func;
2461 PropertyRNA *parm;
2462
2463 RNA_def_property_srna(cprop, "MovieTrackingObjects");
2464 srna = RNA_def_struct(brna, "MovieTrackingObjects", nullptr);
2465 RNA_def_struct_sdna(srna, "MovieTracking");
2466 RNA_def_struct_ui_text(srna, "Movie Objects", "Collection of movie tracking objects");
2467
2468 func = RNA_def_function(srna, "new", "rna_trackingObject_new");
2469 RNA_def_function_ui_description(func, "Add tracking object to this movie clip");
2470 parm = RNA_def_string(func, "name", nullptr, 0, "", "Name of new object");
2472 parm = RNA_def_pointer(func, "object", "MovieTrackingObject", "", "New motion tracking object");
2473 RNA_def_function_return(func, parm);
2474
2475 func = RNA_def_function(srna, "remove", "rna_trackingObject_remove");
2477 RNA_def_function_ui_description(func, "Remove tracking object from this movie clip");
2478 parm = RNA_def_pointer(
2479 func, "object", "MovieTrackingObject", "", "Motion tracking object to be removed");
2482
2483 /* active object */
2484 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2485 RNA_def_property_struct_type(prop, "MovieTrackingObject");
2487 prop, "rna_tracking_active_object_get", "rna_tracking_active_object_set", nullptr, nullptr);
2489 RNA_def_property_ui_text(prop, "Active Object", "Active object in this tracking data object");
2490}
2491
2493{
2494 StructRNA *srna;
2495 PropertyRNA *prop;
2496
2497 static const EnumPropertyItem sort_items[] = {
2498 {TRACKING_DOPE_SORT_NAME, "NAME", 0, "Name", "Sort channels by their names"},
2500 "LONGEST",
2501 0,
2502 "Longest",
2503 "Sort channels by longest tracked segment"},
2505 "TOTAL",
2506 0,
2507 "Total",
2508 "Sort channels by overall amount of tracked segments"},
2510 "AVERAGE_ERROR",
2511 0,
2512 "Average Error",
2513 "Sort channels by average reprojection error of tracks after solve"},
2514 {TRACKING_DOPE_SORT_START, "START", 0, "Start Frame", "Sort channels by first frame number"},
2515 {TRACKING_DOPE_SORT_END, "END", 0, "End Frame", "Sort channels by last frame number"},
2516 {0, nullptr, 0, nullptr, nullptr},
2517 };
2518
2519 srna = RNA_def_struct(brna, "MovieTrackingDopesheet", nullptr);
2520 RNA_def_struct_path_func(srna, "rna_trackingDopesheet_path");
2521 RNA_def_struct_ui_text(srna, "Movie Tracking Dopesheet", "Match-moving dopesheet data");
2522
2523 /* dopesheet sort */
2524 prop = RNA_def_property(srna, "sort_method", PROP_ENUM, PROP_NONE);
2525 RNA_def_property_enum_sdna(prop, nullptr, "sort_method");
2526 RNA_def_property_enum_items(prop, sort_items);
2528 prop, "Dopesheet Sort Field", "Method to be used to sort channels in dopesheet view");
2529 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2530
2531 /* invert_dopesheet_sort */
2532 prop = RNA_def_property(srna, "use_invert_sort", PROP_BOOLEAN, PROP_NONE);
2535 prop, "Invert Dopesheet Sort", "Invert sort order of dopesheet channels");
2536 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2537
2538 /* show_only_selected */
2539 prop = RNA_def_property(srna, "show_only_selected", PROP_BOOLEAN, PROP_NONE);
2542 prop, "Only Show Selected", "Only include channels relating to selected objects and data");
2543 RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, 0);
2544 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2545
2546 /* show_hidden */
2547 prop = RNA_def_property(srna, "show_hidden", PROP_BOOLEAN, PROP_NONE);
2550 prop, "Display Hidden", "Include channels from objects/bone that are not visible");
2551 RNA_def_property_ui_icon(prop, ICON_GHOST_ENABLED, 0);
2552 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2553}
2554
2556{
2557 StructRNA *srna;
2558 PropertyRNA *prop;
2559
2573
2574 srna = RNA_def_struct(brna, "MovieTracking", nullptr);
2575 RNA_def_struct_path_func(srna, "rna_tracking_path");
2576 RNA_def_struct_ui_text(srna, "Movie tracking data", "Match-moving data for tracking");
2577
2578 /* settings */
2579 prop = RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
2580 RNA_def_property_struct_type(prop, "MovieTrackingSettings");
2581
2582 /* camera properties */
2583 prop = RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
2584 RNA_def_property_struct_type(prop, "MovieTrackingCamera");
2585
2586 /* tracks */
2587 prop = RNA_def_property(srna, "tracks", PROP_COLLECTION, PROP_NONE);
2589 "rna_trackingTracks_begin",
2590 "rna_iterator_listbase_next",
2591 "rna_iterator_listbase_end",
2592 "rna_iterator_listbase_get",
2593 nullptr,
2594 nullptr,
2595 nullptr,
2596 nullptr);
2597 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2599 "Tracks",
2600 "Collection of tracks in this tracking data object. "
2601 "Deprecated, use objects[name].tracks");
2602 RNA_def_property_srna(prop, "MovieTrackingTracks");
2603
2604 /* tracks */
2605 prop = RNA_def_property(srna, "plane_tracks", PROP_COLLECTION, PROP_NONE);
2607 "rna_trackingPlaneTracks_begin",
2608 "rna_iterator_listbase_next",
2609 "rna_iterator_listbase_end",
2610 "rna_iterator_listbase_get",
2611 nullptr,
2612 nullptr,
2613 nullptr,
2614 nullptr);
2615 RNA_def_property_struct_type(prop, "MovieTrackingPlaneTrack");
2617 "Plane Tracks",
2618 "Collection of plane tracks in this tracking data object. "
2619 "Deprecated, use objects[name].plane_tracks");
2620 RNA_def_property_srna(prop, "MovieTrackingPlaneTracks");
2621
2622 /* stabilization */
2623 prop = RNA_def_property(srna, "stabilization", PROP_POINTER, PROP_NONE);
2624 RNA_def_property_struct_type(prop, "MovieTrackingStabilization");
2625
2626 /* reconstruction */
2627 prop = RNA_def_property(srna, "reconstruction", PROP_POINTER, PROP_NONE);
2628 RNA_def_property_pointer_sdna(prop, nullptr, "reconstruction_legacy");
2630 prop, "rna_trackingReconstruction_get", nullptr, nullptr, nullptr);
2631 RNA_def_property_struct_type(prop, "MovieTrackingReconstruction");
2632
2633 /* objects */
2634 prop = RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE);
2636 "rna_trackingObjects_begin",
2637 "rna_iterator_listbase_next",
2638 "rna_iterator_listbase_end",
2639 "rna_iterator_listbase_get",
2640 nullptr,
2641 nullptr,
2642 nullptr,
2643 nullptr);
2644 RNA_def_property_struct_type(prop, "MovieTrackingObject");
2645 RNA_def_property_ui_text(prop, "Objects", "Collection of objects in this tracking data object");
2646 rna_def_trackingObjects(brna, prop);
2647
2648 /* active object index */
2649 prop = RNA_def_property(srna, "active_object_index", PROP_INT, PROP_NONE);
2650 RNA_def_property_int_sdna(prop, nullptr, "objectnr");
2653 "rna_tracking_active_object_index_get",
2654 "rna_tracking_active_object_index_set",
2655 "rna_tracking_active_object_index_range");
2656 RNA_def_property_ui_text(prop, "Active Object Index", "Index of active object");
2658
2659 /* dopesheet */
2660 prop = RNA_def_property(srna, "dopesheet", PROP_POINTER, PROP_NONE);
2661 RNA_def_property_struct_type(prop, "MovieTrackingDopesheet");
2662}
2663
2665{
2666 rna_def_tracking(brna);
2667}
2668
2669#endif
AnimData * BKE_animdata_from_id(const ID *id)
Definition anim_data.cc:83
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 &bmain, std::optional< blender::Span< bNodeTree * > > modified_trees=std::nullopt, const 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
@ RPT_ERROR
Definition BKE_report.hh:39
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:2185
#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:3439
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:526
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:2172
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:2408
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
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:586
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:534
#define LISTBASE_FOREACH(type, var, list)
MINLINE int max_ii(int a, int b)
MINLINE void copy_v2_v2(float r[2], const float a[2])
char * STRNCPY(char(&dst)[N], const char *src)
Definition BLI_string.h:693
#define STRNCPY_UTF8(dst, src)
#define BLT_I18NCONTEXT_ID_MOVIECLIP
void DEG_id_tag_update(ID *id, unsigned int flags)
#define MAX_ID_NAME
Definition DNA_ID.h:373
#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
@ CAMERA_UNITS_MM
@ CAMERA_UNITS_PX
@ TRACKING_DOPE_SELECTED_ONLY
@ TRACKING_DOPE_SORT_INVERSE
@ TRACKING_DOPE_SHOW_HIDDEN
@ TRACKING_CLEAN_DELETE_SEGMENT
@ TRACKING_CLEAN_SELECT
@ TRACKING_CLEAN_DELETE_TRACK
@ REFINE_PRINCIPAL_POINT
@ REFINE_TANGENTIAL_DISTORTION
@ REFINE_RADIAL_DISTORTION
@ REFINE_FOCAL_LENGTH
@ TRACKING_SPEED_DOUBLE
@ TRACKING_SPEED_HALF
@ TRACKING_SPEED_QUARTER
@ TRACKING_SPEED_REALTIME
@ 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
@ TRACKING_USE_KEYFRAME_SELECTION
@ 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
@ 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_AUTOSCALE
@ TRACKING_SHOW_STAB_TRACKS
@ TRACKING_STABILIZE_SCALE
@ TRACKING_STABILIZE_ROTATION
@ TRACKING_2D_STABILIZATION
@ TRACKING_MOTION_TRIPOD
@ TRACKING_DISTORTION_MODEL_DIVISION
@ TRACKING_DISTORTION_MODEL_POLYNOMIAL
@ TRACKING_DISTORTION_MODEL_NUKE
@ TRACKING_DISTORTION_MODEL_BROWN
@ TRACKING_FILTER_BICUBIC
@ TRACKING_FILTER_NEAREST
@ TRACKING_FILTER_BILINEAR
@ TRACKING_RECONSTRUCTED
@ MARKER_TRACKED
@ MARKER_DISABLED
@ TRACK_ALGORITHM_FLAG_USE_NORMALIZATION
@ TRACK_ALGORITHM_FLAG_USE_BRUTE
@ TRACK_ALGORITHM_FLAG_USE_MASK
@ PLANE_MARKER_DISABLED
@ PLANE_TRACK_AUTOKEY
@ TRACKING_OBJECT_CAMERA
@ TRACK_MATCH_PREVIOUS_FRAME
@ TRACK_MATCH_KEYFRAME
ParameterFlag
Definition RNA_types.hh:544
@ PARM_RNAPTR
Definition RNA_types.hh:547
@ PARM_REQUIRED
Definition RNA_types.hh:545
@ FUNC_USE_REPORTS
Definition RNA_types.hh:914
@ FUNC_USE_SELF_ID
Definition RNA_types.hh:889
@ PROP_FLOAT
Definition RNA_types.hh:164
@ PROP_BOOLEAN
Definition RNA_types.hh:162
@ PROP_ENUM
Definition RNA_types.hh:166
@ PROP_INT
Definition RNA_types.hh:163
@ PROP_STRING
Definition RNA_types.hh:165
@ PROP_POINTER
Definition RNA_types.hh:167
@ PROP_COLLECTION
Definition RNA_types.hh:168
#define RNA_TRANSLATION_PREC_DEFAULT
Definition RNA_types.hh:224
PropertyFlag
Definition RNA_types.hh:300
@ PROP_THICK_WRAP
Definition RNA_types.hh:423
@ PROP_ANIMATABLE
Definition RNA_types.hh:319
@ PROP_NEVER_UNLINK
Definition RNA_types.hh:384
@ PROP_EDITABLE
Definition RNA_types.hh:306
@ PROP_NEVER_NULL
Definition RNA_types.hh:377
@ PROP_ID_REFCOUNT
Definition RNA_types.hh:364
@ PROP_MATRIX
Definition RNA_types.hh:265
@ PROP_XYZ
Definition RNA_types.hh:269
@ PROP_PIXEL
Definition RNA_types.hh:248
@ PROP_ANGLE
Definition RNA_types.hh:252
@ PROP_NONE
Definition RNA_types.hh:233
@ PROP_FACTOR
Definition RNA_types.hh:251
@ PROP_COLOR_GAMMA
Definition RNA_types.hh:272
@ PROP_TRANSLATION
Definition RNA_types.hh:261
#define ND_DISPLAY
Definition WM_types.hh:491
#define NC_MOVIECLIP
Definition WM_types.hh:397
#define NC_SCENE
Definition WM_types.hh:378
#define ND_NODES
Definition WM_types.hh:436
#define NA_EDITED
Definition WM_types.hh:584
#define ND_SELECT
Definition WM_types.hh:508
#define ND_TRANSFORM
Definition WM_types.hh:456
#define NC_OBJECT
Definition WM_types.hh:379
BMesh const char void * data
nullptr float
#define SELECT
const char * name
void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, PointerRNA *ptr, ListBase *lb, IteratorSkipFunc skip)
PointerRNA RNA_pointer_create_with_parent(const PointerRNA &parent, StructRNA *type, void *data)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
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_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.cc:36
#define FLT_MAX
Definition stdcycles.h:14
Definition DNA_ID.h:414
struct MovieTracking tracking
MovieTrackingPlaneTrack * active_plane_track
MovieTrackingReconstruction reconstruction
MovieTrackingTrack * active_track
MovieTrackingPlaneMarker * markers
MovieTrackingMarker * markers
MovieTrackingCamera camera
MovieTrackingSettings settings
void invalidate()
Definition RNA_types.hh:110
void * data
Definition RNA_types.hh:53
max
Definition text_draw.cc:251
void WM_main_add_notifier(uint type, void *reference)
PointerRNA * ptr
Definition wm_files.cc:4238