[Bf-blender-cvs] [66dada123cf] master: Cleanup: Refactor marker area clamping

Sergey Sharybin noreply at git.blender.org
Thu May 12 11:37:10 CEST 2022


Commit: 66dada123cf154d7db0625c41b9391a6b89d683d
Author: Sergey Sharybin
Date:   Thu May 12 10:58:22 2022 +0200
Branches: master
https://developer.blender.org/rB66dada123cf154d7db0625c41b9391a6b89d683d

Cleanup: Refactor marker area clamping

Switch from a single function with a lot of branching at its top level
to dedicated function calls with own documentation.

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

M	source/blender/blenkernel/BKE_tracking.h
M	source/blender/blenkernel/intern/tracking.c
M	source/blender/editors/space_clip/clip_buttons.c
M	source/blender/editors/space_clip/tracking_ops.c
M	source/blender/editors/transform/transform_convert_tracking.c
M	source/blender/makesrna/intern/rna_tracking.c

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

diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h
index 1d4ff06703d..3f6d32e2f70 100644
--- a/source/blender/blenkernel/BKE_tracking.h
+++ b/source/blender/blenkernel/BKE_tracking.h
@@ -32,12 +32,6 @@ struct rcti;
  * Common types and constants.
  */
 
-enum {
-  CLAMP_PAT_POS = 2,
-  CLAMP_SEARCH_DIM = 3,
-  CLAMP_SEARCH_POS = 4,
-};
-
 typedef enum eTrackArea {
   TRACK_AREA_POINT = (1 << 0),
   TRACK_AREA_PAT = (1 << 1),
@@ -292,7 +286,35 @@ struct MovieTrackingMarker *BKE_tracking_marker_insert(struct MovieTrackingTrack
                                                        struct MovieTrackingMarker *marker);
 void BKE_tracking_marker_delete(struct MovieTrackingTrack *track, int framenr);
 
-void BKE_tracking_marker_clamp(struct MovieTrackingMarker *marker, int event);
+/**
+ * If the pattern area is outside of the search area its position will be modified in a way that it
+ * is within the pattern is within the search area.
+ *
+ * If the pattern area is already within the search area nothing happens.
+ *
+ * If the pattern area is bigger than the search area the behavior is undefined.
+ *
+ * Search area is never modified.
+ */
+void BKE_tracking_marker_clamp_pattern_position(struct MovieTrackingMarker *marker);
+
+/**
+ * If the search size is such that pattern area is (partially) outside of the search area make the
+ * search area bigger so that the pattern is within the search area.
+ *
+ * Pattern area is never modified.
+ */
+void BKE_tracking_marker_clamp_search_size(struct MovieTrackingMarker *marker);
+
+/**
+ * If the search position is such that pattern area is (partially) outside of the search area move
+ * the search area so that the pattern is within the search area.
+ *
+ * If the search area is smaller than the pattern the behavior is undefined.
+ *
+ * Pattern area is never modified.
+ */
+void BKE_tracking_marker_clamp_search_position(struct MovieTrackingMarker *marker);
 
 /**
  * Get marker closest to the given frame number.
diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c
index 307e9eca8cb..f9d3a44e5cb 100644
--- a/source/blender/blenkernel/intern/tracking.c
+++ b/source/blender/blenkernel/intern/tracking.c
@@ -1367,53 +1367,52 @@ void BKE_tracking_marker_delete(MovieTrackingTrack *track, int framenr)
   }
 }
 
-void BKE_tracking_marker_clamp(MovieTrackingMarker *marker, int event)
+void BKE_tracking_marker_clamp_pattern_position(MovieTrackingMarker *marker)
 {
   float pat_min[2], pat_max[2];
-
   BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max);
 
-  if (event == CLAMP_PAT_POS) {
-    float dim[2];
-
-    sub_v2_v2v2(dim, pat_max, pat_min);
-
-    for (int a = 0; a < 2; a++) {
-      /* pattern shouldn't be moved outside of search */
-      if (pat_min[a] < marker->search_min[a]) {
-        for (int b = 0; b < 4; b++) {
-          marker->pattern_corners[b][a] += marker->search_min[a] - pat_min[a];
-        }
+  for (int a = 0; a < 2; a++) {
+    if (pat_min[a] < marker->search_min[a]) {
+      for (int b = 0; b < 4; b++) {
+        marker->pattern_corners[b][a] += marker->search_min[a] - pat_min[a];
       }
-      if (pat_max[a] > marker->search_max[a]) {
-        for (int b = 0; b < 4; b++) {
-          marker->pattern_corners[b][a] -= pat_max[a] - marker->search_max[a];
-        }
+    }
+    if (pat_max[a] > marker->search_max[a]) {
+      for (int b = 0; b < 4; b++) {
+        marker->pattern_corners[b][a] -= pat_max[a] - marker->search_max[a];
       }
     }
   }
-  else if (event == CLAMP_SEARCH_DIM) {
-    for (int a = 0; a < 2; a++) {
-      /* search shouldn't be resized smaller than pattern */
-      marker->search_min[a] = min_ff(pat_min[a], marker->search_min[a]);
-      marker->search_max[a] = max_ff(pat_max[a], marker->search_max[a]);
-    }
+}
+
+void BKE_tracking_marker_clamp_search_size(MovieTrackingMarker *marker)
+{
+  float pat_min[2], pat_max[2];
+  BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max);
+
+  for (int a = 0; a < 2; a++) {
+    marker->search_min[a] = min_ff(pat_min[a], marker->search_min[a]);
+    marker->search_max[a] = max_ff(pat_max[a], marker->search_max[a]);
   }
-  else if (event == CLAMP_SEARCH_POS) {
-    float dim[2];
+}
+
+void BKE_tracking_marker_clamp_search_position(MovieTrackingMarker *marker)
+{
+  float pat_min[2], pat_max[2];
+  BKE_tracking_marker_pattern_minmax(marker, pat_min, pat_max);
 
-    sub_v2_v2v2(dim, marker->search_max, marker->search_min);
+  float dim[2];
+  sub_v2_v2v2(dim, marker->search_max, marker->search_min);
 
-    for (int a = 0; a < 2; a++) {
-      /* search shouldn't be moved inside pattern */
-      if (marker->search_min[a] > pat_min[a]) {
-        marker->search_min[a] = pat_min[a];
-        marker->search_max[a] = marker->search_min[a] + dim[a];
-      }
-      if (marker->search_max[a] < pat_max[a]) {
-        marker->search_max[a] = pat_max[a];
-        marker->search_min[a] = marker->search_max[a] - dim[a];
-      }
+  for (int a = 0; a < 2; a++) {
+    if (marker->search_min[a] > pat_min[a]) {
+      marker->search_min[a] = pat_min[a];
+      marker->search_max[a] = marker->search_min[a] + dim[a];
+    }
+    if (marker->search_max[a] < pat_max[a]) {
+      marker->search_max[a] = pat_max[a];
+      marker->search_min[a] = marker->search_max[a] - dim[a];
     }
   }
 }
diff --git a/source/blender/editors/space_clip/clip_buttons.c b/source/blender/editors/space_clip/clip_buttons.c
index ab3d1e73d62..72df2b74b11 100644
--- a/source/blender/editors/space_clip/clip_buttons.c
+++ b/source/blender/editors/space_clip/clip_buttons.c
@@ -303,7 +303,7 @@ static void marker_block_handler(bContext *C, void *arg_cb, int event)
       cb->marker->pattern_corners[a][1] *= scale_y;
     }
 
-    BKE_tracking_marker_clamp(cb->marker, CLAMP_SEARCH_DIM);
+    BKE_tracking_marker_clamp_search_size(cb->marker);
 
     ok = true;
   }
@@ -319,7 +319,7 @@ static void marker_block_handler(bContext *C, void *arg_cb, int event)
     sub_v2_v2v2(cb->marker->search_min, delta, side);
     add_v2_v2v2(cb->marker->search_max, delta, side);
 
-    BKE_tracking_marker_clamp(cb->marker, CLAMP_SEARCH_POS);
+    BKE_tracking_marker_clamp_search_position(cb->marker);
 
     ok = true;
   }
@@ -340,7 +340,7 @@ static void marker_block_handler(bContext *C, void *arg_cb, int event)
     cb->marker->search_max[0] += dim[0];
     cb->marker->search_max[1] += dim[1];
 
-    BKE_tracking_marker_clamp(cb->marker, CLAMP_SEARCH_DIM);
+    BKE_tracking_marker_clamp_search_size(cb->marker);
 
     ok = true;
   }
diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c
index 015a8d2210f..acf8cc06bd9 100644
--- a/source/blender/editors/space_clip/tracking_ops.c
+++ b/source/blender/editors/space_clip/tracking_ops.c
@@ -849,7 +849,7 @@ static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event)
             }
           }
 
-          BKE_tracking_marker_clamp(data->marker, CLAMP_SEARCH_DIM);
+          BKE_tracking_marker_clamp_search_size(data->marker);
         }
         else if (data->action == SLIDE_ACTION_OFFSET) {
           const float d[2] = {dx, dy};
@@ -870,10 +870,8 @@ static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event)
             copy_v2_v2(data->pos, spos);
           }
 
-          /* Currently only patterns are allowed to have such
-           * combination of event and data.
-           */
-          BKE_tracking_marker_clamp(data->marker, CLAMP_SEARCH_DIM);
+          /* Currently only patterns are allowed to have such combination of event and data. */
+          BKE_tracking_marker_clamp_search_size(data->marker);
         }
         else if (data->action == SLIDE_ACTION_TILT_SIZE) {
           const float mouse_delta[2] = {dx, dy};
@@ -917,7 +915,7 @@ static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event)
             data->corners[a][1] = (vec[1] * cosf(angle) + vec[0] * sinf(angle)) / data->height;
           }
 
-          BKE_tracking_marker_clamp(data->marker, CLAMP_SEARCH_DIM);
+          BKE_tracking_marker_clamp_search_size(data->marker);
         }
       }
       else if (data->area == TRACK_AREA_SEARCH) {
@@ -928,7 +926,7 @@ static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event)
           data->min[1] = data->old_search_min[1] + dy;
           data->max[1] = data->old_search_max[1] - dy;
 
-          BKE_tracking_marker_clamp(data->marker, CLAMP_SEARCH_DIM);
+          BKE_tracking_marker_clamp_search_size(data->marker);
         }
         else if (data->area == TRACK_AREA_SEARCH) {
           const float d[2] = {dx, dy};
@@ -936,7 +934,7 @@ static int slide_marker_modal(bContext *C, wmOperator *op, const wmEvent *event)
           add_v2_v2v2(data->max, data->old_search_max, d);
         }
 
-        BKE_tracking_marker_clamp(data->marker, CLAMP_SEARCH_POS);
+        BKE_tracking_marker_clamp_search_position(data->marker);
       }
 
       data->marker->flag &= ~MARKER_TRACKED;
diff --git a/source/blender/editors/transform/transform_convert_tracking.c b/source/blender/editors/transform/transform_convert_tracking.c
index 6b8a6f0a215..90ca2805008 100644
--- a/source/blender/editors/transform/transform_convert_tracking.c
+++ b/source/blender/editors/transform/transform_convert_tracking.c
@@ -712,23 +712,23 @@ void recalcData_tracking(TransInfo *t)
 
         if (t->mode == TFM_TRANSLATION) {
           if (TRACK_AREA_SELECTED(track, TRACK_AREA_PAT)) {
-            BKE_tracking_marker_clamp(marker, CLAMP_PAT_POS);
+            BKE_tracking_marker_clamp_pattern_position(marker);
           }
           if (TRACK_AREA_SELECTED(track, TRACK_AREA_SEARCH)) {
-            BKE_tracking_marker_clamp(marker, CLAMP_SEARCH_POS);
+            BKE_tracking_marker_clamp_search_position(marker);
           }
         }
         else if (t->mode == TFM_RESIZE) {
           if (TRACK_AREA_SELECTED(track, TRACK_AREA_PAT)) {
-            BKE_tracking_marker_clamp(marker, CLAMP_SEARCH_DIM);
+            BKE_tracking_marker_clamp_search_size(marker);
           }
           if (TRACK_AREA_

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list