Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey@blender.org>2021-01-14 13:32:28 +0300
committerSergey Sharybin <sergey@blender.org>2021-01-14 13:37:36 +0300
commit9e038a2c6ba467c99ac6950791f1654e8810ea84 (patch)
treef8c967ea0bb19d2c78c2132b11c1b44ecc8a5400 /source/blender/editors/transform/transform_convert_tracking.c
parent4b1112c8c96b3c18545afd6d302fec71a2713160 (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.c19
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;