[Bf-blender-cvs] [dd14ea18190] master: Cleanup: split CalcSnapGeometry in smaller functions

Germano Cavalcante noreply at git.blender.org
Tue Jun 29 23:09:33 CEST 2021


Commit: dd14ea18190ff27082009f73a556569a43377a71
Author: Germano Cavalcante
Date:   Tue Jun 29 17:38:34 2021 -0300
Branches: master
https://developer.blender.org/rBdd14ea18190ff27082009f73a556569a43377a71

Cleanup: split CalcSnapGeometry in smaller functions

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

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

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

diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 34a380f9199..1749a63e1dc 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -76,7 +76,10 @@ static bool doForceIncrementSnap(const TransInfo *t);
 static void setSnappingCallback(TransInfo *t);
 
 /* static void CalcSnapGrid(TransInfo *t, float *vec); */
-static void CalcSnapGeometry(TransInfo *t, float *vec);
+static void snap_calc_view3d_fn(TransInfo *t, float *vec);
+static void snap_calc_uv_fn(TransInfo *t, float *vec);
+static void snap_calc_node_fn(TransInfo *t, float *vec);
+static void snap_calc_sequencer_fn(TransInfo *t, float *vec);
 
 static void TargetSnapMedian(TransInfo *t);
 static void TargetSnapCenter(TransInfo *t);
@@ -752,9 +755,17 @@ void freeSnapping(TransInfo *t)
 
 static void setSnappingCallback(TransInfo *t)
 {
-  t->tsnap.calcSnap = CalcSnapGeometry;
-
-  if (t->spacetype == SPACE_SEQ) {
+  if (t->spacetype == SPACE_VIEW3D) {
+    t->tsnap.calcSnap = snap_calc_view3d_fn;
+  }
+  else if (t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH) {
+    t->tsnap.calcSnap = snap_calc_uv_fn;
+  }
+  else if (t->spacetype == SPACE_NODE) {
+    t->tsnap.calcSnap = snap_calc_node_fn;
+  }
+  else if (t->spacetype == SPACE_SEQ) {
+    t->tsnap.calcSnap = snap_calc_sequencer_fn;
     /* The target is calculated along with the snap point. */
     return;
   }
@@ -878,97 +889,105 @@ void getSnapPoint(const TransInfo *t, float vec[3])
 /** \} */
 
 /* -------------------------------------------------------------------- */
-/** \name Calc Snap (Generic)
+/** \name Calc Snap
  * \{ */
 
-static void CalcSnapGeometry(TransInfo *t, float *vec)
+static void snap_calc_view3d_fn(TransInfo *t, float *UNUSED(vec))
 {
-  if (t->spacetype == SPACE_VIEW3D) {
-    float loc[3];
-    float no[3];
-    float mval[2];
-    bool found = false;
-    short snap_elem = 0;
-    float dist_px = SNAP_MIN_DISTANCE; /* Use a user defined value here. */
+  BLI_assert(t->spacetype == SPACE_VIEW3D);
+  float loc[3];
+  float no[3];
+  float mval[2];
+  bool found = false;
+  short snap_elem = 0;
+  float dist_px = SNAP_MIN_DISTANCE; /* Use a user defined value here. */
 
-    mval[0] = t->mval[0];
-    mval[1] = t->mval[1];
+  mval[0] = t->mval[0];
+  mval[1] = t->mval[1];
 
-    if (t->tsnap.mode & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE |
-                         SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) {
-      zero_v3(no); /* objects won't set this */
-      snap_elem = snapObjectsTransform(t, mval, &dist_px, loc, no);
-      found = snap_elem != 0;
-    }
-    if ((found == false) && (t->tsnap.mode & SCE_SNAP_MODE_VOLUME)) {
-      found = peelObjectsTransform(
-          t, mval, (t->settings->snap_flag & SCE_SNAP_PEEL_OBJECT) != 0, loc, no, NULL);
+  if (t->tsnap.mode & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE |
+                       SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) {
+    zero_v3(no); /* objects won't set this */
+    snap_elem = snapObjectsTransform(t, mval, &dist_px, loc, no);
+    found = snap_elem != 0;
+  }
+  if ((found == false) && (t->tsnap.mode & SCE_SNAP_MODE_VOLUME)) {
+    found = peelObjectsTransform(
+        t, mval, (t->settings->snap_flag & SCE_SNAP_PEEL_OBJECT) != 0, loc, no, NULL);
 
-      if (found) {
-        snap_elem = SCE_SNAP_MODE_VOLUME;
-      }
+    if (found) {
+      snap_elem = SCE_SNAP_MODE_VOLUME;
     }
+  }
+
+  if (found == true) {
+    copy_v3_v3(t->tsnap.snapPoint, loc);
+    copy_v3_v3(t->tsnap.snapNormal, no);
+
+    t->tsnap.status |= POINT_INIT;
+  }
+  else {
+    t->tsnap.status &= ~POINT_INIT;
+  }
+
+  t->tsnap.snapElem = (char)snap_elem;
+}
+
+static void snap_calc_uv_fn(TransInfo *t, float *UNUSED(vec))
+{
+  BLI_assert(t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH);
+  if (t->tsnap.mode & SCE_SNAP_MODE_VERTEX) {
+    float co[2];
+
+    UI_view2d_region_to_view(&t->region->v2d, t->mval[0], t->mval[1], &co[0], &co[1]);
+
+    uint objects_len = 0;
+    Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
+        t->view_layer, NULL, &objects_len);
 
-    if (found == true) {
-      copy_v3_v3(t->tsnap.snapPoint, loc);
-      copy_v3_v3(t->tsnap.snapNormal, no);
+    float dist_sq = FLT_MAX;
+    if (ED_uvedit_nearest_uv_multi(
+            t->scene, objects, objects_len, co, &dist_sq, t->tsnap.snapPoint)) {
+      t->tsnap.snapPoint[0] *= t->aspect[0];
+      t->tsnap.snapPoint[1] *= t->aspect[1];
 
       t->tsnap.status |= POINT_INIT;
     }
     else {
       t->tsnap.status &= ~POINT_INIT;
     }
-
-    t->tsnap.snapElem = (char)snap_elem;
+    MEM_freeN(objects);
   }
-  else if (t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH) {
-    if (t->tsnap.mode & SCE_SNAP_MODE_VERTEX) {
-      float co[2];
-
-      UI_view2d_region_to_view(&t->region->v2d, t->mval[0], t->mval[1], &co[0], &co[1]);
+}
 
-      uint objects_len = 0;
-      Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
-          t->view_layer, NULL, &objects_len);
+static void snap_calc_node_fn(TransInfo *t, float *UNUSED(vec))
+{
+  BLI_assert(t->spacetype == SPACE_NODE);
+  if (t->tsnap.mode & (SCE_SNAP_MODE_NODE_X | SCE_SNAP_MODE_NODE_Y)) {
+    float loc[2];
+    float dist_px = SNAP_MIN_DISTANCE; /* Use a user defined value here. */
+    char node_border;
 
-      float dist_sq = FLT_MAX;
-      if (ED_uvedit_nearest_uv_multi(
-              t->scene, objects, objects_len, co, &dist_sq, t->tsnap.snapPoint)) {
-        t->tsnap.snapPoint[0] *= t->aspect[0];
-        t->tsnap.snapPoint[1] *= t->aspect[1];
+    if (snapNodesTransform(t, t->mval, loc, &dist_px, &node_border)) {
+      copy_v2_v2(t->tsnap.snapPoint, loc);
+      t->tsnap.snapNodeBorder = node_border;
 
-        t->tsnap.status |= POINT_INIT;
-      }
-      else {
-        t->tsnap.status &= ~POINT_INIT;
-      }
-      MEM_freeN(objects);
+      t->tsnap.status |= POINT_INIT;
+    }
+    else {
+      t->tsnap.status &= ~POINT_INIT;
     }
   }
-  else if (t->spacetype == SPACE_NODE) {
-    if (t->tsnap.mode & (SCE_SNAP_MODE_NODE_X | SCE_SNAP_MODE_NODE_Y)) {
-      float loc[2];
-      float dist_px = SNAP_MIN_DISTANCE; /* Use a user defined value here. */
-      char node_border;
-
-      if (snapNodesTransform(t, t->mval, loc, &dist_px, &node_border)) {
-        copy_v2_v2(t->tsnap.snapPoint, loc);
-        t->tsnap.snapNodeBorder = node_border;
+}
 
-        t->tsnap.status |= POINT_INIT;
-      }
-      else {
-        t->tsnap.status &= ~POINT_INIT;
-      }
-    }
+static void snap_calc_sequencer_fn(TransInfo *t, float *vec)
+{
+  BLI_assert(t->spacetype == SPACE_SEQ);
+  if (transform_snap_sequencer_apply(t, vec, t->tsnap.snapPoint)) {
+    t->tsnap.status |= (POINT_INIT | TARGET_INIT);
   }
-  else if (t->spacetype == SPACE_SEQ) {
-    if (transform_snap_sequencer_apply(t, vec, t->tsnap.snapPoint)) {
-      t->tsnap.status |= (POINT_INIT | TARGET_INIT);
-    }
-    else {
-      t->tsnap.status &= ~(POINT_INIT | TARGET_INIT);
-    }
+  else {
+    t->tsnap.status &= ~(POINT_INIT | TARGET_INIT);
   }
 }



More information about the Bf-blender-cvs mailing list