Blender  V2.93
rna_tracking.c
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16 
21 #include <limits.h>
22 #include <stdlib.h>
23 
24 #include "MEM_guardedalloc.h"
25 
26 #include "BKE_movieclip.h"
27 #include "BKE_tracking.h"
28 
29 #include "RNA_access.h"
30 #include "RNA_define.h"
31 
32 #include "rna_internal.h"
33 
34 #include "DNA_movieclip_types.h"
35 #include "DNA_object_types.h" /* SELECT */
36 #include "DNA_scene_types.h"
37 
38 #include "WM_types.h"
39 
40 #ifdef RNA_RUNTIME
41 
42 # include "BLI_math.h"
43 
44 # include "DNA_anim_types.h"
45 
46 # include "BKE_anim_data.h"
47 # include "BKE_animsys.h"
48 # include "BKE_node.h"
49 
50 # include "DEG_depsgraph.h"
51 
52 # include "IMB_imbuf.h"
53 
54 # include "WM_api.h"
55 
56 static char *rna_tracking_path(PointerRNA *UNUSED(ptr))
57 {
58  return BLI_strdup("tracking");
59 }
60 
61 static void rna_tracking_defaultSettings_patternUpdate(Main *UNUSED(bmain),
62  Scene *UNUSED(scene),
63  PointerRNA *ptr)
64 {
65  MovieClip *clip = (MovieClip *)ptr->owner_id;
66  MovieTracking *tracking = &clip->tracking;
67  MovieTrackingSettings *settings = &tracking->settings;
68 
69  if (settings->default_search_size < settings->default_pattern_size) {
70  settings->default_search_size = settings->default_pattern_size;
71  }
72 }
73 
74 static void rna_tracking_defaultSettings_searchUpdate(Main *UNUSED(bmain),
75  Scene *UNUSED(scene),
76  PointerRNA *ptr)
77 {
78  MovieClip *clip = (MovieClip *)ptr->owner_id;
79  MovieTracking *tracking = &clip->tracking;
80  MovieTrackingSettings *settings = &tracking->settings;
81 
82  if (settings->default_pattern_size > settings->default_search_size) {
83  settings->default_pattern_size = settings->default_search_size;
84  }
85 }
86 
87 static char *rna_trackingTrack_path(PointerRNA *ptr)
88 {
89  MovieClip *clip = (MovieClip *)ptr->owner_id;
91  /* Escaped object name, escaped track name, rest of the path. */
92  char rna_path[MAX_NAME * 4 + 64];
93  BKE_tracking_get_rna_path_for_track(&clip->tracking, track, rna_path, sizeof(rna_path));
94  return BLI_strdup(rna_path);
95 }
96 
97 static void rna_trackingTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
98 {
99  MovieClip *clip = (MovieClip *)ptr->owner_id;
100 
102 }
103 
104 static void rna_trackingPlaneTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
105 {
106  MovieClip *clip = (MovieClip *)ptr->owner_id;
107 
109 }
110 
111 static void rna_trackingObjects_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
112 {
113  MovieClip *clip = (MovieClip *)ptr->owner_id;
114 
116 }
117 
118 static int rna_tracking_active_object_index_get(PointerRNA *ptr)
119 {
120  MovieClip *clip = (MovieClip *)ptr->owner_id;
121 
122  return clip->tracking.objectnr;
123 }
124 
125 static void rna_tracking_active_object_index_set(PointerRNA *ptr, int value)
126 {
127  MovieClip *clip = (MovieClip *)ptr->owner_id;
128 
129  clip->tracking.objectnr = value;
131 }
132 
133 static void rna_tracking_active_object_index_range(
134  PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
135 {
136  MovieClip *clip = (MovieClip *)ptr->owner_id;
137 
138  *min = 0;
139  *max = max_ii(0, clip->tracking.tot_object - 1);
140 }
141 
142 static PointerRNA rna_tracking_active_track_get(PointerRNA *ptr)
143 {
144  MovieClip *clip = (MovieClip *)ptr->owner_id;
146 
148 }
149 
150 static void rna_tracking_active_track_set(PointerRNA *ptr,
151  PointerRNA value,
152  struct ReportList *UNUSED(reports))
153 {
154  MovieClip *clip = (MovieClip *)ptr->owner_id;
155  MovieTrackingTrack *track = (MovieTrackingTrack *)value.data;
156  ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
157  int index = BLI_findindex(tracksbase, track);
158 
159  if (index != -1) {
160  clip->tracking.act_track = track;
161  }
162  else {
163  clip->tracking.act_track = NULL;
164  }
165 }
166 
167 static PointerRNA rna_tracking_active_plane_track_get(PointerRNA *ptr)
168 {
169  MovieClip *clip = (MovieClip *)ptr->owner_id;
171 
172  return rna_pointer_inherit_refine(ptr, &RNA_MovieTrackingPlaneTrack, act_plane_track);
173 }
174 
175 static void rna_tracking_active_plane_track_set(PointerRNA *ptr,
176  PointerRNA value,
177  struct ReportList *UNUSED(reports))
178 {
179  MovieClip *clip = (MovieClip *)ptr->owner_id;
180  MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)value.data;
181  ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(&clip->tracking);
182  int index = BLI_findindex(plane_tracks_base, plane_track);
183 
184  if (index != -1) {
185  clip->tracking.act_plane_track = plane_track;
186  }
187  else {
188  clip->tracking.act_plane_track = NULL;
189  }
190 }
191 
192 static void rna_trackingTrack_name_set(PointerRNA *ptr, const char *value)
193 {
194  MovieClip *clip = (MovieClip *)ptr->owner_id;
196  ListBase *tracksbase = BKE_tracking_find_tracks_list_for_track(&clip->tracking, track);
197  /* Store old name, for the animation fix later. */
198  char old_name[sizeof(track->name)];
199  BLI_strncpy(old_name, track->name, sizeof(track->name));
200  /* Update the name, */
201  BLI_strncpy(track->name, value, sizeof(track->name));
202  BKE_tracking_track_unique_name(tracksbase, track);
203  /* Fix animation paths. */
204  AnimData *adt = BKE_animdata_from_id(&clip->id);
205  if (adt != NULL) {
206  char rna_path[MAX_NAME * 2 + 64];
207  BKE_tracking_get_rna_path_prefix_for_track(&clip->tracking, track, rna_path, sizeof(rna_path));
208  BKE_animdata_fix_paths_rename(&clip->id, adt, NULL, rna_path, old_name, track->name, 0, 0, 1);
209  }
210 }
211 
212 static bool rna_trackingTrack_select_get(PointerRNA *ptr)
213 {
215 
216  return TRACK_SELECTED(track);
217 }
218 
219 static void rna_trackingTrack_select_set(PointerRNA *ptr, bool value)
220 {
222 
223  if (value) {
224  track->flag |= SELECT;
225  track->pat_flag |= SELECT;
226  track->search_flag |= SELECT;
227  }
228  else {
229  track->flag &= ~SELECT;
230  track->pat_flag &= ~SELECT;
231  track->search_flag &= ~SELECT;
232  }
233 }
234 
235 static void rna_trackingPlaneMarker_frame_set(PointerRNA *ptr, int value)
236 {
237  MovieClip *clip = (MovieClip *)ptr->owner_id;
238  MovieTracking *tracking = &clip->tracking;
240  MovieTrackingObject *tracking_object;
241  bool found = false;
242  MovieTrackingPlaneTrack *plane_track = NULL;
243 
244  for (tracking_object = tracking->objects.first; tracking_object;
245  tracking_object = tracking_object->next) {
246  ListBase *tracksbase = BKE_tracking_object_get_plane_tracks(tracking, tracking_object);
247 
248  for (plane_track = tracksbase->first; plane_track; plane_track = plane_track->next) {
249  if (plane_marker >= plane_track->markers &&
250  plane_marker < plane_track->markers + plane_track->markersnr) {
251  found = true;
252  break;
253  }
254  }
255 
256  if (found) {
257  break;
258  }
259  }
260 
261  if (found) {
262  MovieTrackingPlaneMarker new_plane_marker = *plane_marker;
263  new_plane_marker.framenr = value;
264 
265  BKE_tracking_plane_marker_delete(plane_track, plane_marker->framenr);
266  BKE_tracking_plane_marker_insert(plane_track, &new_plane_marker);
267  }
268 }
269 
270 static char *rna_trackingPlaneTrack_path(PointerRNA *ptr)
271 {
272  MovieClip *clip = (MovieClip *)ptr->owner_id;
274  /* Escaped object name, escaped track name, rest of the path. */
275  char rna_path[MAX_NAME * 4 + 64];
277  &clip->tracking, plane_track, rna_path, sizeof(rna_path));
278  return BLI_strdup(rna_path);
279 }
280 
281 static void rna_trackingPlaneTrack_name_set(PointerRNA *ptr, const char *value)
282 {
283  MovieClip *clip = (MovieClip *)ptr->owner_id;
286  plane_track);
287  /* Store old name, for the animation fix later. */
288  char old_name[sizeof(plane_track->name)];
289  BLI_strncpy(old_name, plane_track->name, sizeof(plane_track->name));
290  /* Update the name, */
291  BLI_strncpy(plane_track->name, value, sizeof(plane_track->name));
292  BKE_tracking_plane_track_unique_name(plane_tracks_base, plane_track);
293  /* Fix animation paths. */
294  AnimData *adt = BKE_animdata_from_id(&clip->id);
295  if (adt != NULL) {
296  char rna_path[MAX_NAME * 2 + 64];
298  &clip->tracking, plane_track, rna_path, sizeof(rna_path));
300  &clip->id, adt, NULL, rna_path, old_name, plane_track->name, 0, 0, 1);
301  }
302 }
303 
304 static char *rna_trackingCamera_path(PointerRNA *UNUSED(ptr))
305 {
306  return BLI_strdup("tracking.camera");
307 }
308 
309 static float rna_trackingCamera_focal_mm_get(PointerRNA *ptr)
310 {
311  MovieClip *clip = (MovieClip *)ptr->owner_id;
312  MovieTrackingCamera *camera = &clip->tracking.camera;
313  float val = camera->focal;
314 
315  if (clip->lastsize[0]) {
316  val = val * camera->sensor_width / (float)clip->lastsize[0];
317  }
318 
319  return val;
320 }
321 
322 static void rna_trackingCamera_focal_mm_set(PointerRNA *ptr, float value)
323 {
324  MovieClip *clip = (MovieClip *)ptr->owner_id;
325  MovieTrackingCamera *camera = &clip->tracking.camera;
326 
327  if (clip->lastsize[0]) {
328  value = clip->lastsize[0] * value / camera->sensor_width;
329  }
330 
331  if (value >= 0.0001f) {
332  camera->focal = value;
333  }
334 }
335 
336 static char *rna_trackingStabilization_path(PointerRNA *UNUSED(ptr))
337 {
338  return BLI_strdup("tracking.stabilization");
339 }
340 
341 static int rna_track_2d_stabilization(CollectionPropertyIterator *UNUSED(iter), void *data)
342 {
344 
345  if ((track->flag & TRACK_USE_2D_STAB) == 0) {
346  return 1;
347  }
348 
349  return 0;
350 }
351 
352 static int rna_track_2d_stabilization_rotation(CollectionPropertyIterator *UNUSED(iter),
353  void *data)
354 {
356 
357  if ((track->flag & TRACK_USE_2D_STAB_ROT) == 0) {
358  return 1;
359  }
360 
361  return 0;
362 }
363 
364 static void rna_tracking_stabTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
365 {
366  MovieClip *clip = (MovieClip *)ptr->owner_id;
367  rna_iterator_listbase_begin(iter, &clip->tracking.tracks, rna_track_2d_stabilization);
368 }
369 
370 static int rna_tracking_stabTracks_active_index_get(PointerRNA *ptr)
371 {
372  MovieClip *clip = (MovieClip *)ptr->owner_id;
373  return clip->tracking.stabilization.act_track;
374 }
375 
376 static void rna_tracking_stabTracks_active_index_set(PointerRNA *ptr, int value)
377 {
378  MovieClip *clip = (MovieClip *)ptr->owner_id;
379  clip->tracking.stabilization.act_track = value;
380 }
381 
382 static void rna_tracking_stabTracks_active_index_range(
383  PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
384 {
385  MovieClip *clip = (MovieClip *)ptr->owner_id;
386 
387  *min = 0;
388  *max = max_ii(0, clip->tracking.stabilization.tot_track - 1);
389 }
390 
391 static void rna_tracking_stabRotTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
392 {
393  MovieClip *clip = (MovieClip *)ptr->owner_id;
394  rna_iterator_listbase_begin(iter, &clip->tracking.tracks, rna_track_2d_stabilization_rotation);
395 }
396 
397 static int rna_tracking_stabRotTracks_active_index_get(PointerRNA *ptr)
398 {
399  MovieClip *clip = (MovieClip *)ptr->owner_id;
400  return clip->tracking.stabilization.act_rot_track;
401 }
402 
403 static void rna_tracking_stabRotTracks_active_index_set(PointerRNA *ptr, int value)
404 {
405  MovieClip *clip = (MovieClip *)ptr->owner_id;
406  clip->tracking.stabilization.act_rot_track = value;
407 }
408 
409 static void rna_tracking_stabRotTracks_active_index_range(
410  PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
411 {
412  MovieClip *clip = (MovieClip *)ptr->owner_id;
413 
414  *min = 0;
415  *max = max_ii(0, clip->tracking.stabilization.tot_rot_track - 1);
416 }
417 
418 static void rna_tracking_flushUpdate(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
419 {
420  MovieClip *clip = (MovieClip *)ptr->owner_id;
421 
422  nodeUpdateID(scene->nodetree, &clip->id);
423 
426  DEG_id_tag_update(&clip->id, 0);
427 }
428 
429 static void rna_tracking_resetIntrinsics(Main *UNUSED(bmain),
430  Scene *UNUSED(scene),
431  PointerRNA *ptr)
432 {
433  MovieClip *clip = (MovieClip *)ptr->owner_id;
434  MovieTracking *tracking = &clip->tracking;
435 
436  if (tracking->camera.intrinsics) {
437  BKE_tracking_distortion_free(tracking->camera.intrinsics);
438  tracking->camera.intrinsics = NULL;
439  }
440 }
441 
442 static void rna_trackingObject_tracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
443 {
445 
446  if (object->flag & TRACKING_OBJECT_CAMERA) {
447  MovieClip *clip = (MovieClip *)ptr->owner_id;
448 
450  }
451  else {
452  rna_iterator_listbase_begin(iter, &object->tracks, NULL);
453  }
454 }
455 
456 static void rna_trackingObject_plane_tracks_begin(CollectionPropertyIterator *iter,
457  PointerRNA *ptr)
458 {
460 
461  if (object->flag & TRACKING_OBJECT_CAMERA) {
462  MovieClip *clip = (MovieClip *)ptr->owner_id;
463 
465  }
466  else {
468  }
469 }
470 
471 static PointerRNA rna_trackingObject_reconstruction_get(PointerRNA *ptr)
472 {
474 
475  if (object->flag & TRACKING_OBJECT_CAMERA) {
476  MovieClip *clip = (MovieClip *)ptr->owner_id;
477 
479  ptr, &RNA_MovieTrackingReconstruction, &clip->tracking.reconstruction);
480  }
481  else {
483  ptr, &RNA_MovieTrackingReconstruction, &object->reconstruction);
484  }
485 }
486 
487 static PointerRNA rna_tracking_active_object_get(PointerRNA *ptr)
488 {
489  MovieClip *clip = (MovieClip *)ptr->owner_id;
491 
493 }
494 
495 static void rna_tracking_active_object_set(PointerRNA *ptr,
496  PointerRNA value,
497  struct ReportList *UNUSED(reports))
498 {
499  MovieClip *clip = (MovieClip *)ptr->owner_id;
500  MovieTrackingObject *object = (MovieTrackingObject *)value.data;
501  int index = BLI_findindex(&clip->tracking.objects, object);
502 
503  if (index != -1) {
504  clip->tracking.objectnr = index;
505  }
506  else {
507  clip->tracking.objectnr = 0;
508  }
509 }
510 
511 static void rna_trackingObject_name_set(PointerRNA *ptr, const char *value)
512 {
513  MovieClip *clip = (MovieClip *)ptr->owner_id;
515 
516  BLI_strncpy(object->name, value, sizeof(object->name));
517 
519 }
520 
521 static void rna_trackingObject_flushUpdate(Main *UNUSED(bmain),
522  Scene *UNUSED(scene),
523  PointerRNA *ptr)
524 {
525  MovieClip *clip = (MovieClip *)ptr->owner_id;
526 
528  DEG_id_tag_update(&clip->id, 0);
529 }
530 
531 static void rna_trackingMarker_frame_set(PointerRNA *ptr, int value)
532 {
533  MovieClip *clip = (MovieClip *)ptr->owner_id;
534  MovieTracking *tracking = &clip->tracking;
536  MovieTrackingObject *tracking_object;
537  bool found = false;
538  MovieTrackingTrack *track = NULL;
539 
540  for (tracking_object = tracking->objects.first; tracking_object;
541  tracking_object = tracking_object->next) {
542  ListBase *tracksbase = BKE_tracking_object_get_tracks(tracking, tracking_object);
543 
544  for (track = tracksbase->first; track; track = track->next) {
545  if (marker >= track->markers && marker < track->markers + track->markersnr) {
546  found = true;
547  break;
548  }
549  }
550 
551  if (found) {
552  break;
553  }
554  }
555 
556  if (found) {
557  MovieTrackingMarker new_marker = *marker;
558  new_marker.framenr = value;
559 
560  BKE_tracking_marker_delete(track, marker->framenr);
561  BKE_tracking_marker_insert(track, &new_marker);
562  }
563 }
564 
565 static void rna_tracking_markerPattern_update(Main *UNUSED(bmain),
566  Scene *UNUSED(scene),
567  PointerRNA *ptr)
568 {
570 
572 }
573 
574 static void rna_tracking_markerSearch_update(Main *UNUSED(bmain),
575  Scene *UNUSED(scene),
576  PointerRNA *ptr)
577 {
579 
581 }
582 
583 static void rna_tracking_markerPattern_boundbox_get(PointerRNA *ptr, float *values)
584 {
586  float min[2], max[2];
587 
589 
590  copy_v2_v2(values, min);
591  copy_v2_v2(values + 2, max);
592 }
593 
594 static void rna_trackingDopesheet_tagUpdate(Main *UNUSED(bmain),
595  Scene *UNUSED(scene),
596  PointerRNA *ptr)
597 {
598  MovieClip *clip = (MovieClip *)ptr->owner_id;
599  MovieTrackingDopesheet *dopesheet = &clip->tracking.dopesheet;
600 
601  dopesheet->ok = 0;
602 }
603 
604 /* API */
605 
606 static MovieTrackingTrack *add_track_to_base(
607  MovieClip *clip, MovieTracking *tracking, ListBase *tracksbase, const char *name, int frame)
608 {
609  int width, height;
610  MovieClipUser user = {0};
611  MovieTrackingTrack *track;
612 
613  user.framenr = 1;
614 
615  BKE_movieclip_get_size(clip, &user, &width, &height);
616 
617  track = BKE_tracking_track_add(tracking, tracksbase, 0, 0, frame, width, height);
618 
619  if (name && name[0]) {
620  BLI_strncpy(track->name, name, sizeof(track->name));
621  BKE_tracking_track_unique_name(tracksbase, track);
622  }
623 
624  return track;
625 }
626 
627 static MovieTrackingTrack *rna_trackingTracks_new(ID *id,
628  MovieTracking *tracking,
629  const char *name,
630  int frame)
631 {
632  MovieClip *clip = (MovieClip *)id;
633  MovieTrackingTrack *track;
634 
635  track = add_track_to_base(clip, tracking, &tracking->tracks, name, frame);
636 
638 
639  return track;
640 }
641 
642 static MovieTrackingTrack *rna_trackingObject_tracks_new(ID *id,
643  MovieTrackingObject *object,
644  const char *name,
645  int frame)
646 {
647  MovieClip *clip = (MovieClip *)id;
648  ListBase *tracksbase = &object->tracks;
649  MovieTrackingTrack *track;
650 
651  if (object->flag & TRACKING_OBJECT_CAMERA) {
652  tracksbase = &clip->tracking.tracks;
653  }
654 
655  track = add_track_to_base(clip, &clip->tracking, tracksbase, name, frame);
656 
658 
659  return track;
660 }
661 
662 static MovieTrackingObject *rna_trackingObject_new(MovieTracking *tracking, const char *name)
663 {
664  MovieTrackingObject *object = BKE_tracking_object_add(tracking, name);
665 
667 
668  return object;
669 }
670 
671 static void rna_trackingObject_remove(MovieTracking *tracking,
672  ReportList *reports,
673  PointerRNA *object_ptr)
674 {
675  MovieTrackingObject *object = object_ptr->data;
676  if (BKE_tracking_object_delete(tracking, object) == false) {
677  BKE_reportf(reports, RPT_ERROR, "MovieTracking '%s' cannot be removed", object->name);
678  return;
679  }
680 
681  RNA_POINTER_INVALIDATE(object_ptr);
682 
684 }
685 
686 static MovieTrackingMarker *rna_trackingMarkers_find_frame(MovieTrackingTrack *track,
687  int framenr,
688  bool exact)
689 {
690  if (exact) {
691  return BKE_tracking_marker_get_exact(track, framenr);
692  }
693  else {
694  return BKE_tracking_marker_get(track, framenr);
695  }
696 }
697 
698 static MovieTrackingMarker *rna_trackingMarkers_insert_frame(MovieTrackingTrack *track,
699  int framenr,
700  float *co)
701 {
702  MovieTrackingMarker marker, *new_marker;
703 
704  memset(&marker, 0, sizeof(marker));
705  marker.framenr = framenr;
706  copy_v2_v2(marker.pos, co);
707 
708  /* a bit arbitrary, but better than creating markers with zero pattern
709  * which is forbidden actually
710  */
711  copy_v2_v2(marker.pattern_corners[0], track->markers[0].pattern_corners[0]);
712  copy_v2_v2(marker.pattern_corners[1], track->markers[0].pattern_corners[1]);
713  copy_v2_v2(marker.pattern_corners[2], track->markers[0].pattern_corners[2]);
714  copy_v2_v2(marker.pattern_corners[3], track->markers[0].pattern_corners[3]);
715 
716  new_marker = BKE_tracking_marker_insert(track, &marker);
717 
719 
720  return new_marker;
721 }
722 
723 static void rna_trackingMarkers_delete_frame(MovieTrackingTrack *track, int framenr)
724 {
725  if (track->markersnr == 1) {
726  return;
727  }
728 
729  BKE_tracking_marker_delete(track, framenr);
730 
732 }
733 
734 static MovieTrackingPlaneMarker *rna_trackingPlaneMarkers_find_frame(
735  MovieTrackingPlaneTrack *plane_track, int framenr, bool exact)
736 {
737  if (exact) {
738  return BKE_tracking_plane_marker_get_exact(plane_track, framenr);
739  }
740  else {
741  return BKE_tracking_plane_marker_get(plane_track, framenr);
742  }
743 }
744 
745 static MovieTrackingPlaneMarker *rna_trackingPlaneMarkers_insert_frame(
746  MovieTrackingPlaneTrack *plane_track, int framenr)
747 {
748  MovieTrackingPlaneMarker plane_marker, *new_plane_marker;
749 
750  memset(&plane_marker, 0, sizeof(plane_marker));
751  plane_marker.framenr = framenr;
752 
753  /* a bit arbitrary, but better than creating zero markers */
754  copy_v2_v2(plane_marker.corners[0], plane_track->markers[0].corners[0]);
755  copy_v2_v2(plane_marker.corners[1], plane_track->markers[0].corners[1]);
756  copy_v2_v2(plane_marker.corners[2], plane_track->markers[0].corners[2]);
757  copy_v2_v2(plane_marker.corners[3], plane_track->markers[0].corners[3]);
758 
759  new_plane_marker = BKE_tracking_plane_marker_insert(plane_track, &plane_marker);
760 
762 
763  return new_plane_marker;
764 }
765 
766 static void rna_trackingPlaneMarkers_delete_frame(MovieTrackingPlaneTrack *plane_track,
767  int framenr)
768 {
769  if (plane_track->markersnr == 1) {
770  return;
771  }
772 
773  BKE_tracking_plane_marker_delete(plane_track, framenr);
774 
776 }
777 
778 static MovieTrackingObject *find_object_for_reconstruction(
780 {
781  MovieTrackingObject *object;
782 
783  for (object = tracking->objects.first; object; object = object->next) {
784  if (object->flag & TRACKING_OBJECT_CAMERA) {
785  if (&tracking->reconstruction == reconstruction) {
786  return object;
787  }
788  }
789  else if (&object->reconstruction == reconstruction) {
790  return object;
791  }
792  }
793 
794  return NULL;
795 }
796 
797 static MovieReconstructedCamera *rna_trackingCameras_find_frame(
798  ID *id, MovieTrackingReconstruction *reconstruction, int framenr)
799 {
800  MovieClip *clip = (MovieClip *)id;
801  MovieTracking *tracking = &clip->tracking;
802  MovieTrackingObject *object = find_object_for_reconstruction(tracking, reconstruction);
803  return BKE_tracking_camera_get_reconstructed(tracking, object, framenr);
804 }
805 
806 static void rna_trackingCameras_matrix_from_frame(ID *id,
808  int framenr,
809  float matrix[16])
810 {
811  float mat[4][4];
812 
813  MovieClip *clip = (MovieClip *)id;
814  MovieTracking *tracking = &clip->tracking;
815  MovieTrackingObject *object = find_object_for_reconstruction(tracking, reconstruction);
816  BKE_tracking_camera_get_reconstructed_interpolate(tracking, object, framenr, mat);
817 
818  memcpy(matrix, mat, sizeof(float[4][4]));
819 }
820 
821 #else
822 
825  "Perspective",
826  0,
827  "Perspective",
828  "Search for markers that are perspectively deformed (homography) between frames"},
830  "Affine",
831  0,
832  "Affine",
833  "Search for markers that are affine-deformed (t, r, k, and skew) between frames"},
835  "LocRotScale",
836  0,
837  "Location, Rotation & Scale",
838  "Search for markers that are translated, rotated, and scaled between frames"},
840  "LocScale",
841  0,
842  "Location & Scale",
843  "Search for markers that are translated and scaled between frames"},
845  "LocRot",
846  0,
847  "Location & Rotation",
848  "Search for markers that are translated and rotated between frames"},
850  "Loc",
851  0,
852  "Location",
853  "Search for markers that are translated between frames"},
854  {0, NULL, 0, NULL, NULL},
855 };
856 
858  {TRACK_MATCH_KEYFRAME, "KEYFRAME", 0, "Keyframe", "Track pattern from keyframe to next frame"},
860  "PREV_FRAME",
861  0,
862  "Previous frame",
863  "Track pattern from current frame to next frame"},
864  {0, NULL, 0, NULL, NULL},
865 };
866 
868 {
869  StructRNA *srna;
870  PropertyRNA *prop;
871 
872  static const EnumPropertyItem speed_items[] = {
873  {0, "FASTEST", 0, "Fastest", "Track as fast as it's possible"},
874  {TRACKING_SPEED_DOUBLE, "DOUBLE", 0, "Double", "Track with double speed"},
875  {TRACKING_SPEED_REALTIME, "REALTIME", 0, "Realtime", "Track with realtime speed"},
876  {TRACKING_SPEED_HALF, "HALF", 0, "Half", "Track with half of realtime speed"},
877  {TRACKING_SPEED_QUARTER, "QUARTER", 0, "Quarter", "Track with quarter of realtime speed"},
878  {0, NULL, 0, NULL, NULL},
879  };
880 
881  static const EnumPropertyItem cleanup_items[] = {
882  {TRACKING_CLEAN_SELECT, "SELECT", 0, "Select", "Select unclean tracks"},
883  {TRACKING_CLEAN_DELETE_TRACK, "DELETE_TRACK", 0, "Delete Track", "Delete unclean tracks"},
885  "DELETE_SEGMENTS",
886  0,
887  "Delete Segments",
888  "Delete unclean segments of tracks"},
889  {0, NULL, 0, NULL, NULL},
890  };
891 
892  srna = RNA_def_struct(brna, "MovieTrackingSettings", NULL);
893  RNA_def_struct_ui_text(srna, "Movie tracking settings", "Match moving settings");
894 
895  /* speed */
896  prop = RNA_def_property(srna, "speed", PROP_ENUM, PROP_NONE);
898  RNA_def_property_enum_items(prop, speed_items);
900  "Speed",
901  "Limit speed of tracking to make visual feedback easier "
902  "(this does not affect the tracking quality)");
903 
904  /* use keyframe selection */
905  prop = RNA_def_property(srna, "use_keyframe_selection", PROP_BOOLEAN, PROP_NONE);
908  prop, NULL, "reconstruction_flag", TRACKING_USE_KEYFRAME_SELECTION);
910  "Keyframe Selection",
911  "Automatically select keyframes when solving camera/object motion");
912 
913  /* intrinsics refinement during bundle adjustment */
914 
915  prop = RNA_def_property(srna, "refine_intrinsics_focal_length", PROP_BOOLEAN, PROP_NONE);
916  RNA_def_property_boolean_sdna(prop, NULL, "refine_camera_intrinsics", REFINE_FOCAL_LENGTH);
919  prop, "Refine Focal Length", "Refine focal length during camera solving");
920 
921  prop = RNA_def_property(srna, "refine_intrinsics_principal_point", PROP_BOOLEAN, PROP_NONE);
922  RNA_def_property_boolean_sdna(prop, NULL, "refine_camera_intrinsics", REFINE_PRINCIPAL_POINT);
925  prop, "Refine Principal Point", "Refine principal point during camera solving");
926 
927  prop = RNA_def_property(srna, "refine_intrinsics_radial_distortion", PROP_BOOLEAN, PROP_NONE);
928  RNA_def_property_boolean_sdna(prop, NULL, "refine_camera_intrinsics", REFINE_RADIAL_DISTORTION);
931  "Refine Radial",
932  "Refine radial coefficients of distortion model during camera solving");
933 
934  prop = RNA_def_property(
935  srna, "refine_intrinsics_tangential_distortion", PROP_BOOLEAN, PROP_NONE);
937  prop, NULL, "refine_camera_intrinsics", REFINE_TANGENTIAL_DISTORTION);
940  prop,
941  "Refine Tangential",
942  "Refine tangential coefficients of distortion model during camera solving");
943 
944  /* tool settings */
945 
946  /* distance */
947  prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
949  RNA_def_property_float_sdna(prop, NULL, "dist");
950  RNA_def_property_float_default(prop, 1.0f);
952  prop, "Distance", "Distance between two bundles used for scene scaling");
953 
954  /* frames count */
955  prop = RNA_def_property(srna, "clean_frames", PROP_INT, PROP_NONE);
957  RNA_def_property_int_sdna(prop, NULL, "clean_frames");
958  RNA_def_property_range(prop, 0, INT_MAX);
960  prop,
961  "Tracked Frames",
962  "Effect on tracks which are tracked less than the specified amount of frames");
963 
964  /* re-projection error */
965  prop = RNA_def_property(srna, "clean_error", PROP_FLOAT, PROP_NONE);
967  RNA_def_property_float_sdna(prop, NULL, "clean_error");
968  RNA_def_property_range(prop, 0, FLT_MAX);
970  prop, "Reprojection Error", "Effect on tracks which have a larger re-projection error");
971 
972  /* cleanup action */
973  prop = RNA_def_property(srna, "clean_action", PROP_ENUM, PROP_NONE);
974  RNA_def_property_enum_sdna(prop, NULL, "clean_action");
976  RNA_def_property_enum_items(prop, cleanup_items);
977  RNA_def_property_ui_text(prop, "Action", "Cleanup action to execute");
978 
979  /* solver settings */
980  prop = RNA_def_property(srna, "use_tripod_solver", PROP_BOOLEAN, PROP_NONE);
984  prop,
985  "Tripod Motion",
986  "Use special solver to track a stable camera position, such as a tripod");
987 
988  /* default_limit_frames */
989  prop = RNA_def_property(srna, "default_frames_limit", PROP_INT, PROP_NONE);
991  RNA_def_property_int_sdna(prop, NULL, "default_frames_limit");
992  RNA_def_property_range(prop, 0, SHRT_MAX);
994  prop, "Frames Limit", "Every tracking cycle, this number of frames are tracked");
995 
996  /* default_pattern_match */
997  prop = RNA_def_property(srna, "default_pattern_match", PROP_ENUM, PROP_NONE);
999  RNA_def_property_enum_sdna(prop, NULL, "default_pattern_match");
1002  prop, "Pattern Match", "Track pattern from given frame when tracking marker to next frame");
1003 
1004  /* default_margin */
1005  prop = RNA_def_property(srna, "default_margin", PROP_INT, PROP_PIXEL);
1007  RNA_def_property_int_sdna(prop, NULL, "default_margin");
1008  RNA_def_property_range(prop, 0, 300);
1010  prop, "Margin", "Default distance from image boundary at which marker stops tracking");
1011 
1012  /* default_tracking_motion_model */
1013  prop = RNA_def_property(srna, "default_motion_model", PROP_ENUM, PROP_NONE);
1016  RNA_def_property_ui_text(prop, "Motion Model", "Default motion model to use for tracking");
1017 
1018  /* default_use_brute */
1019  prop = RNA_def_property(srna, "use_default_brute", PROP_BOOLEAN, PROP_NONE);
1021  prop, NULL, "default_algorithm_flag", TRACK_ALGORITHM_FLAG_USE_BRUTE);
1023  prop, "Prepass", "Use a brute-force translation-only initialization when tracking");
1025 
1026  /* default_use_brute */
1027  prop = RNA_def_property(srna, "use_default_mask", PROP_BOOLEAN, PROP_NONE);
1029  prop, NULL, "default_algorithm_flag", TRACK_ALGORITHM_FLAG_USE_MASK);
1031  prop,
1032  "Use Mask",
1033  "Use a grease pencil data-block as a mask to use only specified areas of pattern "
1034  "when tracking");
1036 
1037  /* default_use_normalization */
1038  prop = RNA_def_property(srna, "use_default_normalization", PROP_BOOLEAN, PROP_NONE);
1040  prop, NULL, "default_algorithm_flag", TRACK_ALGORITHM_FLAG_USE_NORMALIZATION);
1042  prop, "Normalize", "Normalize light intensities while tracking (slower)");
1044 
1045  /* default minimal correlation */
1046  prop = RNA_def_property(srna, "default_correlation_min", PROP_FLOAT, PROP_NONE);
1048  RNA_def_property_float_sdna(prop, NULL, "default_minimum_correlation");
1049  RNA_def_property_range(prop, 0.0f, 1.0f);
1050  RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.05, 3);
1052  prop,
1053  "Correlation",
1054  "Default minimum value of correlation between matched pattern and reference "
1055  "that is still treated as successful tracking");
1056 
1057  /* default pattern size */
1058  prop = RNA_def_property(srna, "default_pattern_size", PROP_INT, PROP_NONE);
1060  RNA_def_property_int_sdna(prop, NULL, "default_pattern_size");
1061  RNA_def_property_range(prop, 5, 1000);
1062  RNA_def_property_update(prop, 0, "rna_tracking_defaultSettings_patternUpdate");
1063  RNA_def_property_ui_text(prop, "Pattern Size", "Size of pattern area for newly created tracks");
1064 
1065  /* default search size */
1066  prop = RNA_def_property(srna, "default_search_size", PROP_INT, PROP_NONE);
1068  RNA_def_property_int_sdna(prop, NULL, "default_search_size");
1069  RNA_def_property_range(prop, 5, 1000);
1070  RNA_def_property_update(prop, 0, "rna_tracking_defaultSettings_searchUpdate");
1071  RNA_def_property_ui_text(prop, "Search Size", "Size of search area for newly created tracks");
1072 
1073  /* default use_red_channel */
1074  prop = RNA_def_property(srna, "use_default_red_channel", PROP_BOOLEAN, PROP_NONE);
1076  RNA_def_property_ui_text(prop, "Use Red Channel", "Use red channel from footage for tracking");
1078 
1079  /* default_use_green_channel */
1080  prop = RNA_def_property(srna, "use_default_green_channel", PROP_BOOLEAN, PROP_NONE);
1083  prop, "Use Green Channel", "Use green channel from footage for tracking");
1085 
1086  /* default_use_blue_channel */
1087  prop = RNA_def_property(srna, "use_default_blue_channel", PROP_BOOLEAN, PROP_NONE);
1089  RNA_def_property_ui_text(prop, "Use Blue Channel", "Use blue channel from footage for tracking");
1091 
1092  prop = RNA_def_property(srna, "default_weight", PROP_FLOAT, PROP_FACTOR);
1093  RNA_def_property_range(prop, 0.0f, 1.0f);
1094  RNA_def_property_ui_text(prop, "Weight", "Influence of newly created track on a final solution");
1095 
1096  /* ** object tracking ** */
1097 
1098  /* object distance */
1099  prop = RNA_def_property(srna, "object_distance", PROP_FLOAT, PROP_NONE);
1101  RNA_def_property_float_sdna(prop, NULL, "object_distance");
1103  prop, "Distance", "Distance between two bundles used for object scaling");
1104  RNA_def_property_range(prop, 0.001, 10000);
1105  RNA_def_property_float_default(prop, 1.0f);
1106  RNA_def_property_ui_range(prop, 0.001, 10000.0, 1, 3);
1107 }
1108 
1110 {
1111  StructRNA *srna;
1112  PropertyRNA *prop;
1113 
1114  static const EnumPropertyItem distortion_model_items[] = {
1116  "POLYNOMIAL",
1117  0,
1118  "Polynomial",
1119  "Radial distortion model which fits common cameras"},
1121  "DIVISION",
1122  0,
1123  "Divisions",
1124  "Division distortion model which "
1125  "better represents wide-angle cameras"},
1126  {TRACKING_DISTORTION_MODEL_NUKE, "NUKE", 0, "Nuke", "Nuke distortion model"},
1127  {TRACKING_DISTORTION_MODEL_BROWN, "BROWN", 0, "Brown", "Brown-Conrady distortion model"},
1128  {0, NULL, 0, NULL, NULL},
1129  };
1130 
1131  static const EnumPropertyItem camera_units_items[] = {
1132  {CAMERA_UNITS_PX, "PIXELS", 0, "px", "Use pixels for units of focal length"},
1133  {CAMERA_UNITS_MM, "MILLIMETERS", 0, "mm", "Use millimeters for units of focal length"},
1134  {0, NULL, 0, NULL, NULL},
1135  };
1136 
1137  srna = RNA_def_struct(brna, "MovieTrackingCamera", NULL);
1138  RNA_def_struct_path_func(srna, "rna_trackingCamera_path");
1140  srna, "Movie tracking camera data", "Match-moving camera data for tracking");
1141 
1142  /* Distortion model */
1143  prop = RNA_def_property(srna, "distortion_model", PROP_ENUM, PROP_NONE);
1145  RNA_def_property_enum_items(prop, distortion_model_items);
1146  RNA_def_property_ui_text(prop, "Distortion Model", "Distortion model used for camera lenses");
1147  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_resetIntrinsics");
1148 
1149  /* Sensor */
1150  prop = RNA_def_property(srna, "sensor_width", PROP_FLOAT, PROP_NONE);
1151  RNA_def_property_float_sdna(prop, NULL, "sensor_width");
1153  RNA_def_property_range(prop, 0.0f, 500.0f);
1154  RNA_def_property_ui_text(prop, "Sensor", "Width of CCD sensor in millimeters");
1156 
1157  /* Focal Length */
1158  prop = RNA_def_property(srna, "focal_length", PROP_FLOAT, PROP_NONE);
1159  RNA_def_property_float_sdna(prop, NULL, "focal");
1161  RNA_def_property_range(prop, 0.0001f, FLT_MAX);
1162  RNA_def_property_ui_range(prop, 0.0001f, 5000.0f, 1, 2);
1164  prop, "rna_trackingCamera_focal_mm_get", "rna_trackingCamera_focal_mm_set", NULL);
1165  RNA_def_property_ui_text(prop, "Focal Length", "Camera's focal length");
1167 
1168  /* Focal Length in pixels */
1169  prop = RNA_def_property(srna, "focal_length_pixels", PROP_FLOAT, PROP_NONE);
1170  RNA_def_property_float_sdna(prop, NULL, "focal");
1172  RNA_def_property_range(prop, 0.0f, FLT_MAX);
1173  RNA_def_property_ui_range(prop, 0.0f, 5000.0f, 1, 2);
1174  RNA_def_property_ui_text(prop, "Focal Length", "Camera's focal length");
1176 
1177  /* Units */
1178  prop = RNA_def_property(srna, "units", PROP_ENUM, PROP_NONE);
1179  RNA_def_property_enum_sdna(prop, NULL, "units");
1181  RNA_def_property_enum_items(prop, camera_units_items);
1182  RNA_def_property_ui_text(prop, "Units", "Units used for camera focal length");
1183 
1184  /* Principal Point */
1185  prop = RNA_def_property(srna, "principal", PROP_FLOAT, PROP_PIXEL);
1186  RNA_def_property_array(prop, 2);
1187  RNA_def_property_float_sdna(prop, NULL, "principal");
1189  RNA_def_property_ui_text(prop, "Principal Point", "Optical center of lens");
1191 
1192  /* Radial distortion parameters */
1193  prop = RNA_def_property(srna, "k1", PROP_FLOAT, PROP_NONE);
1194  RNA_def_property_float_sdna(prop, NULL, "k1");
1196  RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1198  prop, "K1", "First coefficient of third order polynomial radial distortion");
1199  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1200 
1201  prop = RNA_def_property(srna, "k2", PROP_FLOAT, PROP_NONE);
1202  RNA_def_property_float_sdna(prop, NULL, "k2");
1204  RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1206  prop, "K2", "Second coefficient of third order polynomial radial distortion");
1207  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1208 
1209  prop = RNA_def_property(srna, "k3", PROP_FLOAT, PROP_NONE);
1210  RNA_def_property_float_sdna(prop, NULL, "k3");
1212  RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1214  prop, "K3", "Third coefficient of third order polynomial radial distortion");
1215  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1216 
1217  /* Division distortion parameters */
1218  prop = RNA_def_property(srna, "division_k1", PROP_FLOAT, PROP_NONE);
1220  RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1221  RNA_def_property_ui_text(prop, "K1", "First coefficient of second order division distortion");
1222  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1223 
1224  prop = RNA_def_property(srna, "division_k2", PROP_FLOAT, PROP_NONE);
1226  RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1227  RNA_def_property_ui_text(prop, "K2", "Second coefficient of second order division distortion");
1228  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1229 
1230  /* Nuke distortion parameters */
1231  prop = RNA_def_property(srna, "nuke_k1", PROP_FLOAT, PROP_NONE);
1233  RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1234  RNA_def_property_ui_text(prop, "K1", "First coefficient of second order Nuke distortion");
1235  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1236 
1237  prop = RNA_def_property(srna, "nuke_k2", PROP_FLOAT, PROP_NONE);
1239  RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1240  RNA_def_property_ui_text(prop, "K2", "Second coefficient of second order Nuke distortion");
1241  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1242 
1243  /* Brown-Conrady distortion parameters */
1244  prop = RNA_def_property(srna, "brown_k1", PROP_FLOAT, PROP_NONE);
1246  RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1248  prop, "K1", "First coefficient of fourth order Brown-Conrady radial distortion");
1249  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1250 
1251  prop = RNA_def_property(srna, "brown_k2", PROP_FLOAT, PROP_NONE);
1253  RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1255  prop, "K2", "Second coefficient of fourth order Brown-Conrady radial distortion");
1256  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1257 
1258  prop = RNA_def_property(srna, "brown_k3", PROP_FLOAT, PROP_NONE);
1260  RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1262  prop, "K3", "Third coefficient of fourth order Brown-Conrady radial distortion");
1263  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1264 
1265  prop = RNA_def_property(srna, "brown_k4", PROP_FLOAT, PROP_NONE);
1267  RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1269  prop, "K4", "Fourth coefficient of fourth order Brown-Conrady radial distortion");
1270  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1271 
1272  prop = RNA_def_property(srna, "brown_p1", PROP_FLOAT, PROP_NONE);
1274  RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1276  prop, "P1", "First coefficient of second order Brown-Conrady tangential distortion");
1277  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1278 
1279  prop = RNA_def_property(srna, "brown_p2", PROP_FLOAT, PROP_NONE);
1281  RNA_def_property_ui_range(prop, -10, 10, 0.1, 3);
1283  prop, "P2", "Second coefficient of second order Brown-Conrady tangential distortion");
1284  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_flushUpdate");
1285 
1286  /* pixel aspect */
1287  prop = RNA_def_property(srna, "pixel_aspect", PROP_FLOAT, PROP_XYZ);
1288  RNA_def_property_float_sdna(prop, NULL, "pixel_aspect");
1290  RNA_def_property_range(prop, 0.1f, FLT_MAX);
1291  RNA_def_property_ui_range(prop, 0.1f, 5000.0f, 1, 2);
1292  RNA_def_property_float_default(prop, 1.0f);
1293  RNA_def_property_ui_text(prop, "Pixel Aspect Ratio", "Pixel aspect ratio");
1294  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1295 }
1296 
1298 {
1299  StructRNA *srna;
1300  PropertyRNA *prop;
1301 
1302  static int boundbox_dimsize[] = {2, 2};
1303 
1304  srna = RNA_def_struct(brna, "MovieTrackingMarker", NULL);
1306  srna, "Movie tracking marker data", "Match-moving marker data for tracking");
1307 
1308  /* position */
1309  prop = RNA_def_property(srna, "co", PROP_FLOAT, PROP_TRANSLATION);
1310  RNA_def_property_array(prop, 2);
1311  RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1312  RNA_def_property_float_sdna(prop, NULL, "pos");
1313  RNA_def_property_ui_text(prop, "Position", "Marker position at frame in normalized coordinates");
1315 
1316  /* frame */
1317  prop = RNA_def_property(srna, "frame", PROP_INT, PROP_NONE);
1318  RNA_def_property_int_sdna(prop, NULL, "framenr");
1319  RNA_def_property_ui_text(prop, "Frame", "Frame number marker is keyframed on");
1320  RNA_def_property_int_funcs(prop, NULL, "rna_trackingMarker_frame_set", NULL);
1322 
1323  /* enable */
1324  prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
1326  RNA_def_property_ui_text(prop, "Mode", "Is marker muted for current frame");
1328 
1329  /* pattern */
1330  prop = RNA_def_property(srna, "pattern_corners", PROP_FLOAT, PROP_MATRIX);
1331  RNA_def_property_float_sdna(prop, NULL, "pattern_corners");
1334  RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1336  "Pattern Corners",
1337  "Array of coordinates which represents pattern's corners in "
1338  "normalized coordinates relative to marker position");
1339  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_markerPattern_update");
1340 
1341  prop = RNA_def_property(srna, "pattern_bound_box", PROP_FLOAT, PROP_NONE);
1342  RNA_def_property_multi_array(prop, 2, boundbox_dimsize);
1344  RNA_def_property_float_funcs(prop, "rna_tracking_markerPattern_boundbox_get", NULL, NULL);
1346  prop, "Pattern Bounding Box", "Pattern area bounding box in normalized coordinates");
1347 
1348  /* search */
1349  prop = RNA_def_property(srna, "search_min", PROP_FLOAT, PROP_TRANSLATION);
1350  RNA_def_property_array(prop, 2);
1351  RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1352  RNA_def_property_float_sdna(prop, NULL, "search_min");
1355  "Search Min",
1356  "Left-bottom corner of search area in normalized coordinates relative "
1357  "to marker position");
1358  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_markerSearch_update");
1359 
1360  prop = RNA_def_property(srna, "search_max", PROP_FLOAT, PROP_TRANSLATION);
1361  RNA_def_property_array(prop, 2);
1362  RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1363  RNA_def_property_float_sdna(prop, NULL, "search_max");
1366  "Search Max",
1367  "Right-bottom corner of search area in normalized coordinates relative "
1368  "to marker position");
1369  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_tracking_markerSearch_update");
1370 
1371  /* is marker keyframed */
1372  prop = RNA_def_property(srna, "is_keyed", PROP_BOOLEAN, PROP_NONE);
1376  prop, "Keyframed", "Whether the position of the marker is keyframed or tracked");
1377 }
1378 
1380 {
1381  StructRNA *srna;
1382  FunctionRNA *func;
1383  PropertyRNA *parm;
1384 
1385  RNA_def_property_srna(cprop, "MovieTrackingMarkers");
1386  srna = RNA_def_struct(brna, "MovieTrackingMarkers", NULL);
1387  RNA_def_struct_sdna(srna, "MovieTrackingTrack");
1389  srna, "Movie Tracking Markers", "Collection of markers for movie tracking track");
1390 
1391  func = RNA_def_function(srna, "find_frame", "rna_trackingMarkers_find_frame");
1392  RNA_def_function_ui_description(func, "Get marker for specified frame");
1393  parm = RNA_def_int(func,
1394  "frame",
1395  1,
1396  MINFRAME,
1397  MAXFRAME,
1398  "Frame",
1399  "Frame number to find marker for",
1400  MINFRAME,
1401  MAXFRAME);
1403  RNA_def_boolean(func,
1404  "exact",
1405  true,
1406  "Exact",
1407  "Get marker at exact frame number rather than get estimated marker");
1408  parm = RNA_def_pointer(func, "marker", "MovieTrackingMarker", "", "Marker for specified frame");
1409  RNA_def_function_return(func, parm);
1410 
1411  func = RNA_def_function(srna, "insert_frame", "rna_trackingMarkers_insert_frame");
1412  RNA_def_function_ui_description(func, "Insert a new marker at the specified frame");
1413  parm = RNA_def_int(func,
1414  "frame",
1415  1,
1416  MINFRAME,
1417  MAXFRAME,
1418  "Frame",
1419  "Frame number to insert marker to",
1420  MINFRAME,
1421  MAXFRAME);
1424  func,
1425  "co",
1426  2,
1427  NULL,
1428  -1.0,
1429  1.0,
1430  "Coordinate",
1431  "Place new marker at the given frame using specified in normalized space coordinates",
1432  -1.0,
1433  1.0);
1435  parm = RNA_def_pointer(func, "marker", "MovieTrackingMarker", "", "Newly created marker");
1436  RNA_def_function_return(func, parm);
1437 
1438  func = RNA_def_function(srna, "delete_frame", "rna_trackingMarkers_delete_frame");
1439  RNA_def_function_ui_description(func, "Delete marker at specified frame");
1440  parm = RNA_def_int(func,
1441  "frame",
1442  1,
1443  MINFRAME,
1444  MAXFRAME,
1445  "Frame",
1446  "Frame number to delete marker from",
1447  MINFRAME,
1448  MAXFRAME);
1450 }
1451 
1453 {
1454  StructRNA *srna;
1455  PropertyRNA *prop;
1456 
1457  rna_def_trackingMarker(brna);
1458 
1459  srna = RNA_def_struct(brna, "MovieTrackingTrack", NULL);
1460  RNA_def_struct_path_func(srna, "rna_trackingTrack_path");
1462  srna, "Movie tracking track data", "Match-moving track data for tracking");
1463  RNA_def_struct_ui_icon(srna, ICON_ANIM_DATA);
1464 
1465  /* name */
1466  prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1467  RNA_def_property_ui_text(prop, "Name", "Unique name of track");
1468  RNA_def_property_string_funcs(prop, NULL, NULL, "rna_trackingTrack_name_set");
1471  RNA_def_struct_name_property(srna, prop);
1472 
1473  /* limit frames */
1474  prop = RNA_def_property(srna, "frames_limit", PROP_INT, PROP_NONE);
1476  RNA_def_property_int_sdna(prop, NULL, "frames_limit");
1478  RNA_def_property_range(prop, 0, SHRT_MAX);
1480  prop, "Frames Limit", "Every tracking cycle, this number of frames are tracked");
1481 
1482  /* pattern match */
1483  prop = RNA_def_property(srna, "pattern_match", PROP_ENUM, PROP_NONE);
1485  RNA_def_property_enum_sdna(prop, NULL, "pattern_match");
1489  prop, "Pattern Match", "Track pattern from given frame when tracking marker to next frame");
1490 
1491  /* margin */
1492  prop = RNA_def_property(srna, "margin", PROP_INT, PROP_PIXEL);
1494  RNA_def_property_int_sdna(prop, NULL, "margin");
1496  RNA_def_property_range(prop, 0, 300);
1498  prop, "Margin", "Distance from image boundary at which marker stops tracking");
1499 
1500  /* tracking motion model */
1501  prop = RNA_def_property(srna, "motion_model", PROP_ENUM, PROP_NONE);
1505  RNA_def_property_ui_text(prop, "Motion Model", "Default motion model to use for tracking");
1506 
1507  /* minimum correlation */
1508  prop = RNA_def_property(srna, "correlation_min", PROP_FLOAT, PROP_NONE);
1510  RNA_def_property_float_sdna(prop, NULL, "minimum_correlation");
1511  RNA_def_property_range(prop, 0.0f, 1.0f);
1512  RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.05, 3);
1514  "Correlation",
1515  "Minimal value of correlation between matched pattern and reference "
1516  "that is still treated as successful tracking");
1517 
1518  /* use_brute */
1519  prop = RNA_def_property(srna, "use_brute", PROP_BOOLEAN, PROP_NONE);
1523  prop, "Prepass", "Use a brute-force translation only pre-track before refinement");
1525 
1526  /* use_brute */
1527  prop = RNA_def_property(srna, "use_mask", PROP_BOOLEAN, PROP_NONE);
1530  prop,
1531  "Use Mask",
1532  "Use a grease pencil data-block as a mask to use only specified areas of pattern "
1533  "when tracking");
1535 
1536  /* use_normalization */
1537  prop = RNA_def_property(srna, "use_normalization", PROP_BOOLEAN, PROP_NONE);
1539  prop, NULL, "algorithm_flag", TRACK_ALGORITHM_FLAG_USE_NORMALIZATION);
1542  prop, "Normalize", "Normalize light intensities while tracking. Slower");
1544 
1545  /* markers */
1546  prop = RNA_def_property(srna, "markers", PROP_COLLECTION, PROP_NONE);
1547  RNA_def_property_struct_type(prop, "MovieTrackingMarker");
1548  RNA_def_property_collection_sdna(prop, NULL, "markers", "markersnr");
1549  RNA_def_property_ui_text(prop, "Markers", "Collection of markers in track");
1550  rna_def_trackingMarkers(brna, prop);
1551 
1552  /* ** channels ** */
1553 
1554  /* use_red_channel */
1555  prop = RNA_def_property(srna, "use_red_channel", PROP_BOOLEAN, PROP_NONE);
1558  RNA_def_property_ui_text(prop, "Use Red Channel", "Use red channel from footage for tracking");
1560 
1561  /* use_green_channel */
1562  prop = RNA_def_property(srna, "use_green_channel", PROP_BOOLEAN, PROP_NONE);
1566  prop, "Use Green Channel", "Use green channel from footage for tracking");
1568 
1569  /* use_blue_channel */
1570  prop = RNA_def_property(srna, "use_blue_channel", PROP_BOOLEAN, PROP_NONE);
1573  RNA_def_property_ui_text(prop, "Use Blue Channel", "Use blue channel from footage for tracking");
1575 
1576  /* preview_grayscale */
1577  prop = RNA_def_property(srna, "use_grayscale_preview", PROP_BOOLEAN, PROP_NONE);
1581  prop, "Grayscale", "Display what the tracking algorithm sees in the preview");
1583 
1584  /* preview_alpha */
1585  prop = RNA_def_property(srna, "use_alpha_preview", PROP_BOOLEAN, PROP_NONE);
1588  RNA_def_property_ui_text(prop, "Alpha", "Apply track's mask on displaying preview");
1590 
1591  /* has bundle */
1592  prop = RNA_def_property(srna, "has_bundle", PROP_BOOLEAN, PROP_NONE);
1595  RNA_def_property_ui_text(prop, "Has Bundle", "True if track has a valid bundle");
1596 
1597  /* bundle position */
1598  prop = RNA_def_property(srna, "bundle", PROP_FLOAT, PROP_TRANSLATION);
1599  RNA_def_property_array(prop, 3);
1600  RNA_def_property_float_sdna(prop, NULL, "bundle_pos");
1602  RNA_def_property_ui_text(prop, "Bundle", "Position of bundle reconstructed from this track");
1603  RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1604 
1605  /* hide */
1606  prop = RNA_def_property(srna, "hide", PROP_BOOLEAN, PROP_NONE);
1609  RNA_def_property_ui_text(prop, "Hide", "Track is hidden");
1611 
1612  /* select */
1613  prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
1615  prop, "rna_trackingTrack_select_get", "rna_trackingTrack_select_set");
1616  RNA_def_property_ui_text(prop, "Select", "Track is selected");
1618 
1619  /* select_anchor */
1620  prop = RNA_def_property(srna, "select_anchor", PROP_BOOLEAN, PROP_NONE);
1621  RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
1622  RNA_def_property_ui_text(prop, "Select Anchor", "Track's anchor point is selected");
1624 
1625  /* select_pattern */
1626  prop = RNA_def_property(srna, "select_pattern", PROP_BOOLEAN, PROP_NONE);
1627  RNA_def_property_boolean_sdna(prop, NULL, "pat_flag", SELECT);
1628  RNA_def_property_ui_text(prop, "Select Pattern", "Track's pattern area is selected");
1630 
1631  /* select_search */
1632  prop = RNA_def_property(srna, "select_search", PROP_BOOLEAN, PROP_NONE);
1633  RNA_def_property_boolean_sdna(prop, NULL, "search_flag", SELECT);
1634  RNA_def_property_ui_text(prop, "Select Search", "Track's search area is selected");
1636 
1637  /* locked */
1638  prop = RNA_def_property(srna, "lock", PROP_BOOLEAN, PROP_NONE);
1641  RNA_def_property_ui_text(prop, "Lock", "Track is locked and all changes to it are disabled");
1643 
1644  /* custom color */
1645  prop = RNA_def_property(srna, "use_custom_color", PROP_BOOLEAN, PROP_NONE);
1648  RNA_def_property_ui_text(prop, "Custom Color", "Use custom color instead of theme-defined");
1650 
1651  /* color */
1652  prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
1653  RNA_def_property_array(prop, 3);
1654  RNA_def_property_range(prop, 0.0f, 1.0f);
1656  prop,
1657  "Color",
1658  "Color of the track in the Movie Clip Editor and the 3D viewport after a solve");
1660 
1661  /* average error */
1662  prop = RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE);
1663  RNA_def_property_float_sdna(prop, NULL, "error");
1665  RNA_def_property_ui_text(prop, "Average Error", "Average error of re-projection");
1666 
1667  /* grease pencil */
1668  prop = RNA_def_property(srna, "grease_pencil", PROP_POINTER, PROP_NONE);
1669  RNA_def_property_pointer_sdna(prop, NULL, "gpd");
1670  RNA_def_property_struct_type(prop, "GreasePencil");
1672  prop, NULL, NULL, NULL, "rna_GPencil_datablocks_annotations_poll");
1674  RNA_def_property_ui_text(prop, "Grease Pencil", "Grease pencil data for this track");
1676 
1677  /* weight */
1678  prop = RNA_def_property(srna, "weight", PROP_FLOAT, PROP_FACTOR);
1679  RNA_def_property_float_sdna(prop, NULL, "weight");
1680  RNA_def_property_range(prop, 0.0f, 1.0f);
1681  RNA_def_property_ui_text(prop, "Weight", "Influence of this track on a final solution");
1682 
1683  /* weight_stab */
1684  prop = RNA_def_property(srna, "weight_stab", PROP_FLOAT, PROP_FACTOR);
1685  RNA_def_property_float_sdna(prop, NULL, "weight_stab");
1686  RNA_def_property_range(prop, 0.0f, 1.0f);
1687  RNA_def_property_ui_text(prop, "Stab Weight", "Influence of this track on 2D stabilization");
1688 
1689  /* offset */
1690  prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_TRANSLATION);
1691  RNA_def_property_array(prop, 2);
1692  RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1693  RNA_def_property_float_sdna(prop, NULL, "offset");
1694  RNA_def_property_ui_text(prop, "Offset", "Offset of track from the parenting point");
1696 }
1697 
1699 {
1700  StructRNA *srna;
1701  PropertyRNA *prop;
1702 
1703  srna = RNA_def_struct(brna, "MovieTrackingPlaneMarker", NULL);
1705  srna, "Movie Tracking Plane Marker Data", "Match-moving plane marker data for tracking");
1706 
1707  /* frame */
1708  prop = RNA_def_property(srna, "frame", PROP_INT, PROP_NONE);
1709  RNA_def_property_int_sdna(prop, NULL, "framenr");
1710  RNA_def_property_ui_text(prop, "Frame", "Frame number marker is keyframed on");
1711  RNA_def_property_int_funcs(prop, NULL, "rna_trackingPlaneMarker_frame_set", NULL);
1713 
1714  /* Corners */
1715  prop = RNA_def_property(srna, "corners", PROP_FLOAT, PROP_MATRIX);
1716  RNA_def_property_float_sdna(prop, NULL, "corners");
1719  RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, RNA_TRANSLATION_PREC_DEFAULT);
1721  "Corners",
1722  "Array of coordinates which represents UI rectangle corners in "
1723  "frame normalized coordinates");
1725 
1726  /* enable */
1727  prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
1729  RNA_def_property_ui_text(prop, "Mode", "Is marker muted for current frame");
1731 }
1732 
1734 {
1735  StructRNA *srna;
1736  FunctionRNA *func;
1737  PropertyRNA *parm;
1738 
1739  RNA_def_property_srna(cprop, "MovieTrackingPlaneMarkers");
1740  srna = RNA_def_struct(brna, "MovieTrackingPlaneMarkers", NULL);
1741  RNA_def_struct_sdna(srna, "MovieTrackingPlaneTrack");
1743  "Movie Tracking Plane Markers",
1744  "Collection of markers for movie tracking plane track");
1745 
1746  func = RNA_def_function(srna, "find_frame", "rna_trackingPlaneMarkers_find_frame");
1747  RNA_def_function_ui_description(func, "Get plane marker for specified frame");
1748  parm = RNA_def_int(func,
1749  "frame",
1750  1,
1751  MINFRAME,
1752  MAXFRAME,
1753  "Frame",
1754  "Frame number to find marker for",
1755  MINFRAME,
1756  MAXFRAME);
1758  RNA_def_boolean(func,
1759  "exact",
1760  true,
1761  "Exact",
1762  "Get plane marker at exact frame number rather than get estimated marker");
1763  parm = RNA_def_pointer(
1764  func, "plane_marker", "MovieTrackingPlaneMarker", "", "Plane marker for specified frame");
1765  RNA_def_function_return(func, parm);
1766 
1767  func = RNA_def_function(srna, "insert_frame", "rna_trackingPlaneMarkers_insert_frame");
1768  RNA_def_function_ui_description(func, "Insert a new plane marker at the specified frame");
1769  parm = RNA_def_int(func,
1770  "frame",
1771  1,
1772  MINFRAME,
1773  MAXFRAME,
1774  "Frame",
1775  "Frame number to insert marker to",
1776  MINFRAME,
1777  MAXFRAME);
1779  parm = RNA_def_pointer(
1780  func, "plane_marker", "MovieTrackingPlaneMarker", "", "Newly created plane marker");
1781  RNA_def_function_return(func, parm);
1782 
1783  func = RNA_def_function(srna, "delete_frame", "rna_trackingPlaneMarkers_delete_frame");
1784  RNA_def_function_ui_description(func, "Delete plane marker at specified frame");
1785  parm = RNA_def_int(func,
1786  "frame",
1787  1,
1788  MINFRAME,
1789  MAXFRAME,
1790  "Frame",
1791  "Frame number to delete plane marker from",
1792  MINFRAME,
1793  MAXFRAME);
1795 }
1796 
1798 {
1799  StructRNA *srna;
1800  PropertyRNA *prop;
1801 
1803 
1804  srna = RNA_def_struct(brna, "MovieTrackingPlaneTrack", NULL);
1805  RNA_def_struct_path_func(srna, "rna_trackingPlaneTrack_path");
1807  srna, "Movie tracking plane track data", "Match-moving plane track data for tracking");
1808  RNA_def_struct_ui_icon(srna, ICON_ANIM_DATA);
1809 
1810  /* name */
1811  prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
1812  RNA_def_property_ui_text(prop, "Name", "Unique name of track");
1813  RNA_def_property_string_funcs(prop, NULL, NULL, "rna_trackingPlaneTrack_name_set");
1816  RNA_def_struct_name_property(srna, prop);
1817 
1818  /* markers */
1819  prop = RNA_def_property(srna, "markers", PROP_COLLECTION, PROP_NONE);
1820  RNA_def_property_struct_type(prop, "MovieTrackingPlaneMarker");
1821  RNA_def_property_collection_sdna(prop, NULL, "markers", "markersnr");
1822  RNA_def_property_ui_text(prop, "Markers", "Collection of markers in track");
1823  rna_def_trackingPlaneMarkers(brna, prop);
1824 
1825  /* select */
1826  prop = RNA_def_property(srna, "select", PROP_BOOLEAN, PROP_NONE);
1827  RNA_def_property_boolean_sdna(prop, NULL, "flag", SELECT);
1828  RNA_def_property_ui_text(prop, "Select", "Plane track is selected");
1830 
1831  /* auto keyframing */
1832  prop = RNA_def_property(srna, "use_auto_keying", PROP_BOOLEAN, PROP_NONE);
1836  prop, "Auto Keyframe", "Automatic keyframe insertion when moving plane corners");
1837  RNA_def_property_ui_icon(prop, ICON_REC, 0);
1838 
1839  /* image */
1840  prop = RNA_def_property(srna, "image", PROP_POINTER, PROP_NONE);
1841  RNA_def_property_struct_type(prop, "Image");
1844  prop, "Image", "Image displayed in the track during editing in clip editor");
1846 
1847  /* image opacity */
1848  prop = RNA_def_property(srna, "image_opacity", PROP_FLOAT, PROP_FACTOR);
1850  RNA_def_property_range(prop, 0.0, 1.0);
1851  RNA_def_property_ui_text(prop, "Image Opacity", "Opacity of the image");
1853 }
1854 
1856 {
1857  StructRNA *srna;
1858  PropertyRNA *prop;
1859 
1860  static const EnumPropertyItem filter_items[] = {
1862  "NEAREST",
1863  0,
1864  "Nearest",
1865  "No interpolation, use nearest neighbor pixel"},
1867  "BILINEAR",
1868  0,
1869  "Bilinear",
1870  "Simple interpolation between adjacent pixels"},
1871  {TRACKING_FILTER_BICUBIC, "BICUBIC", 0, "Bicubic", "High quality pixel interpolation"},
1872  {0, NULL, 0, NULL, NULL},
1873  };
1874 
1875  srna = RNA_def_struct(brna, "MovieTrackingStabilization", NULL);
1876  RNA_def_struct_path_func(srna, "rna_trackingStabilization_path");
1878  srna, "Movie tracking stabilization data", "2D stabilization based on tracking markers");
1879 
1880  /* 2d stabilization */
1881  prop = RNA_def_property(srna, "use_2d_stabilization", PROP_BOOLEAN, PROP_NONE);
1884  RNA_def_property_ui_text(prop, "Use 2D Stabilization", "Use 2D stabilization for footage");
1885  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1886 
1887  /* use_stabilize_rotation */
1888  prop = RNA_def_property(srna, "use_stabilize_rotation", PROP_BOOLEAN, PROP_NONE);
1892  prop, "Stabilize Rotation", "Stabilize detected rotation around center of frame");
1893  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1894 
1895  /* use_stabilize_scale */
1896  prop = RNA_def_property(srna, "use_stabilize_scale", PROP_BOOLEAN, PROP_NONE);
1900  prop, "Stabilize Scale", "Compensate any scale changes relative to center of rotation");
1901  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1902 
1903  /* tracks */
1904  prop = RNA_def_property(srna, "tracks", PROP_COLLECTION, PROP_NONE);
1906  "rna_tracking_stabTracks_begin",
1907  "rna_iterator_listbase_next",
1908  "rna_iterator_listbase_end",
1909  "rna_iterator_listbase_get",
1910  NULL,
1911  NULL,
1912  NULL,
1913  NULL);
1914  RNA_def_property_struct_type(prop, "MovieTrackingTrack");
1916  prop, "Translation Tracks", "Collection of tracks used for 2D stabilization (translation)");
1917  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1918 
1919  /* active track index */
1920  prop = RNA_def_property(srna, "active_track_index", PROP_INT, PROP_NONE);
1921  RNA_def_property_int_sdna(prop, NULL, "act_track");
1924  "rna_tracking_stabTracks_active_index_get",
1925  "rna_tracking_stabTracks_active_index_set",
1926  "rna_tracking_stabTracks_active_index_range");
1928  "Active Track Index",
1929  "Index of active track in translation stabilization tracks list");
1930 
1931  /* tracks used for rotation stabilization */
1932  prop = RNA_def_property(srna, "rotation_tracks", PROP_COLLECTION, PROP_NONE);
1934  "rna_tracking_stabRotTracks_begin",
1935  "rna_iterator_listbase_next",
1936  "rna_iterator_listbase_end",
1937  "rna_iterator_listbase_get",
1938  NULL,
1939  NULL,
1940  NULL,
1941  NULL);
1942  RNA_def_property_struct_type(prop, "MovieTrackingTrack");
1944  prop, "Rotation Tracks", "Collection of tracks used for 2D stabilization (translation)");
1945  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1946 
1947  /* active rotation track index */
1948  prop = RNA_def_property(srna, "active_rotation_track_index", PROP_INT, PROP_NONE);
1949  RNA_def_property_int_sdna(prop, NULL, "act_rot_track");
1952  "rna_tracking_stabRotTracks_active_index_get",
1953  "rna_tracking_stabRotTracks_active_index_set",
1954  "rna_tracking_stabRotTracks_active_index_range");
1956  "Active Rotation Track Index",
1957  "Index of active track in rotation stabilization tracks list");
1958 
1959  /* anchor frame */
1960  prop = RNA_def_property(srna, "anchor_frame", PROP_INT, PROP_NONE);
1961  RNA_def_property_int_sdna(prop, NULL, "anchor_frame");
1965  "Anchor Frame",
1966  "Reference point to anchor stabilization "
1967  "(other frames will be adjusted relative to this frame's position)");
1968  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
1969 
1970  /* target position */
1971  prop = RNA_def_property(srna, "target_position", PROP_FLOAT, PROP_TRANSLATION);
1972  RNA_def_property_array(prop, 2);
1974  prop, -FLT_MAX, FLT_MAX, 1, 3); /* increment in steps of 0.01 and show 3 digit after point */
1975  RNA_def_property_float_sdna(prop, NULL, "target_pos");
1977  "Expected Position",
1978  "Known relative offset of original shot, will be subtracted "
1979  "(e.g. for panning shot, can be animated)");
1981 
1982  /* target rotation */
1983  prop = RNA_def_property(srna, "target_rotation", PROP_FLOAT, PROP_ANGLE);
1984  RNA_def_property_float_sdna(prop, NULL, "target_rot");
1985  RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
1986  RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 10.0f, 3);
1988  prop,
1989  "Expected Rotation",
1990  "Rotation present on original shot, will be compensated (e.g. for deliberate tilting)");
1992 
1993  /* target scale */
1994  prop = RNA_def_property(srna, "target_scale", PROP_FLOAT, PROP_FACTOR);
1995  RNA_def_property_float_sdna(prop, NULL, "scale");
1996  RNA_def_property_range(prop, FLT_EPSILON, FLT_MAX);
1998  prop, 0.01f, 10.0f, 0.001f, 3); /* increment in steps of 0.001. Show 3 digit after point */
2000  "Expected Scale",
2001  "Explicitly scale resulting frame to compensate zoom of original shot");
2002  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2003 
2004  /* Auto-scale. */
2005  prop = RNA_def_property(srna, "use_autoscale", PROP_BOOLEAN, PROP_NONE);
2009  prop, "Autoscale", "Automatically scale footage to cover unfilled areas when stabilizing");
2010  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2011 
2012  /* max scale */
2013  prop = RNA_def_property(srna, "scale_max", PROP_FLOAT, PROP_FACTOR);
2014  RNA_def_property_float_sdna(prop, NULL, "maxscale");
2015  RNA_def_property_range(prop, 0.0f, 10.0f);
2016  RNA_def_property_ui_text(prop, "Maximal Scale", "Limit the amount of automatic scaling");
2017  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2018 
2019  /* influence_location */
2020  prop = RNA_def_property(srna, "influence_location", PROP_FLOAT, PROP_FACTOR);
2021  RNA_def_property_float_sdna(prop, NULL, "locinf");
2022  RNA_def_property_range(prop, 0.0f, 1.0f);
2024  prop, "Location Influence", "Influence of stabilization algorithm on footage location");
2025  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2026 
2027  /* influence_scale */
2028  prop = RNA_def_property(srna, "influence_scale", PROP_FLOAT, PROP_FACTOR);
2029  RNA_def_property_float_sdna(prop, NULL, "scaleinf");
2030  RNA_def_property_range(prop, 0.0f, 1.0f);
2032  prop, "Scale Influence", "Influence of stabilization algorithm on footage scale");
2033  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2034 
2035  /* influence_rotation */
2036  prop = RNA_def_property(srna, "influence_rotation", PROP_FLOAT, PROP_FACTOR);
2037  RNA_def_property_float_sdna(prop, NULL, "rotinf");
2038  RNA_def_property_range(prop, 0.0f, 1.0f);
2040  prop, "Rotation Influence", "Influence of stabilization algorithm on footage rotation");
2041  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2042 
2043  /* filter */
2044  prop = RNA_def_property(srna, "filter_type", PROP_ENUM, PROP_NONE);
2045  RNA_def_property_enum_sdna(prop, NULL, "filter");
2046  RNA_def_property_enum_items(prop, filter_items);
2048  prop,
2049  "Interpolate",
2050  "Interpolation to use for sub-pixel shifts and rotations due to stabilization");
2051  RNA_def_property_update(prop, NC_MOVIECLIP | ND_DISPLAY, "rna_tracking_flushUpdate");
2052 
2053  /* UI display : show participating tracks */
2054  prop = RNA_def_property(srna, "show_tracks_expanded", PROP_BOOLEAN, PROP_NONE);
2058  prop, "Show Tracks", "Show UI list of tracks participating in stabilization");
2059  RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
2060 }
2061 
2063 {
2064  StructRNA *srna;
2065  PropertyRNA *prop;
2066 
2067  srna = RNA_def_struct(brna, "MovieReconstructedCamera", NULL);
2069  "Movie tracking reconstructed camera data",
2070  "Match-moving reconstructed camera data from tracker");
2071 
2072  /* frame */
2073  prop = RNA_def_property(srna, "frame", PROP_INT, PROP_NONE);
2075  RNA_def_property_int_sdna(prop, NULL, "framenr");
2076  RNA_def_property_ui_text(prop, "Frame", "Frame number marker is keyframed on");
2077 
2078  /* matrix */
2079  prop = RNA_def_property(srna, "matrix", PROP_FLOAT, PROP_MATRIX);
2080  RNA_def_property_float_sdna(prop, NULL, "mat");
2083  RNA_def_property_ui_text(prop, "Matrix", "Worldspace transformation matrix");
2084 
2085  /* average_error */
2086  prop = RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE);
2087  RNA_def_property_float_sdna(prop, NULL, "error");
2089  RNA_def_property_ui_text(prop, "Average Error", "Average error of reconstruction");
2090 }
2091 
2093 {
2094  StructRNA *srna;
2095  FunctionRNA *func;
2096  PropertyRNA *parm;
2097 
2098  srna = RNA_def_struct(brna, "MovieTrackingReconstructedCameras", NULL);
2099  RNA_def_struct_sdna(srna, "MovieTrackingReconstruction");
2100  RNA_def_struct_ui_text(srna, "Reconstructed Cameras", "Collection of solved cameras");
2101 
2102  func = RNA_def_function(srna, "find_frame", "rna_trackingCameras_find_frame");
2104  RNA_def_function_ui_description(func, "Find a reconstructed camera for a give frame number");
2105  RNA_def_int(func,
2106  "frame",
2107  1,
2108  MINFRAME,
2109  MAXFRAME,
2110  "Frame",
2111  "Frame number to find camera for",
2112  MINFRAME,
2113  MAXFRAME);
2114  parm = RNA_def_pointer(
2115  func, "camera", "MovieReconstructedCamera", "", "Camera for a given frame");
2116  RNA_def_function_return(func, parm);
2117 
2118  func = RNA_def_function(srna, "matrix_from_frame", "rna_trackingCameras_matrix_from_frame");
2120  RNA_def_function_ui_description(func, "Return interpolated camera matrix for a given frame");
2121  RNA_def_int(func,
2122  "frame",
2123  1,
2124  MINFRAME,
2125  MAXFRAME,
2126  "Frame",
2127  "Frame number to find camera for",
2128  MINFRAME,
2129  MAXFRAME);
2130  parm = RNA_def_float_matrix(func,
2131  "matrix",
2132  4,
2133  4,
2134  NULL,
2135  -FLT_MAX,
2136  FLT_MAX,
2137  "Matrix",
2138  "Interpolated camera matrix for a given frame",
2139  -FLT_MAX,
2140  FLT_MAX);
2141  RNA_def_parameter_flags(parm, PROP_THICK_WRAP, 0); /* needed for string return value */
2142  RNA_def_function_output(func, parm);
2143 }
2144 
2146 {
2147  StructRNA *srna;
2148  PropertyRNA *prop;
2149 
2151 
2152  srna = RNA_def_struct(brna, "MovieTrackingReconstruction", NULL);
2154  srna, "Movie tracking reconstruction data", "Match-moving reconstruction data from tracker");
2155 
2156  /* is_valid */
2157  prop = RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
2161  prop, "Reconstructed", "Is tracking data contains valid reconstruction information");
2162 
2163  /* average_error */
2164  prop = RNA_def_property(srna, "average_error", PROP_FLOAT, PROP_NONE);
2165  RNA_def_property_float_sdna(prop, NULL, "error");
2167  RNA_def_property_ui_text(prop, "Average Error", "Average error of reconstruction");
2168 
2169  /* cameras */
2170  prop = RNA_def_property(srna, "cameras", PROP_COLLECTION, PROP_NONE);
2171  RNA_def_property_struct_type(prop, "MovieReconstructedCamera");
2172  RNA_def_property_collection_sdna(prop, NULL, "cameras", "camnr");
2173  RNA_def_property_ui_text(prop, "Cameras", "Collection of solved cameras");
2174  RNA_def_property_srna(prop, "MovieTrackingReconstructedCameras");
2175 }
2176 
2178 {
2179  StructRNA *srna;
2180  FunctionRNA *func;
2181  PropertyRNA *prop;
2182  PropertyRNA *parm;
2183 
2184  srna = RNA_def_struct(brna, "MovieTrackingTracks", NULL);
2185  RNA_def_struct_sdna(srna, "MovieTracking");
2186  RNA_def_struct_ui_text(srna, "Movie Tracks", "Collection of movie tracking tracks");
2187 
2188  func = RNA_def_function(srna, "new", "rna_trackingTracks_new");
2190  RNA_def_function_ui_description(func, "Create new motion track in this movie clip");
2191  RNA_def_string(func, "name", NULL, 0, "", "Name of new track");
2192  RNA_def_int(func,
2193  "frame",
2194  1,
2195  MINFRAME,
2196  MAXFRAME,
2197  "Frame",
2198  "Frame number to add track on",
2199  MINFRAME,
2200  MAXFRAME);
2201  parm = RNA_def_pointer(func, "track", "MovieTrackingTrack", "", "Newly created track");
2202  RNA_def_function_return(func, parm);
2203 
2204  /* active track */
2205  prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2206  RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2208  prop, "rna_tracking_active_track_get", "rna_tracking_active_track_set", NULL, NULL);
2210  RNA_def_property_ui_text(prop, "Active Track", "Active track in this tracking data object");
2211 }
2212 
2214 {
2215  StructRNA *srna;
2216  PropertyRNA *prop;
2217 
2218  srna = RNA_def_struct(brna, "MovieTrackingPlaneTracks", NULL);
2219  RNA_def_struct_sdna(srna, "MovieTracking");
2220  RNA_def_struct_ui_text(srna, "Movie Plane Tracks", "Collection of movie tracking plane tracks");
2221 
2222  /* TODO(sergey): Add API to create new plane tracks */
2223 
2224  /* active plane track */
2225  prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2226  RNA_def_property_struct_type(prop, "MovieTrackingPlaneTrack");
2228  "rna_tracking_active_plane_track_get",
2229  "rna_tracking_active_plane_track_set",
2230  NULL,
2231  NULL);
2234  prop, "Active Plane Track", "Active plane track in this tracking data object");
2235 }
2236 
2238 {
2239  StructRNA *srna;
2240  FunctionRNA *func;
2241  PropertyRNA *prop;
2242  PropertyRNA *parm;
2243 
2244  srna = RNA_def_struct(brna, "MovieTrackingObjectTracks", NULL);
2245  RNA_def_struct_sdna(srna, "MovieTrackingObject");
2246  RNA_def_struct_ui_text(srna, "Movie Tracks", "Collection of movie tracking tracks");
2247 
2248  func = RNA_def_function(srna, "new", "rna_trackingObject_tracks_new");
2250  RNA_def_function_ui_description(func, "create new motion track in this movie clip");
2251  RNA_def_string(func, "name", NULL, 0, "", "Name of new track");
2252  RNA_def_int(func,
2253  "frame",
2254  1,
2255  MINFRAME,
2256  MAXFRAME,
2257  "Frame",
2258  "Frame number to add tracks on",
2259  MINFRAME,
2260  MAXFRAME);
2261  parm = RNA_def_pointer(func, "track", "MovieTrackingTrack", "", "Newly created track");
2262  RNA_def_function_return(func, parm);
2263 
2264  /* active track */
2265  prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2266  RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2268  prop, "rna_tracking_active_track_get", "rna_tracking_active_track_set", NULL, NULL);
2270  RNA_def_property_ui_text(prop, "Active Track", "Active track in this tracking data object");
2271 }
2272 
2274 {
2275  StructRNA *srna;
2276  PropertyRNA *prop;
2277 
2278  srna = RNA_def_struct(brna, "MovieTrackingObjectPlaneTracks", NULL);
2279  RNA_def_struct_sdna(srna, "MovieTrackingObject");
2280  RNA_def_struct_ui_text(srna, "Plane Tracks", "Collection of tracking plane tracks");
2281 
2282  /* active track */
2283  prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2284  RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2286  "rna_tracking_active_plane_track_get",
2287  "rna_tracking_active_plane_track_set",
2288  NULL,
2289  NULL);
2291  RNA_def_property_ui_text(prop, "Active Track", "Active track in this tracking data object");
2292 }
2293 
2295 {
2296  StructRNA *srna;
2297  PropertyRNA *prop;
2298 
2299  srna = RNA_def_struct(brna, "MovieTrackingObject", NULL);
2301  srna, "Movie tracking object data", "Match-moving object tracking and reconstruction data");
2302 
2303  /* name */
2304  prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
2305  RNA_def_property_ui_text(prop, "Name", "Unique name of object");
2306  RNA_def_property_string_funcs(prop, NULL, NULL, "rna_trackingObject_name_set");
2309  RNA_def_struct_name_property(srna, prop);
2310 
2311  /* is_camera */
2312  prop = RNA_def_property(srna, "is_camera", PROP_BOOLEAN, PROP_NONE);
2315  RNA_def_property_ui_text(prop, "Camera", "Object is used for camera tracking");
2317 
2318  /* tracks */
2319  prop = RNA_def_property(srna, "tracks", PROP_COLLECTION, PROP_NONE);
2321  "rna_trackingObject_tracks_begin",
2322  "rna_iterator_listbase_next",
2323  "rna_iterator_listbase_end",
2324  "rna_iterator_listbase_get",
2325  NULL,
2326  NULL,
2327  NULL,
2328  NULL);
2329  RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2330  RNA_def_property_ui_text(prop, "Tracks", "Collection of tracks in this tracking data object");
2331  RNA_def_property_srna(prop, "MovieTrackingObjectTracks");
2332 
2333  /* plane tracks */
2334  prop = RNA_def_property(srna, "plane_tracks", PROP_COLLECTION, PROP_NONE);
2336  "rna_trackingObject_plane_tracks_begin",
2337  "rna_iterator_listbase_next",
2338  "rna_iterator_listbase_end",
2339  "rna_iterator_listbase_get",
2340  NULL,
2341  NULL,
2342  NULL,
2343  NULL);
2344  RNA_def_property_struct_type(prop, "MovieTrackingPlaneTrack");
2346  prop, "Plane Tracks", "Collection of plane tracks in this tracking data object");
2347  RNA_def_property_srna(prop, "MovieTrackingObjectPlaneTracks");
2348 
2349  /* reconstruction */
2350  prop = RNA_def_property(srna, "reconstruction", PROP_POINTER, PROP_NONE);
2351  RNA_def_property_struct_type(prop, "MovieTrackingReconstruction");
2352  RNA_def_property_pointer_funcs(prop, "rna_trackingObject_reconstruction_get", NULL, NULL, NULL);
2353 
2354  /* scale */
2355  prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
2357  RNA_def_property_float_sdna(prop, NULL, "scale");
2358  RNA_def_property_range(prop, 0.0001f, 10000.0f);
2359  RNA_def_property_ui_range(prop, 0.0001f, 10000.0, 1, 4);
2360  RNA_def_property_float_default(prop, 1.0f);
2361  RNA_def_property_ui_text(prop, "Scale", "Scale of object solution in camera space");
2362  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingObject_flushUpdate");
2363 
2364  /* keyframe_a */
2365  prop = RNA_def_property(srna, "keyframe_a", PROP_INT, PROP_NONE);
2367  RNA_def_property_int_sdna(prop, NULL, "keyframe1");
2369  prop, "Keyframe A", "First keyframe used for reconstruction initialization");
2371 
2372  /* keyframe_b */
2373  prop = RNA_def_property(srna, "keyframe_b", PROP_INT, PROP_NONE);
2375  RNA_def_property_int_sdna(prop, NULL, "keyframe2");
2377  prop, "Keyframe B", "Second keyframe used for reconstruction initialization");
2379 }
2380 
2382 {
2383  StructRNA *srna;
2384  PropertyRNA *prop;
2385 
2386  FunctionRNA *func;
2387  PropertyRNA *parm;
2388 
2389  RNA_def_property_srna(cprop, "MovieTrackingObjects");
2390  srna = RNA_def_struct(brna, "MovieTrackingObjects", NULL);
2391  RNA_def_struct_sdna(srna, "MovieTracking");
2392  RNA_def_struct_ui_text(srna, "Movie Objects", "Collection of movie tracking objects");
2393 
2394  func = RNA_def_function(srna, "new", "rna_trackingObject_new");
2395  RNA_def_function_ui_description(func, "Add tracking object to this movie clip");
2396  parm = RNA_def_string(func, "name", NULL, 0, "", "Name of new object");
2398  parm = RNA_def_pointer(func, "object", "MovieTrackingObject", "", "New motion tracking object");
2399  RNA_def_function_return(func, parm);
2400 
2401  func = RNA_def_function(srna, "remove", "rna_trackingObject_remove");
2403  RNA_def_function_ui_description(func, "Remove tracking object from this movie clip");
2404  parm = RNA_def_pointer(
2405  func, "object", "MovieTrackingObject", "", "Motion tracking object to be removed");
2408 
2409  /* active object */
2410  prop = RNA_def_property(srna, "active", PROP_POINTER, PROP_NONE);
2411  RNA_def_property_struct_type(prop, "MovieTrackingObject");
2413  prop, "rna_tracking_active_object_get", "rna_tracking_active_object_set", NULL, NULL);
2415  RNA_def_property_ui_text(prop, "Active Object", "Active object in this tracking data object");
2416 }
2417 
2419 {
2420  StructRNA *srna;
2421  PropertyRNA *prop;
2422 
2423  static const EnumPropertyItem sort_items[] = {
2424  {TRACKING_DOPE_SORT_NAME, "NAME", 0, "Name", "Sort channels by their names"},
2426  "LONGEST",
2427  0,
2428  "Longest",
2429  "Sort channels by longest tracked segment"},
2431  "TOTAL",
2432  0,
2433  "Total",
2434  "Sort channels by overall amount of tracked segments"},
2436  "AVERAGE_ERROR",
2437  0,
2438  "Average Error",
2439  "Sort channels by average reprojection error of tracks after solve"},
2440  {0, NULL, 0, NULL, NULL},
2441  };
2442 
2443  srna = RNA_def_struct(brna, "MovieTrackingDopesheet", NULL);
2444  RNA_def_struct_ui_text(srna, "Movie Tracking Dopesheet", "Match-moving dopesheet data");
2445 
2446  /* dopesheet sort */
2447  prop = RNA_def_property(srna, "sort_method", PROP_ENUM, PROP_NONE);
2448  RNA_def_property_enum_sdna(prop, NULL, "sort_method");
2449  RNA_def_property_enum_items(prop, sort_items);
2451  prop, "Dopesheet Sort Field", "Method to be used to sort channels in dopesheet view");
2452  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2453 
2454  /* invert_dopesheet_sort */
2455  prop = RNA_def_property(srna, "use_invert_sort", PROP_BOOLEAN, PROP_NONE);
2458  prop, "Invert Dopesheet Sort", "Invert sort order of dopesheet channels");
2459  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2460 
2461  /* show_only_selected */
2462  prop = RNA_def_property(srna, "show_only_selected", PROP_BOOLEAN, PROP_NONE);
2465  prop, "Only Show Selected", "Only include channels relating to selected objects and data");
2466  RNA_def_property_ui_icon(prop, ICON_RESTRICT_SELECT_OFF, 0);
2467  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2468 
2469  /* show_hidden */
2470  prop = RNA_def_property(srna, "show_hidden", PROP_BOOLEAN, PROP_NONE);
2473  prop, "Display Hidden", "Include channels from objects/bone that aren't visible");
2474  RNA_def_property_ui_icon(prop, ICON_GHOST_ENABLED, 0);
2475  RNA_def_property_update(prop, NC_MOVIECLIP | NA_EDITED, "rna_trackingDopesheet_tagUpdate");
2476 }
2477 
2478 static void rna_def_tracking(BlenderRNA *brna)
2479 {
2480  StructRNA *srna;
2481  PropertyRNA *prop;
2482 
2484  rna_def_trackingCamera(brna);
2485  rna_def_trackingTrack(brna);
2487  rna_def_trackingTracks(brna);
2494  rna_def_trackingObject(brna);
2496 
2497  srna = RNA_def_struct(brna, "MovieTracking", NULL);
2498  RNA_def_struct_path_func(srna, "rna_tracking_path");
2499  RNA_def_struct_ui_text(srna, "Movie tracking data", "Match-moving data for tracking");
2500 
2501  /* settings */
2502  prop = RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
2503  RNA_def_property_struct_type(prop, "MovieTrackingSettings");
2504 
2505  /* camera properties */
2506  prop = RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
2507  RNA_def_property_struct_type(prop, "MovieTrackingCamera");
2508 
2509  /* tracks */
2510  prop = RNA_def_property(srna, "tracks", PROP_COLLECTION, PROP_NONE);
2512  "rna_trackingTracks_begin",
2513  "rna_iterator_listbase_next",
2514  "rna_iterator_listbase_end",
2515  "rna_iterator_listbase_get",
2516  NULL,
2517  NULL,
2518  NULL,
2519  NULL);
2520  RNA_def_property_struct_type(prop, "MovieTrackingTrack");
2521  RNA_def_property_ui_text(prop, "Tracks", "Collection of tracks in this tracking data object");
2522  RNA_def_property_srna(prop, "MovieTrackingTracks");
2523 
2524  /* tracks */
2525  prop = RNA_def_property(srna, "plane_tracks", PROP_COLLECTION, PROP_NONE);
2527  "rna_trackingPlaneTracks_begin",
2528  "rna_iterator_listbase_next",
2529  "rna_iterator_listbase_end",
2530  "rna_iterator_listbase_get",
2531  NULL,
2532  NULL,
2533  NULL,
2534  NULL);
2535  RNA_def_property_struct_type(prop, "MovieTrackingPlaneTrack");
2537  prop, "Plane Tracks", "Collection of plane tracks in this tracking data object");
2538  RNA_def_property_srna(prop, "MovieTrackingPlaneTracks");
2539 
2540  /* stabilization */
2541  prop = RNA_def_property(srna, "stabilization", PROP_POINTER, PROP_NONE);
2542  RNA_def_property_struct_type(prop, "MovieTrackingStabilization");
2543 
2544  /* reconstruction */
2545  prop = RNA_def_property(srna, "reconstruction", PROP_POINTER, PROP_NONE);
2546  RNA_def_property_struct_type(prop, "MovieTrackingReconstruction");
2547 
2548  /* objects */
2549  prop = RNA_def_property(srna, "objects", PROP_COLLECTION, PROP_NONE);
2551  "rna_trackingObjects_begin",
2552  "rna_iterator_listbase_next",
2553  "rna_iterator_listbase_end",
2554  "rna_iterator_listbase_get",
2555  NULL,
2556  NULL,
2557  NULL,
2558  NULL);
2559  RNA_def_property_struct_type(prop, "MovieTrackingObject");
2560  RNA_def_property_ui_text(prop, "Objects", "Collection of objects in this tracking data object");
2561  rna_def_trackingObjects(brna, prop);
2562 
2563  /* active object index */
2564  prop = RNA_def_property(srna, "active_object_index", PROP_INT, PROP_NONE);
2565  RNA_def_property_int_sdna(prop, NULL, "objectnr");
2568  "rna_tracking_active_object_index_get",
2569  "rna_tracking_active_object_index_set",
2570  "rna_tracking_active_object_index_range");
2571  RNA_def_property_ui_text(prop, "Active Object Index", "Index of active object");
2573 
2574  /* dopesheet */
2575  prop = RNA_def_property(srna, "dopesheet", PROP_POINTER, PROP_NONE);
2576  RNA_def_property_struct_type(prop, "MovieTrackingDopesheet");
2577 }
2578 
2580 {
2581  rna_def_tracking(brna);
2582 }
2583 
2584 #endif
typedef float(TangentPoint)[2]
struct AnimData * BKE_animdata_from_id(struct ID *id)
Definition: anim_data.c:96
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)
Definition: anim_data.c:1079
void BKE_movieclip_get_size(struct MovieClip *clip, struct MovieClipUser *user, int *width, int *height)
Definition: movieclip.c:1540
bool nodeUpdateID(struct bNodeTree *ntree, struct ID *id)
Definition: node.cc:4346
void BKE_reportf(ReportList *reports, ReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
struct MovieTrackingPlaneTrack * BKE_tracking_plane_track_get_active(struct MovieTracking *tracking)
Definition: tracking.c:1821
void BKE_tracking_plane_marker_delete(struct MovieTrackingPlaneTrack *plane_track, int framenr)
Definition: tracking.c:1960
struct ListBase * BKE_tracking_find_tracks_list_for_track(struct MovieTracking *tracking, const struct MovieTrackingTrack *track)
bool BKE_tracking_object_delete(struct MovieTracking *tracking, struct MovieTrackingObject *object)
Definition: tracking.c:2133
struct ListBase * BKE_tracking_get_active_tracks(struct MovieTracking *tracking)
Definition: tracking.c:365
struct MovieTrackingPlaneMarker * BKE_tracking_plane_marker_insert(struct MovieTrackingPlaneTrack *plane_track, struct MovieTrackingPlaneMarker *plane_marker)
Definition: tracking.c:1919
void BKE_tracking_camera_get_reconstructed_interpolate(struct MovieTracking *tracking, struct MovieTrackingObject *object, float framenr, float mat[4][4])
Definition: tracking.c:2374
struct MovieTrackingMarker * BKE_tracking_marker_insert(struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker)
Definition: tracking.c:1383
struct MovieTrackingObject * BKE_tracking_object_add(struct MovieTracking *tracking, const char *name)
Definition: tracking.c:2104
struct MovieReconstructedCamera * BKE_tracking_camera_get_reconstructed(struct MovieTracking *tracking, struct MovieTrackingObject *object, int framenr)
Definition: tracking.c:2357
void BKE_tracking_get_rna_path_for_track(const struct MovieTracking *tracking, const struct MovieTrackingTrack *track, char *rna_path, size_t rna_path_len)
Definition: tracking.c:3408
#define TRACK_SELECTED(track)
Definition: BKE_tracking.h:489
void BKE_tracking_plane_track_unique_name(struct ListBase *plane_tracks_base, struct MovieTrackingPlaneTrack *plane_track)
Definition: tracking.c:1781
#define CLAMP_SEARCH_DIM
Definition: BKE_tracking.h:516
void BKE_tracking_get_rna_path_prefix_for_track(const struct MovieTracking *tracking, const struct MovieTrackingTrack *track, char *rna_path, size_t rna_path_len)
Definition: tracking.c:3430
void BKE_tracking_track_unique_name(struct ListBase *tracksbase, struct MovieTrackingTrack *track)
Definition: tracking.c:646
void BKE_tracking_object_unique_name(struct MovieTracking *tracking, struct MovieTrackingObject *object)
Definition: tracking.c:2173
struct MovieTrackingPlaneMarker * BKE_tracking_plane_marker_get(struct MovieTrackingPlaneTrack *plane_track, int framenr)
Definition: tracking.c:1994
struct MovieTrackingTrack * BKE_tracking_track_get_active(struct MovieTracking *tracking)
Definition: tracking.c:1170
void BKE_tracking_dopesheet_tag_update(struct MovieTracking *tracking)
Definition: tracking.c:3321
struct MovieTrackingMarker * BKE_tracking_marker_get_exact(struct MovieTrackingTrack *track, int framenr)
Definition: tracking.c:1556
struct ListBase * BKE_tracking_get_active_plane_tracks(struct MovieTracking *tracking)
Definition: tracking.c:377
struct MovieTrackingPlaneMarker * BKE_tracking_plane_marker_get_exact(struct MovieTrackingPlaneTrack *plane_track, int framenr)
Definition: tracking.c:2045
struct ListBase * BKE_tracking_find_tracks_list_for_plane_track(struct MovieTracking *tracking, const struct MovieTrackingPlaneTrack *plane_track)
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)
Definition: tracking.c:3446
void BKE_tracking_distortion_free(struct MovieDistortion *distortion)
Definition: tracking.c:2553
struct ListBase * BKE_tracking_object_get_tracks(struct MovieTracking *tracking, struct MovieTrackingObject *object)
Definition: tracking.c:2218
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_len)
Definition: tracking.c:3468
void BKE_tracking_marker_pattern_minmax(const struct MovieTrackingMarker *marker, float min[2], float max[2])
struct MovieTrackingTrack * BKE_tracking_track_add(struct MovieTracking *tracking, struct ListBase *tracksbase, float x, float y, int framenr, int width, int height)
Definition: tracking.c:580
struct ListBase * BKE_tracking_object_get_plane_tracks(struct MovieTracking *tracking, struct MovieTrackingObject *object)
Definition: tracking.c:2227
struct MovieTrackingMarker * BKE_tracking_marker_get(struct MovieTrackingTrack *track, int framenr)
Definition: tracking.c:1523
#define CLAMP_PAT_DIM
Definition: BKE_tracking.h:514
void BKE_tracking_marker_clamp(struct MovieTrackingMarker *marker, int event)
Definition: tracking.c:1455
void BKE_tracking_marker_delete(struct MovieTrackingTrack *track, int framenr)
Definition: tracking.c:1428
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void * BLI_findlink(const struct ListBase *listbase, int number) 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])
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
Definition: string.c:70
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
Definition: string.c:108
#define UNUSED(x)
void DEG_id_tag_update(struct ID *id, int flag)
#define MAX_ID_NAME
Definition: DNA_ID.h:269
#define MAX_NAME
Definition: DNA_defs.h:62
Object is a sort of wrapper for general info.
#define MINFRAME
#define MAXFRAME
@ 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
@ REFINE_PRINCIPAL_POINT
@ REFINE_TANGENTIAL_DISTORTION
@ REFINE_RADIAL_DISTORTION
@ REFINE_FOCAL_LENGTH
@ TRACKING_OBJECT_CAMERA
@ TRACKING_MOTION_TRIPOD
@ TRACKING_DOPE_SORT_AVERAGE_ERROR
@ TRACKING_DOPE_SORT_LONGEST
@ TRACKING_DOPE_SORT_NAME
@ TRACKING_DOPE_SORT_TOTAL
@ TRACK_ALGORITHM_FLAG_USE_NORMALIZATION
@ TRACK_ALGORITHM_FLAG_USE_BRUTE
@ TRACK_ALGORITHM_FLAG_USE_MASK
@ PLANE_MARKER_DISABLED
@ TRACKING_USE_KEYFRAME_SELECTION
@ TRACKING_SPEED_DOUBLE
@ TRACKING_SPEED_HALF
@ TRACKING_SPEED_QUARTER
@ TRACKING_SPEED_REALTIME
@ 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_RECONSTRUCTED
@ CAMERA_UNITS_MM
@ CAMERA_UNITS_PX
@ PLANE_TRACK_AUTOKEY
@ TRACKING_DOPE_SELECTED_ONLY
@ TRACKING_DOPE_SORT_INVERSE
@ TRACKING_DOPE_SHOW_HIDDEN
@ TRACKING_DISTORTION_MODEL_DIVISION
@ TRACKING_DISTORTION_MODEL_POLYNOMIAL
@ TRACKING_DISTORTION_MODEL_NUKE
@ TRACKING_DISTORTION_MODEL_BROWN
@ MARKER_TRACKED
@ MARKER_DISABLED
@ TRACKING_CLEAN_DELETE_SEGMENT
@ TRACKING_CLEAN_SELECT
@ TRACKING_CLEAN_DELETE_TRACK
@ TRACKING_FILTER_BICUBIC
@ TRACKING_FILTER_NEAREST
@ TRACKING_FILTER_BILINEAR
@ TRACKING_AUTOSCALE
@ TRACKING_SHOW_STAB_TRACKS
@ TRACKING_STABILIZE_SCALE
@ TRACKING_STABILIZE_ROTATION
@ TRACKING_2D_STABILIZATION
@ TRACK_MATCH_PREVIOS_FRAME
@ TRACK_MATCH_KEYFRAME
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
Read Guarded memory(de)allocation.
#define RNA_POINTER_INVALIDATE(ptr)
Definition: RNA_access.h:1425
StructRNA RNA_MovieTrackingObject
StructRNA RNA_MovieTrackingTrack
@ PARM_RNAPTR
Definition: RNA_types.h:339
@ PARM_REQUIRED
Definition: RNA_types.h:337
@ FUNC_USE_REPORTS
Definition: RNA_types.h:578
@ FUNC_USE_SELF_ID
Definition: RNA_types.h:565
@ PROP_FLOAT
Definition: RNA_types.h:75
@ PROP_BOOLEAN
Definition: RNA_types.h:73
@ PROP_ENUM
Definition: RNA_types.h:77
@ PROP_INT
Definition: RNA_types.h:74
@ PROP_STRING
Definition: RNA_types.h:76
@ PROP_POINTER
Definition: RNA_types.h:78
@ PROP_COLLECTION
Definition: RNA_types.h:79
#define RNA_TRANSLATION_PREC_DEFAULT
Definition: RNA_types.h:104
@ PROP_THICK_WRAP
Definition: RNA_types.h:270
@ PROP_ANIMATABLE
Definition: RNA_types.h:188
@ PROP_NEVER_UNLINK
Definition: RNA_types.h:232
@ PROP_EDITABLE
Definition: RNA_types.h:175
@ PROP_NEVER_NULL
Definition: RNA_types.h:225
@ PROP_ID_REFCOUNT
Definition: RNA_types.h:212
@ PROP_MATRIX
Definition: RNA_types.h:144
@ PROP_XYZ
Definition: RNA_types.h:148
@ PROP_COLOR
Definition: RNA_types.h:139
@ PROP_PIXEL
Definition: RNA_types.h:128
@ PROP_ANGLE
Definition: RNA_types.h:132
@ PROP_NONE
Definition: RNA_types.h:113
@ PROP_FACTOR
Definition: RNA_types.h:131
@ PROP_TRANSLATION
Definition: RNA_types.h:140
#define ND_DISPLAY
Definition: WM_types.h:391
#define NC_MOVIECLIP
Definition: WM_types.h:298
#define NC_SCENE
Definition: WM_types.h:279
#define ND_NODES
Definition: WM_types.h:336
#define NA_EDITED
Definition: WM_types.h:462
#define ND_TRANSFORM
Definition: WM_types.h:357
#define NC_OBJECT
Definition: WM_types.h:280
#define SELECT
Scene scene
const vector< Marker > & markers
const ProjectiveReconstruction & reconstruction
Definition: intersect.cc:198
void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb, IteratorSkipFunc skip)
Definition: rna_access.c:4823
PointerRNA rna_pointer_inherit_refine(PointerRNA *ptr, StructRNA *type, void *data)
Definition: rna_access.c:196
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2762
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
Definition: rna_define.c:1212
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, bool default_value, const char *ui_name, const char *ui_description)
Definition: rna_define.c:3481
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
Definition: rna_define.c:4159
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
Definition: rna_define.c:2257
void RNA_def_parameter_clear_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
Definition: rna_define.c:1555
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
Definition: rna_define.c:3312
void RNA_def_property_float_default(PropertyRNA *prop, float value)
Definition: rna_define.c:2042
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
Definition: rna_define.c:4302
PropertyRNA * RNA_def_float_matrix(StructOrFunctionRNA *cont_, const char *identifier, int rows, int columns, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
Definition: rna_define.c:3943
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
Definition: rna_define.c:3153
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
Definition: rna_define.c:1676
const int rna_matrix_dimsize_4x2[]
Definition: rna_define.c:1627
void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
Definition: rna_define.c:1684
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
Definition: rna_define.c:4262
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
Definition: rna_define.c:3462
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)
Definition: rna_define.c:3408
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
Definition: rna_define.c:1259
void RNA_def_function_output(FunctionRNA *UNUSED(func), PropertyRNA *ret)
Definition: rna_define.c:4327
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
Definition: rna_define.c:2971
void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, const int length[])
Definition: rna_define.c:1629
PropertyRNA * RNA_def_float_vector(StructOrFunctionRNA *cont_, const char *identifier, int len, const float *default_value, float hardmin, float hardmax, const char *ui_name, const char *ui_description, float softmin, float softmax)
Definition: rna_define.c:3851
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
Definition: rna_define.c:1892
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
Definition: rna_define.c:1067
void RNA_def_property_array(PropertyRNA *prop, int length)
Definition: rna_define.c:1568
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
Definition: rna_define.c:1757
void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength)
Definition: rna_define.c:1940
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
Definition: rna_define.c:1792
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
Definition: rna_define.c:2791
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
Definition: rna_define.c:4337
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
Definition: rna_define.c:2927
const int rna_matrix_dimsize_4x4[]
Definition: rna_define.c:1626
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
Definition: rna_define.c:1279
void RNA_def_struct_name_property(struct StructRNA *srna, struct PropertyRNA *prop)
Definition: rna_define.c:1122
void RNA_def_function_flag(FunctionRNA *func, int flag)
Definition: rna_define.c:4332
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1517
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
Definition: rna_define.c:3373
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
Definition: rna_define.c:1047
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2623
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
Definition: rna_define.c:3055
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
Definition: rna_define.c:1267
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, int maxlen, const char *ui_name, const char *ui_description)
Definition: rna_define.c:3675
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
Definition: rna_define.c:1512
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, int default_value, int hardmin, int hardmax, const char *ui_name, const char *ui_description, int softmin, int softmax)
Definition: rna_define.c:3585
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2515
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
Definition: rna_define.c:1706
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
Definition: rna_define.c:2364
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
Definition: rna_define.c:2348
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
Definition: rna_define.c:1547
static const EnumPropertyItem pattern_match_items[]
Definition: rna_tracking.c:857
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[]
Definition: rna_tracking.c:823
static void rna_def_trackingPlaneTrack(BlenderRNA *brna)
static void rna_def_trackingSettings(BlenderRNA *brna)
Definition: rna_tracking.c:867
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:51
Definition: DNA_ID.h:273
void * first
Definition: DNA_listBase.h:47
Definition: BKE_main.h:116
struct MovieTracking tracking
MovieTrackingReconstruction reconstruction
struct MovieTrackingObject * next
struct MovieTrackingPlaneTrack * next
MovieTrackingPlaneMarker * markers
MovieTrackingMarker * markers
struct MovieTrackingTrack * next
MovieTrackingReconstruction reconstruction
MovieTrackingPlaneTrack * act_plane_track
MovieTrackingDopesheet dopesheet
MovieTrackingTrack * act_track
MovieTrackingStabilization stabilization
MovieTrackingCamera camera
void * data
Definition: RNA_types.h:52
struct ID * owner_id
Definition: RNA_types.h:50
struct bNodeTree * nodetree
float max
void WM_main_add_notifier(unsigned int type, void *reference)
PointerRNA * ptr
Definition: wm_files.c:3157