Blender V4.5
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 {
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,
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 {
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,
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 {
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,
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 {
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(old_name, track->name);
271 /* Update the name, */
272 STRNCPY(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(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(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,
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");
1603 rna_def_trackingMarkers(brna, prop);
1604
1605 /* ** channels ** */
1606
1607 /* use_red_channel */
1608 prop = RNA_def_property(srna, "use_red_channel", PROP_BOOLEAN, PROP_NONE);
1611 RNA_def_property_ui_text(prop, "Use Red Channel", "Use red channel from footage for tracking");
1613
1614 /* use_green_channel */
1615 prop = RNA_def_property(srna, "use_green_channel", PROP_BOOLEAN, PROP_NONE);
1619 prop, "Use Green Channel", "Use green channel from footage for tracking");
1621
1622 /* use_blue_channel */
1623 prop = RNA_def_property(srna, "use_blue_channel", PROP_BOOLEAN, PROP_NONE);
1626 RNA_def_property_ui_text(prop, "Use Blue Channel", "Use blue channel from footage for tracking");
1628
1629 /* preview_grayscale */
1630 prop = RNA_def_property(srna, "use_grayscale_preview", PROP_BOOLEAN, PROP_NONE);
1634 prop, "Grayscale", "Display what the tracking algorithm sees in the preview");
1636
1637 /* preview_alpha */
1638 prop = RNA_def_property(srna, "use_alpha_preview", PROP_BOOLEAN, PROP_NONE);
1639 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_PREVIEW_ALPHA);
1641 RNA_def_property_ui_text(prop, "Alpha", "Apply track's mask on displaying preview");
1643
1644 /* has bundle */
1645 prop = RNA_def_property(srna, "has_bundle", PROP_BOOLEAN, PROP_NONE);
1646 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_HAS_BUNDLE);
1648 RNA_def_property_ui_text(prop, "Has Bundle", "True if track has a valid bundle");
1649
1650 /* bundle position */
1651 prop = RNA_def_property(srna, "bundle", PROP_FLOAT, PROP_TRANSLATION);
1652 RNA_def_property_array(prop, 3);
1653 RNA_def_property_float_sdna(prop, nullptr, "bundle_pos");
1655 RNA_def_property_ui_text(prop, "Bundle", "Position of bundle reconstructed from this track");
1657
1658 /* hide */
1659 prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
1660 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_HIDDEN);
1662 RNA_def_property_ui_text(prop, "Hide", "Track is hidden");
1664
1665 /* select */
1666 prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
1668 prop, "rna_trackingTrack_select_get", "rna_trackingTrack_select_set");
1669 RNA_def_property_ui_text(prop, "Select", "Track is selected");
1671
1672 /* select_anchor */
1673 prop = RNA_def_property(srna, "select_anchor", PROP_BOOLEAN, PROP_NONE);
1674 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SELECT);
1675 RNA_def_property_ui_text(prop, "Select Anchor", "Track's anchor point is selected");
1677
1678 /* select_pattern */
1679 prop = RNA_def_property(srna, "select_pattern", PROP_BOOLEAN, PROP_NONE);
1680 RNA_def_property_boolean_sdna(prop, nullptr, "pat_flag", SELECT);
1681 RNA_def_property_ui_text(prop, "Select Pattern", "Track's pattern area is selected");
1683
1684 /* select_search */
1685 prop = RNA_def_property(srna, "select_search", PROP_BOOLEAN, PROP_NONE);
1686 RNA_def_property_boolean_sdna(prop, nullptr, "search_flag", SELECT);
1687 RNA_def_property_ui_text(prop, "Select Search", "Track's search area is selected");
1689
1690 /* locked */
1691 prop = RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
1692 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_LOCKED);
1694 RNA_def_property_ui_text(prop, "Lock", "Track is locked and all changes to it are disabled");
1696
1697 /* custom color */
1698 prop = RNA_def_property(srna, "use_custom_color", PROP_BOOLEAN, PROP_NONE);
1699 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACK_CUSTOMCOLOR);
1701 RNA_def_property_ui_text(prop, "Custom Color", "Use custom color instead of theme-defined");
1703
1704 /* color */
1705 prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR_GAMMA);
1706 RNA_def_property_array(prop, 3);
1707 RNA_def_property_range(prop, 0.0f, 1.0f);
1709 prop,
1710 "Color",
1711 "Color of the track in the Movie Clip Editor and the 3D viewport after a solve");
1713
1714 /* average error */
1715 prop = RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE);
1716 RNA_def_property_float_sdna(prop, nullptr, "error");
1718 RNA_def_property_ui_text(prop, "Average Error", "Average error of re-projection");
1719
1720 /* grease pencil */
1721 prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
1722 RNA_def_property_pointer_sdna(prop, nullptr, "gpd");
1723 RNA_def_property_struct_type(prop, "GreasePencil");
1725 prop, nullptr, nullptr, nullptr, "rna_GPencil_datablocks_annotations_poll");
1727 RNA_def_property_ui_text(prop, "Grease Pencil", "Grease Pencil data for this track");
1729
1730 /* weight */
1731 prop = RNA_def_property(srna, "weight", PROP_FLOAT, PROP_FACTOR);
1732 RNA_def_property_float_sdna(prop, nullptr, "weight");
1733 RNA_def_property_range(prop, 0.0f, 1.0f);
1734 RNA_def_property_ui_text(prop, "Weight", "Influence of this track on a final solution");
1735
1736 /* weight_stab */
1737 prop = RNA_def_property(srna, "weight_stab", PROP_FLOAT, PROP_FACTOR);
1738 RNA_def_property_float_sdna(prop, nullptr, "weight_stab");
1739 RNA_def_property_range(prop, 0.0f, 1.0f);
1740 RNA_def_property_ui_text(prop, "Stab Weight", "Influence of this track on 2D stabilization");
1741
1742 /* offset */
1743 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_TRANSLATION);
1744 RNA_def_property_array(prop, 2);
1746 RNA_def_property_float_sdna(prop, nullptr, "offset");
1747 RNA_def_property_ui_text(prop, "Offset", "Offset of track from the parenting point");
1749}
1750
1752{
1753 StructRNA *srna;
1754 PropertyRNA *prop;
1755
1756 srna = RNA_def_struct(brna, "MovieTrackingPlaneMarker", nullptr);
1758 srna, "Movie Tracking Plane Marker Data", "Match-moving plane marker data for tracking");
1759
1760 /* frame */
1761 prop = RNA_def_property(srna, "frame", PROP_INT, PROP_NONE);
1762 RNA_def_property_int_sdna(prop, nullptr, "framenr");
1763 RNA_def_property_ui_text(prop, "Frame", "Frame number marker is keyframed on");
1764 RNA_def_property_int_funcs(prop, nullptr, "rna_trackingPlaneMarker_frame_set", nullptr);
1766
1767 /* Corners */
1768 prop = RNA_def_property(srna, "corners", PROP_FLOAT, PROP_MATRIX);
1769 RNA_def_property_float_sdna(prop, nullptr, "corners");
1774 "Corners",
1775 "Array of coordinates which represents UI rectangle corners in "
1776 "frame normalized coordinates");
1778
1779 /* enable */
1780 prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
1782 RNA_def_property_ui_text(prop, "Mode", "Is marker muted for current frame");
1784}
1785
1787{
1788 StructRNA *srna;
1789 FunctionRNA *func;
1790 PropertyRNA *parm;
1791
1792 RNA_def_property_srna(cprop, "MovieTrackingPlaneMarkers");
1793 srna = RNA_def_struct(brna, "MovieTrackingPlaneMarkers", nullptr);
1794 RNA_def_struct_sdna(srna, "MovieTrackingPlaneTrack");
1796 "Movie Tracking Plane Markers",
1797 "Collection of markers for movie tracking plane track");
1798
1799 func = RNA_def_function(srna, "find_frame", "rna_trackingPlaneMarkers_find_frame");
1800 RNA_def_function_ui_description(func, "Get plane marker for specified frame");
1801 parm = RNA_def_int(func,
1802 "frame",
1803 1,
1804 MINFRAME,
1805 MAXFRAME,
1806 "Frame",
1807 "Frame number to find marker for",
1808 MINFRAME,
1809 MAXFRAME);
1811 RNA_def_boolean(func,
1812 "exact",
1813 true,
1814 "Exact",
1815 "Get plane marker at exact frame number rather than get estimated marker");
1816 parm = RNA_def_pointer(
1817 func, "plane_marker", "MovieTrackingPlaneMarker", "", "Plane marker for specified frame");
1818 RNA_def_function_return(func, parm);
1819
1820 func = RNA_def_function(srna, "insert_frame", "rna_trackingPlaneMarkers_insert_frame");
1821 RNA_def_function_ui_description(func, "Insert a new plane marker at the specified frame");
1822 parm = RNA_def_int(func,
1823 "frame",
1824 1,
1825 MINFRAME,
1826 MAXFRAME,
1827 "Frame",
1828 "Frame number to insert marker to",
1829 MINFRAME,
1830 MAXFRAME);
1832 parm = RNA_def_pointer(
1833 func, "plane_marker", "MovieTrackingPlaneMarker", "", "Newly created plane marker");
1834 RNA_def_function_return(func, parm);
1835
1836 func = RNA_def_function(srna, "delete_frame", "rna_trackingPlaneMarkers_delete_frame");
1837 RNA_def_function_ui_description(func, "Delete plane marker at specified frame");
1838 parm = RNA_def_int(func,
1839 "frame",
1840 1,
1841 MINFRAME,
1842 MAXFRAME,
1843 "Frame",
1844 "Frame number to delete plane marker from",
1845 MINFRAME,
1846 MAXFRAME);
1848}
1849
1851{
1852 StructRNA *srna;
1853 PropertyRNA *prop;
1854
1856
1857 srna = RNA_def_struct(brna, "MovieTrackingPlaneTrack", nullptr);
1858 RNA_def_struct_path_func(srna, "rna_trackingPlaneTrack_path");
1860 srna, "Movie tracking plane track data", "Match-moving plane track data for tracking");
1861 RNA_def_struct_ui_icon(srna, ICON_ANIM_DATA);
1862
1863 /* name */
1864 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1865 RNA_def_property_ui_text(prop, "Name", "Unique name of track");
1866 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_trackingPlaneTrack_name_set");
1869 RNA_def_struct_name_property(srna, prop);
1870
1871 /* markers */
1872 prop = RNA_def_property(srna, "markers", PROP_COLLECTION, PROP_NONE);
1873 RNA_def_property_struct_type(prop, "MovieTrackingPlaneMarker");
1874 RNA_def_property_collection_sdna(prop, nullptr, "markers", "markersnr");
1875 RNA_def_property_ui_text(prop, "Markers", "Collection of markers in track");
1876 rna_def_trackingPlaneMarkers(brna, prop);
1877
1878 /* select */
1879 prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
1880 RNA_def_property_boolean_sdna(prop, nullptr, "flag", SELECT);
1881 RNA_def_property_ui_text(prop, "Select", "Plane track is selected");
1883
1884 /* auto keyframing */
1885 prop = RNA_def_property(srna, "use_auto_keying", PROP_BOOLEAN, PROP_NONE);
1886 RNA_def_property_boolean_sdna(prop, nullptr, "flag", PLANE_TRACK_AUTOKEY);
1889 prop, "Auto Keyframe", "Automatic keyframe insertion when moving plane corners");
1890 RNA_def_property_ui_icon(prop, ICON_REC, 0);
1891
1892 /* image */
1893 prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
1894 RNA_def_property_struct_type(prop, "Image");
1897 prop, "Image", "Image displayed in the track during editing in clip editor");
1899
1900 /* image opacity */
1901 prop = RNA_def_property(srna, "image_opacity", PROP_FLOAT, PROP_FACTOR);
1903 RNA_def_property_range(prop, 0.0, 1.0);
1904 RNA_def_property_ui_text(prop, "Image Opacity", "Opacity of the image");
1906}
1907
1909{
1910 StructRNA *srna;
1911 PropertyRNA *prop;
1912
1913 static const EnumPropertyItem filter_items[] = {
1915 "NEAREST",
1916 0,
1917 "Nearest",
1918 "No interpolation, use nearest neighbor pixel"},
1920 "BILINEAR",
1921 0,
1922 "Bilinear",
1923 "Simple interpolation between adjacent pixels"},
1924 {TRACKING_FILTER_BICUBIC, "BICUBIC", 0, "Bicubic", "High quality pixel interpolation"},
1925 {0, nullptr, 0, nullptr, nullptr},
1926 };
1927
1928 srna = RNA_def_struct(brna, "MovieTrackingStabilization", nullptr);
1929 RNA_def_struct_path_func(srna, "rna_trackingStabilization_path");
1931 srna, "Movie tracking stabilization data", "2D stabilization based on tracking markers");
1932
1933 /* 2d stabilization */
1934 prop = RNA_def_property(srna, "use_2d_stabilization", PROP_BOOLEAN, PROP_NONE);
1937 RNA_def_property_ui_text(prop, "Use 2D Stabilization", "Use 2D stabilization for footage");
1938 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1939
1940 /* use_stabilize_rotation */
1941 prop = RNA_def_property(srna, "use_stabilize_rotation", PROP_BOOLEAN, PROP_NONE);
1945 prop, "Stabilize Rotation", "Stabilize detected rotation around center of frame");
1946 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1947
1948 /* use_stabilize_scale */
1949 prop = RNA_def_property(srna, "use_stabilize_scale", PROP_BOOLEAN, PROP_NONE);
1953 prop, "Stabilize Scale", "Compensate any scale changes relative to center of rotation");
1954 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1955
1956 /* tracks */
1957 prop = RNA_def_property(srna, "tracks", PROP_COLLECTION, PROP_NONE);
1959 "rna_tracking_stabTracks_begin",
1960 "rna_iterator_listbase_next",
1961 "rna_iterator_listbase_end",
1962 "rna_iterator_listbase_get",
1963 nullptr,
1964 nullptr,
1965 nullptr,
1966 nullptr);
1967 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
1969 prop, "Translation Tracks", "Collection of tracks used for 2D stabilization (translation)");
1970 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1971
1972 /* active track index */
1973 prop = RNA_def_property(srna, "active_track_index", PROP_INT, PROP_NONE);
1974 RNA_def_property_int_sdna(prop, nullptr, "act_track");
1977 "rna_tracking_stabTracks_active_index_get",
1978 "rna_tracking_stabTracks_active_index_set",
1979 "rna_tracking_stabTracks_active_index_range");
1981 "Active Track Index",
1982 "Index of active track in translation stabilization tracks list");
1983
1984 /* tracks used for rotation stabilization */
1985 prop = RNA_def_property(srna, "rotation_tracks", PROP_COLLECTION, PROP_NONE);
1987 "rna_tracking_stabRotTracks_begin",
1988 "rna_iterator_listbase_next",
1989 "rna_iterator_listbase_end",
1990 "rna_iterator_listbase_get",
1991 nullptr,
1992 nullptr,
1993 nullptr,
1994 nullptr);
1995 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
1997 prop, "Rotation Tracks", "Collection of tracks used for 2D stabilization (translation)");
1998 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1999
2000 /* active rotation track index */
2001 prop = RNA_def_property(srna, "active_rotation_track_index", PROP_INT, PROP_NONE);
2002 RNA_def_property_int_sdna(prop, nullptr, "act_rot_track");
2005 "rna_tracking_stabRotTracks_active_index_get",
2006 "rna_tracking_stabRotTracks_active_index_set",
2007 "rna_tracking_stabRotTracks_active_index_range");
2009 "Active Rotation Track Index",
2010 "Index of active track in rotation stabilization tracks list");
2011
2012 /* anchor frame */
2013 prop = RNA_def_property(srna, "anchor_frame", PROP_INT, PROP_NONE);
2014 RNA_def_property_int_sdna(prop, nullptr, "anchor_frame");
2018 "Anchor Frame",
2019 "Reference point to anchor stabilization "
2020 "(other frames will be adjusted relative to this frame's position)");
2021 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2022
2023 /* target position */
2024 prop = RNA_def_property(srna, "target_position", PROP_FLOAT, PROP_TRANSLATION);
2025 RNA_def_property_array(prop, 2);
2027 prop, -FLT_MAX, FLT_MAX, 1, 3); /* increment in steps of 0.01 and show 3 digit after point */
2028 RNA_def_property_float_sdna(prop, nullptr, "target_pos");
2030 "Expected Position",
2031 "Known relative offset of original shot, will be subtracted "
2032 "(e.g. for panning shot, can be animated)");
2034
2035 /* target rotation */
2036 prop = RNA_def_property(srna, "target_rotation", PROP_FLOAT, PROP_ANGLE);
2037 RNA_def_property_float_sdna(prop, nullptr, "target_rot");
2039 RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 10.0f, 3);
2041 prop,
2042 "Expected Rotation",
2043 "Rotation present on original shot, will be compensated (e.g. for deliberate tilting)");
2045
2046 /* target scale */
2047 prop = RNA_def_property(srna, "target_scale", PROP_FLOAT, PROP_FACTOR);
2048 RNA_def_property_float_sdna(prop, nullptr, "scale");
2049 RNA_def_property_range(prop, FLT_EPSILON, FLT_MAX);
2051 prop, 0.01f, 10.0f, 0.001f, 3); /* increment in steps of 0.001. Show 3 digit after point */
2053 "Expected Scale",
2054 "Explicitly scale resulting frame to compensate zoom of original shot");
2055 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2056
2057 /* Auto-scale. */
2058 prop = RNA_def_property(srna, "use_autoscale", PROP_BOOLEAN, PROP_NONE);
2059 RNA_def_property_boolean_sdna(prop, nullptr, "flag", TRACKING_AUTOSCALE);
2062 prop, "Autoscale", "Automatically scale footage to cover unfilled areas when stabilizing");
2063 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2064
2065 /* max scale */
2066 prop = RNA_def_property(srna, "scale_max", PROP_FLOAT, PROP_FACTOR);
2067 RNA_def_property_float_sdna(prop, nullptr, "maxscale");
2068 RNA_def_property_range(prop, 0.0f, 10.0f);
2069 RNA_def_property_ui_text(prop, "Maximal Scale", "Limit the amount of automatic scaling");
2070 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2071
2072 /* influence_location */
2073 prop = RNA_def_property(srna, "influence_location", PROP_FLOAT, PROP_FACTOR);
2074 RNA_def_property_float_sdna(prop, nullptr, "locinf");
2075 RNA_def_property_range(prop, 0.0f, 1.0f);
2077 prop, "Location Influence", "Influence of stabilization algorithm on footage location");
2078 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2079
2080 /* influence_scale */
2081 prop = RNA_def_property(srna, "influence_scale", PROP_FLOAT, PROP_FACTOR);
2082 RNA_def_property_float_sdna(prop, nullptr, "scaleinf");
2083 RNA_def_property_range(prop, 0.0f, 1.0f);
2085 prop, "Scale Influence", "Influence of stabilization algorithm on footage scale");
2086 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2087
2088 /* influence_rotation */
2089 prop = RNA_def_property(srna, "influence_rotation", PROP_FLOAT, PROP_FACTOR);
2090 RNA_def_property_float_sdna(prop, nullptr, "rotinf");
2091 RNA_def_property_range(prop, 0.0f, 1.0f);
2093 prop, "Rotation Influence", "Influence of stabilization algorithm on footage rotation");
2094 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2095
2096 /* filter */
2097 prop = RNA_def_property(srna, "filter_type", PROP_ENUM, PROP_NONE);
2098 RNA_def_property_enum_sdna(prop, nullptr, "filter");
2099 RNA_def_property_enum_items(prop, filter_items);
2101 prop,
2102 "Interpolate",
2103 "Interpolation to use for sub-pixel shifts and rotations due to stabilization");
2104 RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2105
2106 /* UI display : show participating tracks */
2107 prop = RNA_def_property(srna, "show_tracks_expanded", PROP_BOOLEAN, PROP_NONE);
2111 prop, "Show Tracks", "Show UI list of tracks participating in stabilization");
2112 RNA_def_property_ui_icon(prop, ICON_RIGHTARROW, 1);
2113}
2114
2116{
2117 StructRNA *srna;
2118 PropertyRNA *prop;
2119
2120 srna = RNA_def_struct(brna, "MovieReconstructedCamera", nullptr);
2122 "Movie tracking reconstructed camera data",
2123 "Match-moving reconstructed camera data from tracker");
2124
2125 /* frame */
2126 prop = RNA_def_property(srna, "frame", PROP_INT, PROP_NONE);
2128 RNA_def_property_int_sdna(prop, nullptr, "framenr");
2129 RNA_def_property_ui_text(prop, "Frame", "Frame number marker is keyframed on");
2130
2131 /* matrix */
2132 prop = RNA_def_property(srna, "matrix", PROP_FLOAT, PROP_MATRIX);
2133 RNA_def_property_float_sdna(prop, nullptr, "mat");
2136 RNA_def_property_ui_text(prop, "Matrix", "Worldspace transformation matrix");
2137
2138 /* average_error */
2139 prop = RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE);
2140 RNA_def_property_float_sdna(prop, nullptr, "error");
2142 RNA_def_property_ui_text(prop, "Average Error", "Average error of reconstruction");
2143}
2144
2146{
2147 StructRNA *srna;
2148 FunctionRNA *func;
2149 PropertyRNA *parm;
2150
2151 srna = RNA_def_struct(brna, "MovieTrackingReconstructedCameras", nullptr);
2152 RNA_def_struct_sdna(srna, "MovieTrackingReconstruction");
2153 RNA_def_struct_ui_text(srna, "Reconstructed Cameras", "Collection of solved cameras");
2154
2155 func = RNA_def_function(srna, "find_frame", "rna_trackingCameras_find_frame");
2157 RNA_def_function_ui_description(func, "Find a reconstructed camera for a give frame number");
2158 RNA_def_int(func,
2159 "frame",
2160 1,
2161 MINFRAME,
2162 MAXFRAME,
2163 "Frame",
2164 "Frame number to find camera for",
2165 MINFRAME,
2166 MAXFRAME);
2167 parm = RNA_def_pointer(
2168 func, "camera", "MovieReconstructedCamera", "", "Camera for a given frame");
2169 RNA_def_function_return(func, parm);
2170
2171 func = RNA_def_function(srna, "matrix_from_frame", "rna_trackingCameras_matrix_from_frame");
2173 RNA_def_function_ui_description(func, "Return interpolated camera matrix for a given frame");
2174 RNA_def_int(func,
2175 "frame",
2176 1,
2177 MINFRAME,
2178 MAXFRAME,
2179 "Frame",
2180 "Frame number to find camera for",
2181 MINFRAME,
2182 MAXFRAME);
2183 parm = RNA_def_float_matrix(func,
2184 "matrix",
2185 4,
2186 4,
2187 nullptr,
2188 -FLT_MAX,
2189 FLT_MAX,
2190 "Matrix",
2191 "Interpolated camera matrix for a given frame",
2192 -FLT_MAX,
2193 FLT_MAX);
2195 parm, PROP_THICK_WRAP, ParameterFlag(0)); /* needed for string return value */
2196 RNA_def_function_output(func, parm);
2197}
2198
2200{
2201 StructRNA *srna;
2202 PropertyRNA *prop;
2203
2205
2206 srna = RNA_def_struct(brna, "MovieTrackingReconstruction", nullptr);
2208 srna, "Movie tracking reconstruction data", "Match-moving reconstruction data from tracker");
2209
2210 /* is_valid */
2211 prop = RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
2215 "Reconstructed",
2216 "Whether the tracking data contains valid reconstruction information");
2217
2218 /* average_error */
2219 prop = RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE);
2220 RNA_def_property_float_sdna(prop, nullptr, "error");
2222 RNA_def_property_ui_text(prop, "Average Error", "Average error of reconstruction");
2223
2224 /* cameras */
2225 prop = RNA_def_property(srna, "cameras", PROP_COLLECTION, PROP_NONE);
2226 RNA_def_property_struct_type(prop, "MovieReconstructedCamera");
2227 RNA_def_property_collection_sdna(prop, nullptr, "cameras", "camnr");
2228 RNA_def_property_ui_text(prop, "Cameras", "Collection of solved cameras");
2229 RNA_def_property_srna(prop, "MovieTrackingReconstructedCameras");
2230}
2231
2233{
2234 StructRNA *srna;
2235 FunctionRNA *func;
2236 PropertyRNA *prop;
2237 PropertyRNA *parm;
2238
2239 srna = RNA_def_struct(brna, "MovieTrackingTracks", nullptr);
2240 RNA_def_struct_sdna(srna, "MovieTracking");
2241 RNA_def_struct_ui_text(srna, "Movie Tracks", "Collection of movie tracking tracks");
2242
2243 func = RNA_def_function(srna, "new", "rna_trackingTracks_new");
2245 RNA_def_function_ui_description(func, "Create new motion track in this movie clip");
2246 RNA_def_string(func, "name", nullptr, 0, "", "Name of new track");
2247 RNA_def_int(func,
2248 "frame",
2249 1,
2250 MINFRAME,
2251 MAXFRAME,
2252 "Frame",
2253 "Frame number to add track on",
2254 MINFRAME,
2255 MAXFRAME);
2256 parm = RNA_def_pointer(func, "track", "MovieTrackingTrack", "", "Newly created track");
2257 RNA_def_function_return(func, parm);
2258
2259 /* active track */
2260 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2261 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2263 prop, "rna_tracking_active_track_get", "rna_tracking_active_track_set", nullptr, nullptr);
2266 "Active Track",
2267 "Active track in this tracking data object. "
2268 "Deprecated, use objects[name].tracks.active");
2271}
2272
2274{
2275 StructRNA *srna;
2276 PropertyRNA *prop;
2277
2278 srna = RNA_def_struct(brna, "MovieTrackingPlaneTracks", nullptr);
2279 RNA_def_struct_sdna(srna, "MovieTracking");
2280 RNA_def_struct_ui_text(srna, "Movie Plane Tracks", "Collection of movie tracking plane tracks");
2281
2282 /* TODO(sergey): Add API to create new plane tracks */
2283
2284 /* active plane track */
2285 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2286 RNA_def_property_struct_type(prop, "MovieTrackingPlaneTrack");
2288 "rna_tracking_active_plane_track_get",
2289 "rna_tracking_active_plane_track_set",
2290 nullptr,
2291 nullptr);
2294 "Active Plane Track",
2295 "Active plane track in this tracking data object. "
2296 "Deprecated, use objects[name].plane_tracks.active");
2298}
2299
2301{
2302 StructRNA *srna;
2303 FunctionRNA *func;
2304 PropertyRNA *prop;
2305 PropertyRNA *parm;
2306
2307 srna = RNA_def_struct(brna, "MovieTrackingObjectTracks", nullptr);
2308 RNA_def_struct_sdna(srna, "MovieTrackingObject");
2309 RNA_def_struct_ui_text(srna, "Movie Tracks", "Collection of movie tracking tracks");
2310
2311 func = RNA_def_function(srna, "new", "rna_trackingObject_tracks_new");
2313 RNA_def_function_ui_description(func, "create new motion track in this movie clip");
2314 RNA_def_string(func, "name", nullptr, 0, "", "Name of new track");
2315 RNA_def_int(func,
2316 "frame",
2317 1,
2318 MINFRAME,
2319 MAXFRAME,
2320 "Frame",
2321 "Frame number to add tracks on",
2322 MINFRAME,
2323 MAXFRAME);
2324 parm = RNA_def_pointer(func, "track", "MovieTrackingTrack", "", "Newly created track");
2325 RNA_def_function_return(func, parm);
2326
2327 /* active track */
2328 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2329 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2331 "rna_tracking_object_active_track_get",
2332 "rna_tracking_object_active_track_set",
2333 nullptr,
2334 nullptr);
2336 RNA_def_property_ui_text(prop, "Active Track", "Active track in this tracking data object");
2339}
2340
2342{
2343 StructRNA *srna;
2344 PropertyRNA *prop;
2345
2346 srna = RNA_def_struct(brna, "MovieTrackingObjectPlaneTracks", nullptr);
2347 RNA_def_struct_sdna(srna, "MovieTrackingObject");
2348 RNA_def_struct_ui_text(srna, "Plane Tracks", "Collection of tracking plane tracks");
2349
2350 /* active track */
2351 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2352 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2354 "rna_tracking_object_active_plane_track_get",
2355 "rna_tracking_object_active_plane_track_set",
2356 nullptr,
2357 nullptr);
2359 RNA_def_property_ui_text(prop, "Active Track", "Active track in this tracking data object");
2362}
2363
2365{
2366 StructRNA *srna;
2367 PropertyRNA *prop;
2368
2369 srna = RNA_def_struct(brna, "MovieTrackingObject", nullptr);
2371 srna, "Movie tracking object data", "Match-moving object tracking and reconstruction data");
2372
2373 /* name */
2374 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
2375 RNA_def_property_ui_text(prop, "Name", "Unique name of object");
2376 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_trackingObject_name_set");
2379 RNA_def_struct_name_property(srna, prop);
2380
2381 /* is_camera */
2382 prop = RNA_def_property(srna, "is_camera", PROP_BOOLEAN, PROP_NONE);
2385 RNA_def_property_ui_text(prop, "Camera", "Object is used for camera tracking");
2387
2388 /* tracks */
2389 prop = RNA_def_property(srna, "tracks", PROP_COLLECTION, PROP_NONE);
2391 "rna_trackingObject_tracks_begin",
2392 "rna_iterator_listbase_next",
2393 "rna_iterator_listbase_end",
2394 "rna_iterator_listbase_get",
2395 nullptr,
2396 nullptr,
2397 nullptr,
2398 nullptr);
2399 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2400 RNA_def_property_ui_text(prop, "Tracks", "Collection of tracks in this tracking data object");
2401 RNA_def_property_srna(prop, "MovieTrackingObjectTracks");
2402
2403 /* plane tracks */
2404 prop = RNA_def_property(srna, "plane_tracks", PROP_COLLECTION, PROP_NONE);
2406 "rna_trackingObject_plane_tracks_begin",
2407 "rna_iterator_listbase_next",
2408 "rna_iterator_listbase_end",
2409 "rna_iterator_listbase_get",
2410 nullptr,
2411 nullptr,
2412 nullptr,
2413 nullptr);
2414 RNA_def_property_struct_type(prop, "MovieTrackingPlaneTrack");
2416 prop, "Plane Tracks", "Collection of plane tracks in this tracking data object");
2417 RNA_def_property_srna(prop, "MovieTrackingObjectPlaneTracks");
2418
2419 /* reconstruction */
2420 prop = RNA_def_property(srna, "reconstruction", PROP_POINTER, PROP_NONE);
2421 RNA_def_property_struct_type(prop, "MovieTrackingReconstruction");
2423 prop, "rna_trackingObject_reconstruction_get", nullptr, nullptr, nullptr);
2424
2425 /* scale */
2426 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
2428 RNA_def_property_float_sdna(prop, nullptr, "scale");
2429 RNA_def_property_range(prop, 0.0001f, 10000.0f);
2430 RNA_def_property_ui_range(prop, 0.0001f, 10000.0, 1, 4);
2432 RNA_def_property_ui_text(prop, "Scale", "Scale of object solution in camera space");
2433 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingObject_flushUpdate");
2434
2435 /* keyframe_a */
2436 prop = RNA_def_property(srna, "keyframe_a", PROP_INT, PROP_NONE);
2438 RNA_def_property_int_sdna(prop, nullptr, "keyframe1");
2440 prop, "Keyframe A", "First keyframe used for reconstruction initialization");
2442
2443 /* keyframe_b */
2444 prop = RNA_def_property(srna, "keyframe_b", PROP_INT, PROP_NONE);
2446 RNA_def_property_int_sdna(prop, nullptr, "keyframe2");
2448 prop, "Keyframe B", "Second keyframe used for reconstruction initialization");
2450}
2451
2453{
2454 StructRNA *srna;
2455 PropertyRNA *prop;
2456
2457 FunctionRNA *func;
2458 PropertyRNA *parm;
2459
2460 RNA_def_property_srna(cprop, "MovieTrackingObjects");
2461 srna = RNA_def_struct(brna, "MovieTrackingObjects", nullptr);
2462 RNA_def_struct_sdna(srna, "MovieTracking");
2463 RNA_def_struct_ui_text(srna, "Movie Objects", "Collection of movie tracking objects");
2464
2465 func = RNA_def_function(srna, "new", "rna_trackingObject_new");
2466 RNA_def_function_ui_description(func, "Add tracking object to this movie clip");
2467 parm = RNA_def_string(func, "name", nullptr, 0, "", "Name of new object");
2469 parm = RNA_def_pointer(func, "object", "MovieTrackingObject", "", "New motion tracking object");
2470 RNA_def_function_return(func, parm);
2471
2472 func = RNA_def_function(srna, "remove", "rna_trackingObject_remove");
2474 RNA_def_function_ui_description(func, "Remove tracking object from this movie clip");
2475 parm = RNA_def_pointer(
2476 func, "object", "MovieTrackingObject", "", "Motion tracking object to be removed");
2479
2480 /* active object */
2481 prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2482 RNA_def_property_struct_type(prop, "MovieTrackingObject");
2484 prop, "rna_tracking_active_object_get", "rna_tracking_active_object_set", nullptr, nullptr);
2486 RNA_def_property_ui_text(prop, "Active Object", "Active object in this tracking data object");
2487}
2488
2490{
2491 StructRNA *srna;
2492 PropertyRNA *prop;
2493
2494 static const EnumPropertyItem sort_items[] = {
2495 {TRACKING_DOPE_SORT_NAME, "NAME", 0, "Name", "Sort channels by their names"},
2497 "LONGEST",
2498 0,
2499 "Longest",
2500 "Sort channels by longest tracked segment"},
2502 "TOTAL",
2503 0,
2504 "Total",
2505 "Sort channels by overall amount of tracked segments"},
2507 "AVERAGE_ERROR",
2508 0,
2509 "Average Error",
2510 "Sort channels by average reprojection error of tracks after solve"},
2511 {TRACKING_DOPE_SORT_START, "START", 0, "Start Frame", "Sort channels by first frame number"},
2512 {TRACKING_DOPE_SORT_END, "END", 0, "End Frame", "Sort channels by last frame number"},
2513 {0, nullptr, 0, nullptr, nullptr},
2514 };
2515
2516 srna = RNA_def_struct(brna, "MovieTrackingDopesheet", nullptr);
2517 RNA_def_struct_path_func(srna, "rna_trackingDopesheet_path");
2518 RNA_def_struct_ui_text(srna, "Movie Tracking Dopesheet", "Match-moving dopesheet data");
2519
2520 /* dopesheet sort */
2521 prop = RNA_def_property(srna, "sort_method", PROP_ENUM, PROP_NONE);
2522 RNA_def_property_enum_sdna(prop, nullptr, "sort_method");
2523 RNA_def_property_enum_items(prop, sort_items);
2525 prop, "Dopesheet Sort Field", "Method to be used to sort channels in dopesheet view");
2526 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2527
2528 /* invert_dopesheet_sort */
2529 prop = RNA_def_property(srna, "use_invert_sort", PROP_BOOLEAN, PROP_NONE);
2532 prop, "Invert Dopesheet Sort", "Invert sort order of dopesheet channels");
2533 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2534
2535 /* show_only_selected */
2536 prop = RNA_def_property(srna, "show_only_selected", PROP_BOOLEAN, PROP_NONE);
2539 prop, "Only Show Selected", "Only include channels relating to selected objects and data");
2540 RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, 0);
2541 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2542
2543 /* show_hidden */
2544 prop = RNA_def_property(srna, "show_hidden", PROP_BOOLEAN, PROP_NONE);
2547 prop, "Display Hidden", "Include channels from objects/bone that are not visible");
2548 RNA_def_property_ui_icon(prop, ICON_GHOST_ENABLED, 0);
2549 RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2550}
2551
2553{
2554 StructRNA *srna;
2555 PropertyRNA *prop;
2556
2570
2571 srna = RNA_def_struct(brna, "MovieTracking", nullptr);
2572 RNA_def_struct_path_func(srna, "rna_tracking_path");
2573 RNA_def_struct_ui_text(srna, "Movie tracking data", "Match-moving data for tracking");
2574
2575 /* settings */
2576 prop = RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
2577 RNA_def_property_struct_type(prop, "MovieTrackingSettings");
2578
2579 /* camera properties */
2580 prop = RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
2581 RNA_def_property_struct_type(prop, "MovieTrackingCamera");
2582
2583 /* tracks */
2584 prop = RNA_def_property(srna, "tracks", PROP_COLLECTION, PROP_NONE);
2586 "rna_trackingTracks_begin",
2587 "rna_iterator_listbase_next",
2588 "rna_iterator_listbase_end",
2589 "rna_iterator_listbase_get",
2590 nullptr,
2591 nullptr,
2592 nullptr,
2593 nullptr);
2594 RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2596 "Tracks",
2597 "Collection of tracks in this tracking data object. "
2598 "Deprecated, use objects[name].tracks");
2599 RNA_def_property_srna(prop, "MovieTrackingTracks");
2600
2601 /* tracks */
2602 prop = RNA_def_property(srna, "plane_tracks", PROP_COLLECTION, PROP_NONE);
2604 "rna_trackingPlaneTracks_begin",
2605 "rna_iterator_listbase_next",
2606 "rna_iterator_listbase_end",
2607 "rna_iterator_listbase_get",
2608 nullptr,
2609 nullptr,
2610 nullptr,
2611 nullptr);
2612 RNA_def_property_struct_type(prop, "MovieTrackingPlaneTrack");
2614 "Plane Tracks",
2615 "Collection of plane tracks in this tracking data object. "
2616 "Deprecated, use objects[name].plane_tracks");
2617 RNA_def_property_srna(prop, "MovieTrackingPlaneTracks");
2618
2619 /* stabilization */
2620 prop = RNA_def_property(srna, "stabilization", PROP_POINTER, PROP_NONE);
2621 RNA_def_property_struct_type(prop, "MovieTrackingStabilization");
2622
2623 /* reconstruction */
2624 prop = RNA_def_property(srna, "reconstruction", PROP_POINTER, PROP_NONE);
2625 RNA_def_property_pointer_sdna(prop, nullptr, "reconstruction_legacy");
2627 prop, "rna_trackingReconstruction_get", nullptr, nullptr, nullptr);
2628 RNA_def_property_struct_type(prop, "MovieTrackingReconstruction");
2629
2630 /* objects */
2631 prop = RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE);
2633 "rna_trackingObjects_begin",
2634 "rna_iterator_listbase_next",
2635 "rna_iterator_listbase_end",
2636 "rna_iterator_listbase_get",
2637 nullptr,
2638 nullptr,
2639 nullptr,
2640 nullptr);
2641 RNA_def_property_struct_type(prop, "MovieTrackingObject");
2642 RNA_def_property_ui_text(prop, "Objects", "Collection of objects in this tracking data object");
2643 rna_def_trackingObjects(brna, prop);
2644
2645 /* active object index */
2646 prop = RNA_def_property(srna, "active_object_index", PROP_INT, PROP_NONE);
2647 RNA_def_property_int_sdna(prop, nullptr, "objectnr");
2650 "rna_tracking_active_object_index_get",
2651 "rna_tracking_active_object_index_set",
2652 "rna_tracking_active_object_index_range");
2653 RNA_def_property_ui_text(prop, "Active Object Index", "Index of active object");
2655
2656 /* dopesheet */
2657 prop = RNA_def_property(srna, "dopesheet", PROP_POINTER, PROP_NONE);
2658 RNA_def_property_struct_type(prop, "MovieTrackingDopesheet");
2659}
2660
2662{
2663 rna_def_tracking(brna);
2664}
2665
2666#endif
AnimData * BKE_animdata_from_id(const ID *id)
Definition anim_data.cc:82
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
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:1718
void BKE_tracking_plane_marker_delete(struct MovieTrackingPlaneTrack *plane_track, int framenr)
Definition tracking.cc:1759
struct MovieTrackingPlaneMarker * BKE_tracking_plane_marker_get_exact(struct MovieTrackingPlaneTrack *plane_track, int framenr)
Definition tracking.cc:1836
void BKE_tracking_camera_principal_point_pixel_set(struct MovieClip *clip, const float principal_point_pixel[2])
Definition tracking.cc:2184
#define TRACK_SELECTED(track)
void BKE_tracking_plane_track_unique_name(struct ListBase *plane_tracks_base, struct MovieTrackingPlaneTrack *plane_track)
Definition tracking.cc:1613
void BKE_tracking_track_unique_name(struct ListBase *tracksbase, struct MovieTrackingTrack *track)
Definition tracking.cc:585
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:1357
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:1925
void BKE_tracking_dopesheet_tag_update(struct MovieTracking *tracking)
Definition tracking.cc:3438
struct MovieTrackingMarker * BKE_tracking_marker_get_exact(struct MovieTrackingTrack *track, int framenr)
Definition tracking.cc:1390
struct MovieTrackingTrack * BKE_tracking_track_add(struct MovieTracking *tracking, struct ListBase *tracksbase, float x, float y, int framenr, int width, int height)
Definition tracking.cc:525
struct MovieTrackingObject * BKE_tracking_find_object_for_plane_track(const struct MovieTracking *tracking, const struct MovieTrackingPlaneTrack *plane_track)
void BKE_tracking_camera_principal_point_pixel_get(struct MovieClip *clip, float r_principal_point_pixel[2])
Definition tracking.cc:2171
struct MovieTrackingObject * BKE_tracking_object_add(struct MovieTracking *tracking, const char *name)
Definition tracking.cc:1896
void BKE_tracking_object_unique_name(struct MovieTracking *tracking, struct MovieTrackingObject *tracking_object)
Definition tracking.cc:1955
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:2407
void BKE_tracking_marker_clamp_search_size(struct MovieTrackingMarker *marker)
Definition tracking.cc:1326
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:1790
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:1234
struct MovieReconstructedCamera * BKE_tracking_camera_get_reconstructed(struct MovieTracking *tracking, struct MovieTrackingObject *tracking_object, int framenr)
Definition tracking.cc:2132
void BKE_tracking_marker_delete(struct MovieTrackingTrack *track, int framenr)
Definition tracking.cc:1280
void BKE_tracking_camera_get_reconstructed_interpolate(struct MovieTracking *tracking, struct MovieTrackingObject *tracking_object, float framenr, float mat[4][4])
Definition tracking.cc:2145
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:688
#define BLT_I18NCONTEXT_ID_MOVIECLIP
void DEG_id_tag_update(ID *id, unsigned int flags)
#define DNA_struct_default_get(struct_name)
Object is a sort of wrapper for general info.
#define MINFRAME
#define MAXFRAME
@ 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_MOTION_TRIPOD
@ TRACKING_FILTER_BICUBIC
@ TRACKING_FILTER_NEAREST
@ TRACKING_FILTER_BILINEAR
@ TRACKING_RECONSTRUCTED
@ 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
@ MARKER_TRACKED
@ MARKER_DISABLED
@ TRACKING_DISTORTION_MODEL_DIVISION
@ TRACKING_DISTORTION_MODEL_POLYNOMIAL
@ TRACKING_DISTORTION_MODEL_NUKE
@ TRACKING_DISTORTION_MODEL_BROWN
@ PLANE_MARKER_DISABLED
@ TRACK_ALGORITHM_FLAG_USE_NORMALIZATION
@ TRACK_ALGORITHM_FLAG_USE_BRUTE
@ TRACK_ALGORITHM_FLAG_USE_MASK
@ TRACKING_CLEAN_DELETE_SEGMENT
@ TRACKING_CLEAN_SELECT
@ TRACKING_CLEAN_DELETE_TRACK
@ TRACKING_SPEED_DOUBLE
@ TRACKING_SPEED_HALF
@ TRACKING_SPEED_QUARTER
@ TRACKING_SPEED_REALTIME
@ TRACKING_USE_KEYFRAME_SELECTION
@ TRACKING_AUTOSCALE
@ TRACKING_SHOW_STAB_TRACKS
@ TRACKING_STABILIZE_SCALE
@ TRACKING_STABILIZE_ROTATION
@ TRACKING_2D_STABILIZATION
@ TRACKING_OBJECT_CAMERA
@ 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
@ CAMERA_UNITS_MM
@ CAMERA_UNITS_PX
@ PLANE_TRACK_AUTOKEY
@ REFINE_PRINCIPAL_POINT
@ REFINE_TANGENTIAL_DISTORTION
@ REFINE_RADIAL_DISTORTION
@ REFINE_FOCAL_LENGTH
@ TRACK_MATCH_PREVIOUS_FRAME
@ TRACK_MATCH_KEYFRAME
@ TRACKING_DOPE_SELECTED_ONLY
@ TRACKING_DOPE_SORT_INVERSE
@ TRACKING_DOPE_SHOW_HIDDEN
ParameterFlag
Definition RNA_types.hh:510
@ PARM_RNAPTR
Definition RNA_types.hh:513
@ PARM_REQUIRED
Definition RNA_types.hh:511
@ FUNC_USE_REPORTS
Definition RNA_types.hh:805
@ FUNC_USE_SELF_ID
Definition RNA_types.hh:792
@ PROP_FLOAT
Definition RNA_types.hh:152
@ PROP_BOOLEAN
Definition RNA_types.hh:150
@ PROP_ENUM
Definition RNA_types.hh:154
@ PROP_INT
Definition RNA_types.hh:151
@ PROP_STRING
Definition RNA_types.hh:153
@ PROP_POINTER
Definition RNA_types.hh:155
@ PROP_COLLECTION
Definition RNA_types.hh:156
#define RNA_TRANSLATION_PREC_DEFAULT
Definition RNA_types.hh:212
PropertyFlag
Definition RNA_types.hh:286
@ PROP_THICK_WRAP
Definition RNA_types.hh:397
@ PROP_ANIMATABLE
Definition RNA_types.hh:305
@ PROP_NEVER_UNLINK
Definition RNA_types.hh:358
@ PROP_EDITABLE
Definition RNA_types.hh:292
@ PROP_NEVER_NULL
Definition RNA_types.hh:351
@ PROP_ID_REFCOUNT
Definition RNA_types.hh:338
@ PROP_MATRIX
Definition RNA_types.hh:253
@ PROP_XYZ
Definition RNA_types.hh:257
@ PROP_PIXEL
Definition RNA_types.hh:236
@ PROP_ANGLE
Definition RNA_types.hh:240
@ PROP_NONE
Definition RNA_types.hh:221
@ PROP_FACTOR
Definition RNA_types.hh:239
@ PROP_COLOR_GAMMA
Definition RNA_types.hh:260
@ PROP_TRANSLATION
Definition RNA_types.hh:249
#define ND_DISPLAY
Definition WM_types.hh:488
#define NC_MOVIECLIP
Definition WM_types.hh:394
#define NC_SCENE
Definition WM_types.hh:375
#define ND_NODES
Definition WM_types.hh:433
#define NA_EDITED
Definition WM_types.hh:581
ReportList * reports
Definition WM_types.hh:1025
#define ND_SELECT
Definition WM_types.hh:505
#define ND_TRANSFORM
Definition WM_types.hh:453
#define NC_OBJECT
Definition WM_types.hh:376
BMesh const char void * data
#define SELECT
#define MAX_ID_NAME
#define MAX_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:404
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:4226