diff options
Diffstat (limited to 'source/blender/makesrna/intern/rna_tracking.c')
-rw-r--r-- | source/blender/makesrna/intern/rna_tracking.c | 165 |
1 files changed, 63 insertions, 102 deletions
diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c index 7a01e3a4f6b..f44f7336cdf 100644 --- a/source/blender/makesrna/intern/rna_tracking.c +++ b/source/blender/makesrna/intern/rna_tracking.c @@ -48,6 +48,9 @@ #ifdef RNA_RUNTIME +#include "DNA_anim_types.h" + +#include "BKE_animsys.h" #include "BKE_depsgraph.h" #include "BKE_node.h" @@ -55,71 +58,6 @@ #include "WM_api.h" -static MovieTrackingObject *tracking_object_from_track(MovieClip *clip, - MovieTrackingTrack *track) -{ - MovieTracking *tracking = &clip->tracking; - ListBase *tracksbase = &tracking->tracks; - /* TODO: it's a bit difficult to find list track came from knowing just - * movie clip ID and MovieTracking structure, so keep this naive - * search for a while */ - if (BLI_findindex(tracksbase, track) == -1) { - MovieTrackingObject *object = tracking->objects.first; - while (object) { - if (BLI_findindex(&object->tracks, track) != -1) { - return object; - } - object = object->next; - } - } - return NULL; -} - -static ListBase *tracking_tracksbase_from_track(MovieClip *clip, - MovieTrackingTrack *track) -{ - MovieTracking *tracking = &clip->tracking; - MovieTrackingObject *object = tracking_object_from_track(clip, track); - if (object != NULL) { - return &object->tracks; - } - return &tracking->tracks; -} - -static MovieTrackingObject *tracking_object_from_plane_track( - MovieClip *clip, - MovieTrackingPlaneTrack *plane_track) -{ - MovieTracking *tracking = &clip->tracking; - ListBase *plane_tracks_base = &tracking->plane_tracks; - /* TODO: it's a bit difficult to find list track came from knowing just - * movie clip ID and MovieTracking structure, so keep this naive - * search for a while */ - if (BLI_findindex(plane_tracks_base, plane_track) == -1) { - MovieTrackingObject *object = tracking->objects.first; - while (object) { - if (BLI_findindex(&object->plane_tracks, plane_track) != -1) { - return object; - } - object = object->next; - } - } - return NULL; -} - -static ListBase *tracking_tracksbase_from_plane_track( - MovieClip *clip, - MovieTrackingPlaneTrack *plane_track) -{ - MovieTracking *tracking = &clip->tracking; - MovieTrackingObject *object = tracking_object_from_plane_track(clip, - plane_track); - if (object != NULL) { - return &object->plane_tracks; - } - return &tracking->plane_tracks; -} - static char *rna_tracking_path(PointerRNA *UNUSED(ptr)) { return BLI_sprintfN("tracking"); @@ -149,19 +87,12 @@ static char *rna_trackingTrack_path(PointerRNA *ptr) { MovieClip *clip = (MovieClip *)ptr->id.data; MovieTrackingTrack *track = (MovieTrackingTrack *)ptr->data; - MovieTrackingObject *object = tracking_object_from_track(clip, track); - char track_name_esc[sizeof(track->name) * 2]; - BLI_strescape(track_name_esc, track->name, sizeof(track_name_esc)); - if (object == NULL) { - return BLI_sprintfN("tracking.tracks[\"%s\"]", track_name_esc); - } - else { - char object_name_esc[sizeof(object->name) * 2]; - BLI_strescape(object_name_esc, object->name, sizeof(object_name_esc)); - return BLI_sprintfN("tracking.objects[\"%s\"].tracks[\"%s\"]", - object_name_esc, - track_name_esc); - } + /* Escaped object name, escaped track name, rest of the path. */ + char rna_path[MAX_NAME * 4 + 64]; + BKE_tracking_get_rna_path_for_track(&clip->tracking, + track, + rna_path, sizeof(rna_path)); + return BLI_strdup(rna_path); } static void rna_trackingTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr) @@ -255,9 +186,26 @@ static void rna_trackingTrack_name_set(PointerRNA *ptr, const char *value) { MovieClip *clip = (MovieClip *)ptr->id.data; MovieTrackingTrack *track = (MovieTrackingTrack *)ptr->data; - ListBase *tracksbase = tracking_tracksbase_from_track(clip, track); + ListBase *tracksbase = + BKE_tracking_find_tracks_list_for_track(&clip->tracking, track); + /* Store old name, for the animation fix later. */ + char old_name[sizeof(track->name)]; + BLI_strncpy(old_name, track->name, sizeof(track->name)); + /* Update the name, */ BLI_strncpy(track->name, value, sizeof(track->name)); BKE_tracking_track_unique_name(tracksbase, track); + /* Fix animation paths. */ + AnimData *adt = BKE_animdata_from_id(&clip->id); + if (adt != NULL) { + char rna_path[MAX_NAME * 2 + 64]; + BKE_tracking_get_rna_path_prefix_for_track(&clip->tracking, + track, + rna_path, sizeof(rna_path)); + BKE_animdata_fix_paths_rename(&clip->id, adt, NULL, + rna_path, + old_name, track->name, + 0, 0, 1); + } } static int rna_trackingTrack_select_get(PointerRNA *ptr) @@ -326,28 +274,40 @@ static char *rna_trackingPlaneTrack_path(PointerRNA *ptr) { MovieClip *clip = (MovieClip *)ptr->id.data; MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)ptr->data; - char track_name_esc[sizeof(plane_track->name) * 2]; - MovieTrackingObject *object = tracking_object_from_plane_track(clip, plane_track); - BLI_strescape(track_name_esc, plane_track->name, sizeof(track_name_esc)); - if (object == NULL) { - return BLI_sprintfN("tracking.plane_tracks[\"%s\"]", track_name_esc); - } - else { - char object_name_esc[sizeof(object->name) * 2]; - BLI_strescape(object_name_esc, object->name, sizeof(object_name_esc)); - return BLI_sprintfN("tracking.objects[\"%s\"].plane_tracks[\"%s\"]", - object_name_esc, - track_name_esc); - } + /* Escaped object name, escaped track name, rest of the path. */ + char rna_path[MAX_NAME * 4 + 64]; + BKE_tracking_get_rna_path_for_plane_track(&clip->tracking, + plane_track, + rna_path, sizeof(rna_path)); + return BLI_strdup(rna_path); } static void rna_trackingPlaneTrack_name_set(PointerRNA *ptr, const char *value) { MovieClip *clip = (MovieClip *)ptr->id.data; MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)ptr->data; - ListBase *plane_tracks_base = tracking_tracksbase_from_plane_track(clip, plane_track); + ListBase *plane_tracks_base = + BKE_tracking_find_tracks_list_for_plane_track(&clip->tracking, + plane_track); + /* Store old name, for the animation fix later. */ + char old_name[sizeof(plane_track->name)]; + BLI_strncpy(old_name, plane_track->name, sizeof(plane_track->name)); + /* Update the name, */ BLI_strncpy(plane_track->name, value, sizeof(plane_track->name)); BKE_tracking_plane_track_unique_name(plane_tracks_base, plane_track); + /* Fix animation paths. */ + AnimData *adt = BKE_animdata_from_id(&clip->id); + if (adt != NULL) { + char rna_path[MAX_NAME * 2 + 64]; + BKE_tracking_get_rna_path_prefix_for_plane_track(&clip->tracking, + plane_track, + rna_path, + sizeof(rna_path)); + BKE_animdata_fix_paths_rename(&clip->id, adt, NULL, + rna_path, + old_name, plane_track->name, + 0, 0, 1); + } } static char *rna_trackingCamera_path(PointerRNA *UNUSED(ptr)) @@ -826,7 +786,7 @@ static void rna_trackingCameras_matrix_from_frame(ID *id, MovieTrackingReconstru #else -static EnumPropertyItem tracker_motion_model[] = { +static const EnumPropertyItem tracker_motion_model[] = { {TRACK_MOTION_MODEL_HOMOGRAPHY, "Perspective", 0, "Perspective", "Search for markers that are perspectively deformed (homography) between frames"}, {TRACK_MOTION_MODEL_AFFINE, "Affine", 0, "Affine", @@ -842,7 +802,7 @@ static EnumPropertyItem tracker_motion_model[] = { {0, NULL, 0, NULL, NULL} }; -static EnumPropertyItem pattern_match_items[] = { +static const EnumPropertyItem pattern_match_items[] = { {TRACK_MATCH_KEYFRAME, "KEYFRAME", 0, "Keyframe", "Track pattern from keyframe to next frame"}, {TRACK_MATCH_PREVFRAME, "PREV_FRAME", 0, "Previous frame", "Track pattern from current frame to next frame"}, {0, NULL, 0, NULL, NULL} @@ -853,7 +813,7 @@ static void rna_def_trackingSettings(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - static EnumPropertyItem speed_items[] = { + static const EnumPropertyItem speed_items[] = { {0, "FASTEST", 0, "Fastest", "Track as fast as it's possible"}, {TRACKING_SPEED_DOUBLE, "DOUBLE", 0, "Double", "Track with double speed"}, {TRACKING_SPEED_REALTIME, "REALTIME", 0, "Realtime", "Track with realtime speed"}, @@ -862,14 +822,14 @@ static void rna_def_trackingSettings(BlenderRNA *brna) {0, NULL, 0, NULL, NULL} }; - static EnumPropertyItem cleanup_items[] = { + static const EnumPropertyItem cleanup_items[] = { {TRACKING_CLEAN_SELECT, "SELECT", 0, "Select", "Select unclean tracks"}, {TRACKING_CLEAN_DELETE_TRACK, "DELETE_TRACK", 0, "Delete Track", "Delete unclean tracks"}, {TRACKING_CLEAN_DELETE_SEGMENT, "DELETE_SEGMENTS", 0, "Delete Segments", "Delete unclean segments of tracks"}, {0, NULL, 0, NULL, NULL} }; - static EnumPropertyItem refine_items[] = { + static const EnumPropertyItem refine_items[] = { {0, "NONE", 0, "Nothing", "Do not refine camera intrinsics"}, {REFINE_FOCAL_LENGTH, "FOCAL_LENGTH", 0, "Focal Length", "Refine focal length"}, {REFINE_FOCAL_LENGTH | REFINE_RADIAL_DISTORTION_K1, "FOCAL_LENGTH_RADIAL_K1", 0, "Focal length, K1", @@ -1085,14 +1045,14 @@ static void rna_def_trackingCamera(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - static EnumPropertyItem distortion_model_items[] = { + static const EnumPropertyItem distortion_model_items[] = { {TRACKING_DISTORTION_MODEL_POLYNOMIAL, "POLYNOMIAL", 0, "Polynomial", "Radial distortion model which fits common cameras"}, {TRACKING_DISTORTION_MODEL_DIVISION, "DIVISION", 0, "Divisions", "Division distortion model which " "better represents wide-angle cameras"}, {0, NULL, 0, NULL, NULL} }; - static EnumPropertyItem camera_units_items[] = { + static const EnumPropertyItem camera_units_items[] = { {CAMERA_UNITS_PX, "PIXELS", 0, "px", "Use pixels for units of focal length"}, {CAMERA_UNITS_MM, "MILLIMETERS", 0, "mm", "Use millimeters for units of focal length"}, {0, NULL, 0, NULL, NULL} @@ -1650,6 +1610,7 @@ static void rna_def_trackingPlaneTrack(BlenderRNA *brna) /* auto keyframing */ prop = RNA_def_property(srna, "use_auto_keying", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", PLANE_TRACK_AUTOKEY); + RNA_def_property_clear_flag(prop, PROP_ANIMATABLE); RNA_def_property_ui_text(prop, "Auto Keyframe", "Automatic keyframe insertion when moving plane corners"); RNA_def_property_ui_icon(prop, ICON_REC, 0); @@ -1673,7 +1634,7 @@ static void rna_def_trackingStabilization(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - static EnumPropertyItem filter_items[] = { + static const EnumPropertyItem filter_items[] = { {TRACKING_FILTER_NEAREST, "NEAREST", 0, "Nearest", "No interpolation, use nearest neighbor pixel"}, {TRACKING_FILTER_BILINEAR, "BILINEAR", 0, "Bilinear", "Simple interpolation between adjacent pixels"}, {TRACKING_FILTER_BICUBIC, "BICUBIC", 0, "Bicubic", "High quality pixel interpolation"}, @@ -2124,7 +2085,7 @@ static void rna_def_trackingDopesheet(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - static EnumPropertyItem sort_items[] = { + static const EnumPropertyItem sort_items[] = { {TRACKING_DOPE_SORT_NAME, "NAME", 0, "Name", "Sort channels by their names"}, {TRACKING_DOPE_SORT_LONGEST, "LONGEST", 0, "Longest", "Sort channels by longest tracked segment"}, {TRACKING_DOPE_SORT_TOTAL, "TOTAL", 0, "Total", "Sort channels by overall amount of tracked segments"}, |