[Bf-blender-cvs] [0b25d923e53] retopo_transform: use face raycast initially with face nearest as fallback

jon denning noreply at git.blender.org
Sat Jul 16 13:00:36 CEST 2022


Commit: 0b25d923e53c896e5e121a9c7aeb5592cf6a7d67
Author: jon denning
Date:   Tue Jun 7 09:31:48 2022 -0400
Branches: retopo_transform
https://developer.blender.org/rB0b25d923e53c896e5e121a9c7aeb5592cf6a7d67

use face raycast initially with face nearest as fallback

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

M	source/blender/editors/include/ED_transform.h
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform_snap.c
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index 24fda1042ac..82cc518f029 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -24,7 +24,7 @@ void transform_operatortypes(void);
 /* ******************** Macros & Prototypes *********************** */
 
 /* MODE AND NUMINPUT FLAGS */
-typedef enum eTfmMode {
+typedef enum {
   TFM_INIT = -1,
   TFM_DUMMY,
   TFM_TRANSLATION,
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 8e0ea82bb32..fa99da2fe1f 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -1580,7 +1580,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
     if (transformModeUseSnap(t)) {
       if (!(t->modifiers & MOD_SNAP) != !(t->tsnap.flag & SCE_SNAP)) {
         /* Type is #eSnapFlag, but type must match various snap attributes in #ToolSettings. */
-        char *snap_flag_ptr;
+        short *snap_flag_ptr;
 
         wmMsgParams_RNA msg_key_params = {{0}};
         RNA_pointer_create(&t->scene->id, &RNA_ToolSettings, ts, &msg_key_params.ptr);
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 3649e69281d..e69e996ca71 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -368,10 +368,10 @@ eRedrawFlag handleSnapping(TransInfo *t, const wmEvent *event)
   return status;
 }
 
-static void applyFaceProject(TransInfo *t, TransDataContainer *tc, TransData *td)
+static bool applyFaceProject(TransInfo *t, TransDataContainer *tc, TransData *td)
 {
   if (!(t->tsnap.mode & SCE_SNAP_MODE_FACE_RAYCAST)) {
-    return;
+    return false;
   }
 
   float iloc[3], loc[3], no[3];
@@ -388,7 +388,7 @@ static void applyFaceProject(TransInfo *t, TransDataContainer *tc, TransData *td
 
   if (ED_view3d_project_float_global(t->region, iloc, mval_fl, V3D_PROJ_TEST_NOP) !=
       V3D_PROJ_RET_OK) {
-    return;
+    return false;
   }
 
   eSnapMode hit = ED_transform_snap_object_project_view3d(
@@ -410,7 +410,7 @@ static void applyFaceProject(TransInfo *t, TransDataContainer *tc, TransData *td
       loc,
       no);
   if (hit != SCE_SNAP_MODE_FACE_RAYCAST) {
-    return;
+    return false;
   }
 
 #if 0
@@ -440,6 +440,7 @@ static void applyFaceProject(TransInfo *t, TransDataContainer *tc, TransData *td
 
     /* TODO: support constraints for rotation too? see #ElementRotation. */
   }
+  return true;
 }
 
 static void applyFaceNearest(TransInfo *t, TransDataContainer *tc, TransData *td)
@@ -532,13 +533,17 @@ void applySnappingIndividual(TransInfo *t)
       if ((t->flag & T_PROP_EDIT) && (td->factor == 0.0f)) {
         continue;
       }
-    }
 
-    applyFaceProject(t, tc, td);
-    applyFaceNearest(t, tc, td);
+      /* If both face raycast and face nearest methods are enabled, start with face raycast and
+       * fallback to face nearest raycast does not hit. */
+      bool hit = applyFaceProject(t, tc, td);
+      if (!hit) {
+        applyFaceNearest(t, tc, td);
+      }
 #if 0 /* TODO: support this? */
       constraintTransLim(t, td);
 #endif
+    }
   }
 }
 
@@ -863,7 +868,7 @@ static void initSnappingMode(TransInfo *t)
 void initSnapping(TransInfo *t, wmOperator *op)
 {
   ToolSettings *ts = t->settings;
-  eSnapTarget snap_target = ts->snap_target;
+  eSnapSourceSelect snap_source = ts->snap_target;
 
   resetSnapping(t);
   t->tsnap.mode = snap_mode_from_spacetype(t);
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 86045fe2cdb..3524d61a52c 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -152,7 +152,7 @@ const EnumPropertyItem rna_enum_snap_element_items[] = {
     {SCE_SNAP_MODE_VERTEX, "VERTEX", ICON_SNAP_VERTEX, "Vertex", "Snap to vertices"},
     {SCE_SNAP_MODE_EDGE, "EDGE", ICON_SNAP_EDGE, "Edge", "Snap to edges"},
     {SCE_SNAP_MODE_FACE_RAYCAST,
-     "FACE",
+     "FACE", /* TODO(@gfxcoder): replace with "FACE_RAYCAST" as "FACE" is not descriptive. */
      ICON_SNAP_FACE,
      "Face Project",
      "Snap by projecting onto faces"},



More information about the Bf-blender-cvs mailing list