diff options
author | Sergey Sharybin <sergey@blender.org> | 2021-01-14 13:32:28 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey@blender.org> | 2021-01-14 13:37:36 +0300 |
commit | 9e038a2c6ba467c99ac6950791f1654e8810ea84 (patch) | |
tree | f8c967ea0bb19d2c78c2132b11c1b44ecc8a5400 /source/blender/editors/transform/transform_convert_tracking.c | |
parent | 4b1112c8c96b3c18545afd6d302fec71a2713160 (diff) |
Tracking: Make transform cancel use explicit frame number
Before transform cancel will request marker at a current frame number
and restore transform flags to it. This worked fine if there was only
one marker from track in the transform data. This did not work correct
when multiple markers from track were added to transform data.
This allows to implement proportional editing in the clip editor.
Diffstat (limited to 'source/blender/editors/transform/transform_convert_tracking.c')
-rw-r--r-- | source/blender/editors/transform/transform_convert_tracking.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/source/blender/editors/transform/transform_convert_tracking.c b/source/blender/editors/transform/transform_convert_tracking.c index 24e6d6a64f7..9b999b26ba3 100644 --- a/source/blender/editors/transform/transform_convert_tracking.c +++ b/source/blender/editors/transform/transform_convert_tracking.c @@ -52,6 +52,7 @@ typedef struct TransDataTracking { float (*smarkers)[2]; int markersnr; + int framenr; MovieTrackingMarker *markers; /* marker transformation from curves editor */ @@ -75,6 +76,8 @@ enum transDataTracking_Mode { typedef struct TransformInitContext { SpaceClip *space_clip; + + TransInfo *t; TransDataContainer *tc; /* MOTE: There pointers will be nullptr during counting step. @@ -110,6 +113,7 @@ static void markerToTransDataInit(TransformInitContext *init_context, int anchor = area == TRACK_AREA_POINT && off; tdt->flag = marker->flag; + tdt->framenr = marker->framenr; tdt->mode = transDataTracking_ModeTracks; if (anchor) { @@ -264,6 +268,7 @@ static void planeMarkerToTransDataInit(TransformInitContext *init_context, } tdt->flag = plane_marker->flag; + tdt->framenr = plane_marker->framenr; tdt->mode = transDataTracking_ModePlaneTracks; tdt->plane_track = plane_track; @@ -350,6 +355,7 @@ static void createTransTrackingTracksData(bContext *C, TransInfo *t) TransformInitContext init_context = {NULL}; init_context.space_clip = space_clip; + init_context.t = t; init_context.tc = tc; /* Count required tranformation data. */ @@ -567,17 +573,17 @@ void createTransTrackingData(bContext *C, TransInfo *t) static void cancelTransTracking(TransInfo *t) { TransDataContainer *tc = TRANS_DATA_CONTAINER_FIRST_SINGLE(t); - SpaceClip *sc = t->area->spacedata.first; - int i, framenr = ED_space_clip_get_clip_frame_number(sc); TransDataTracking *tdt_array = tc->custom.type.data; - i = 0; + int i = 0; while (i < tc->data_len) { TransDataTracking *tdt = &tdt_array[i]; if (tdt->mode == transDataTracking_ModeTracks) { MovieTrackingTrack *track = tdt->track; - MovieTrackingMarker *marker = BKE_tracking_marker_get(track, framenr); + MovieTrackingMarker *marker = BKE_tracking_marker_get_exact(track, tdt->framenr); + + BLI_assert(marker != NULL); marker->flag = tdt->flag; @@ -613,7 +619,10 @@ static void cancelTransTracking(TransInfo *t) } else if (tdt->mode == transDataTracking_ModePlaneTracks) { MovieTrackingPlaneTrack *plane_track = tdt->plane_track; - MovieTrackingPlaneMarker *plane_marker = BKE_tracking_plane_marker_get(plane_track, framenr); + MovieTrackingPlaneMarker *plane_marker = BKE_tracking_plane_marker_get(plane_track, + tdt->framenr); + + BLI_assert(plane_marker != NULL); plane_marker->flag = tdt->flag; i += 3; |