[Bf-blender-cvs] [9e038a2c6ba] master: Tracking: Make transform cancel use explicit frame number

Sergey Sharybin noreply at git.blender.org
Thu Jan 14 11:37:47 CET 2021


Commit: 9e038a2c6ba467c99ac6950791f1654e8810ea84
Author: Sergey Sharybin
Date:   Thu Jan 14 11:32:28 2021 +0100
Branches: master
https://developer.blender.org/rB9e038a2c6ba467c99ac6950791f1654e8810ea84

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.

===================================================================

M	source/blender/editors/transform/transform_convert_tracking.c

===================================================================

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;



More information about the Bf-blender-cvs mailing list