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