diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_tracking.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/tracking.c | 6 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_tracking.c | 82 |
3 files changed, 74 insertions, 17 deletions
diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h index 7b3cb3f69bb..88871b2e545 100644 --- a/source/blender/blenkernel/BKE_tracking.h +++ b/source/blender/blenkernel/BKE_tracking.h @@ -53,7 +53,8 @@ void BKE_tracking_track_flag(struct MovieTrackingTrack *track, int area, int fla struct MovieTrackingTrack *BKE_tracking_add_track(struct MovieTracking *tracking, struct ListBase *tracksbase, float x, float y, int framenr, int width, int height); -void BKE_tracking_insert_marker(struct MovieTrackingTrack *track, struct MovieTrackingMarker *marker); +struct MovieTrackingMarker *BKE_tracking_insert_marker(struct MovieTrackingTrack *track, + struct MovieTrackingMarker *marker); void BKE_tracking_delete_marker(struct MovieTrackingTrack *track, int framenr); struct MovieTrackingMarker *BKE_tracking_get_marker(struct MovieTrackingTrack *track, int framenr); diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c index ff76fc14755..6897600f42f 100644 --- a/source/blender/blenkernel/intern/tracking.c +++ b/source/blender/blenkernel/intern/tracking.c @@ -261,7 +261,7 @@ MovieTrackingTrack *BKE_tracking_add_track(MovieTracking *tracking, ListBase *tr return track; } -void BKE_tracking_insert_marker(MovieTrackingTrack *track, MovieTrackingMarker *marker) +MovieTrackingMarker *BKE_tracking_insert_marker(MovieTrackingTrack *track, MovieTrackingMarker *marker) { MovieTrackingMarker *old_marker= NULL; @@ -270,6 +270,8 @@ void BKE_tracking_insert_marker(MovieTrackingTrack *track, MovieTrackingMarker * if(old_marker) { *old_marker= *marker; + + return old_marker; } else { int a= track->markersnr; @@ -287,6 +289,8 @@ void BKE_tracking_insert_marker(MovieTrackingTrack *track, MovieTrackingMarker * track->markers[a+1]= *marker; track->last_marker= a+1; + + return &track->markers[a+1]; } } diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c index c29d655feb2..dcb460fbf37 100644 --- a/source/blender/makesrna/intern/rna_tracking.c +++ b/source/blender/makesrna/intern/rna_tracking.c @@ -31,6 +31,7 @@ #include "MEM_guardedalloc.h" +#include "BLI_math.h" #include "BKE_movieclip.h" #include "BKE_tracking.h" @@ -372,7 +373,7 @@ static void rna_tracking_tracks_add(ID *id, MovieTracking *tracking, int frame, add_tracks_to_base(clip, tracking, &tracking->tracks, frame, number); - WM_main_add_notifier(NC_MOVIECLIP|NA_EDITED, NULL); + WM_main_add_notifier(NC_MOVIECLIP|NA_EDITED, clip); } static void rna_trackingObject_tracks_add(ID *id, MovieTrackingObject *object, int frame, int number) @@ -404,9 +405,34 @@ void rna_tracking_object_remove(MovieTracking *tracking, MovieTrackingObject *ob WM_main_add_notifier(NC_MOVIECLIP|NA_EDITED, NULL); } -static MovieTrackingMarker *rna_trackingTrack_marker_find_frame(MovieTrackingTrack *track, int framenr) +static MovieTrackingMarker *rna_trackingMarkers_find_frame(MovieTrackingTrack *track, int framenr) +{ + return BKE_tracking_exact_marker(track, framenr); +} + +static MovieTrackingMarker* rna_trackingMarkers_insert_frame(MovieTrackingTrack *track, int framenr, float *co) +{ + MovieTrackingMarker marker, *new_marker; + + memset(&marker, 0, sizeof(marker)); + marker.framenr = framenr; + copy_v2_v2(marker.pos, co); + + new_marker = BKE_tracking_insert_marker(track, &marker); + + WM_main_add_notifier(NC_MOVIECLIP|NA_EDITED, NULL); + + return new_marker; +} + +void rna_trackingMarkers_delete_frame(MovieTrackingTrack *track, int framenr) { - return BKE_tracking_get_marker(track, framenr); + if(track->markersnr==1) + return; + + BKE_tracking_delete_marker(track, framenr); + + WM_main_add_notifier(NC_MOVIECLIP|NA_EDITED, NULL); } #else @@ -704,14 +730,48 @@ static void rna_def_trackingMarker(BlenderRNA *brna) RNA_def_property_update(prop, NC_MOVIECLIP|NA_EDITED, NULL); } -static void rna_def_trackingTrack(BlenderRNA *brna) +static void rna_def_trackingMarkers(BlenderRNA *brna, PropertyRNA *cprop) { StructRNA *srna; - PropertyRNA *prop; - FunctionRNA *func; PropertyRNA *parm; + RNA_def_property_srna(cprop, "MovieTrackingMarkers"); + srna= RNA_def_struct(brna, "MovieTrackingMarkers", NULL); + RNA_def_struct_sdna(srna, "MovieTrackingTrack"); + RNA_def_struct_ui_text(srna, "Movie Tracking Markers", "Collection of markers for movie tracking track"); + + func= RNA_def_function(srna, "find_frame", "rna_trackingMarkers_find_frame"); + RNA_def_function_ui_description(func, "Get marker for specified frame"); + parm= RNA_def_int(func, "frame", 1, MINFRAME, MAXFRAME, "Frame", + "Frame number to find marker for", MINFRAME, MAXFRAME); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_pointer(func, "marker", "MovieTrackingMarker", "", "Marker for specified frame"); + RNA_def_function_return(func, parm); + + func= RNA_def_function(srna, "insert_frame", "rna_trackingMarkers_insert_frame"); + RNA_def_function_ui_description(func, "Add a number of tracks to this movie clip"); + parm= RNA_def_int(func, "frame", 1, MINFRAME, MAXFRAME, "Frame", + "Frame number to insert marker to", MINFRAME, MAXFRAME); + RNA_def_property_flag(parm, PROP_REQUIRED); + RNA_def_float_vector(func, "co", 2, 0, -1.0, 1.0, "Coordinate", + "Place new marker at the given frame using specified in normalized space coordinates", -1.0, 1.0); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_pointer(func, "marker", "MovieTrackingMarker", "", "Newly created marker"); + RNA_def_function_return(func, parm); + + func= RNA_def_function(srna, "delete_frame", "rna_trackingMarkers_delete_frame"); + RNA_def_function_ui_description(func, "Delete marker at specified frame"); + parm= RNA_def_int(func, "frame", 1, MINFRAME, MAXFRAME, "Frame", + "Frame number to delete marker from", MINFRAME, MAXFRAME); + RNA_def_property_flag(parm, PROP_REQUIRED); +} + +static void rna_def_trackingTrack(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + rna_def_trackingMarker(brna); srna= RNA_def_struct(brna, "MovieTrackingTrack", NULL); @@ -805,6 +865,7 @@ static void rna_def_trackingTrack(BlenderRNA *brna) RNA_def_property_struct_type(prop, "MovieTrackingMarker"); RNA_def_property_collection_sdna(prop, NULL, "markers", "markersnr"); RNA_def_property_ui_text(prop, "Markers", "Collection of markers in track"); + rna_def_trackingMarkers(brna, prop); /* ** channels ** */ @@ -899,15 +960,6 @@ static void rna_def_trackingTrack(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "error"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Average Error", "Average error of re-projection"); - - /* ** api ** */ - - func= RNA_def_function(srna, "marker_find_frame", "rna_trackingTrack_marker_find_frame"); - RNA_def_function_ui_description(func, "Get marker for specified frame"); - parm= RNA_def_int(func, "frame", 1, MINFRAME, MAXFRAME, "Frame", "type for the new spline", MINFRAME, MAXFRAME); - RNA_def_property_flag(parm, PROP_REQUIRED); - parm= RNA_def_pointer(func, "marker", "MovieTrackingMarker", "", "Marker for specified frame"); - RNA_def_function_return(func, parm); } static void rna_def_trackingStabilization(BlenderRNA *brna) |