[Bf-blender-cvs] [9e88cfbe0ca] retopo_transform: added retopo mode, updated transform ops

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


Commit: 9e88cfbe0ca254909cf3c1c45ac18195d6559e83
Author: jon denning
Date:   Tue Jun 28 11:46:00 2022 -0400
Branches: retopo_transform
https://developer.blender.org/rB9e88cfbe0ca254909cf3c1c45ac18195d6559e83

added retopo mode, updated transform ops

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

M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform_mode_translate.c
M	source/blender/editors/transform/transform_ops.c
M	source/blender/editors/transform/transform_snap.c
M	source/blender/editors/transform/transform_snap_object.cc
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_scene.c

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

diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 142a4baf701..869748a6452 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -6765,7 +6765,9 @@ class VIEW3D_PT_snapping(Panel):
         layout = self.layout
         col = layout.column()
         col.active = tool_settings.use_snap
+
         col.label(text="Snap To")
+
         col.prop(tool_settings, "snap_elements", expand=True)
 
         col.separator()
@@ -6779,9 +6781,10 @@ class VIEW3D_PT_snapping(Panel):
                 row.prop(tool_settings, "snap_target", expand=True)
 
             if obj:
+                show_target_options = object_mode == 'EDIT' and obj.type not in {'LATTICE', 'META', 'FONT'}
                 col.label(text="Target Selection")
                 col_targetsel = col.column(align=True)
-                if object_mode == 'EDIT' and obj.type not in {'LATTICE', 'META', 'FONT'}:
+                if show_target_options:
                     # active_use_self = True
                     # active_use_self &= not (tool_settings.use_proportional_edit and obj.type == 'MESH')
                     # active_use_self &= tool_settings.use_snap_edit
@@ -6789,6 +6792,8 @@ class VIEW3D_PT_snapping(Panel):
                     col_targetsel.prop(tool_settings, "use_snap_edit", text="Include Edited", icon='OUTLINER_DATA_MESH')
                     col_targetsel.prop(tool_settings, "use_snap_nonedit", text="Include Non-Edited", icon='OUTLINER_OB_MESH')
                 col_targetsel.prop(tool_settings, "use_snap_selectable", text="Exclude Non-Selectable", icon='RESTRICT_SELECT_OFF')
+                if show_target_options:
+                    col_targetsel.prop(tool_settings, "use_snap_retopology_mode", text="Use Retopology Mode", icon='MOD_MESHDEFORM')
 
                 if object_mode in {'OBJECT', 'POSE', 'EDIT', 'WEIGHT_PAINT'}:
                     col.prop(tool_settings, "use_snap_align_rotation")
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index d9e23b98c66..0e0bdae792b 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -1979,6 +1979,9 @@ void transformApply(bContext *C, TransInfo *t)
 {
   t->context = C;
 
+  /* TODO(gfxcoder): removed debug print */
+  printf("\n\ntransformApply\n");
+
   if (t->redraw == TREDRAW_HARD) {
     selectConstraint(t);
     if (t->transform) {
diff --git a/source/blender/editors/transform/transform_mode_translate.c b/source/blender/editors/transform/transform_mode_translate.c
index 65690f9069d..3f3efa54b6b 100644
--- a/source/blender/editors/transform/transform_mode_translate.c
+++ b/source/blender/editors/transform/transform_mode_translate.c
@@ -469,6 +469,8 @@ static void applyTranslation(TransInfo *t, const int UNUSED(mval[2]))
       add_v3_v3(global_dir, values_ofs);
     }
 
+    /* TODO(gfxcoder): removed debug print */
+    printf("applyTranslation -> applySnappingAsGroup()\n");
     t->tsnap.snapElem = SCE_SNAP_MODE_NONE;
     applySnappingAsGroup(t, global_dir);
     transform_snap_grid(t, global_dir);
@@ -514,6 +516,8 @@ static void applyTranslation(TransInfo *t, const int UNUSED(mval[2]))
   mul_v3_m3v3(t->values_final, t->spacemtx_inv, global_dir);
   headerTranslation(t, (t->con.mode & CON_APPLY) ? t->values_final : global_dir, str);
 
+  /* TODO(gfxcoder): removed debug print */
+  printf("applyTranslation -> recalcData()\n");
   recalcData(t);
   ED_area_status_text(t->area, str);
 }
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index e0d6ecac6f9..6f0e4ffcf35 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -656,7 +656,7 @@ void Transform_Properties(struct wmOperatorType *ot, int flags)
 
   if (flags & P_SNAP) {
     // TODO: rename `snap` to `use_snap`?
-    prop = RNA_def_boolean(ot->srna, "snap", 0, "Use Snapping Options", "");
+    prop = RNA_def_boolean(ot->srna, "snap", false, "Use Snapping Options", "");
     RNA_def_property_flag(prop, PROP_HIDDEN);
 
     prop = RNA_def_enum(
@@ -678,18 +678,34 @@ void Transform_Properties(struct wmOperatorType *ot, int flags)
       RNA_def_property_flag(prop, PROP_HIDDEN);
       prop = RNA_def_boolean(ot->srna, "use_snap_edit", true, "Target: Include Edit", "");
       RNA_def_property_flag(prop, PROP_HIDDEN);
-      prop = RNA_def_boolean(ot->srna, "use_snap_nonedit", true, "Target: Include Non-Edited", "");
+      prop = RNA_def_boolean(
+          ot->srna, "use_snap_nonedit", false, "Target: Include Non-Edited", "");
       RNA_def_property_flag(prop, PROP_HIDDEN);
       prop = RNA_def_boolean(
           ot->srna, "use_snap_selectable", true, "Target: Exclude Non-Selectable", "");
       RNA_def_property_flag(prop, PROP_HIDDEN);
+      prop = RNA_def_boolean(ot->srna,
+                             "use_snap_retopology_mode",
+                             true,
+                             "Target: Retopology Mode",
+                             "Snap grabbed geometry to vertices and edges of edited objects (if "
+                             "enabled) and to faces of non-edited objects (if enabled)");
+      RNA_def_property_flag(prop, PROP_HIDDEN);
+
+      /* Face Nearest options */
+      prop = RNA_def_boolean(
+          ot->srna, "use_snap_to_same_target", false, "Snap to Same Target", "");
+      RNA_def_property_flag(prop, PROP_HIDDEN);
+      prop = RNA_def_int(
+          ot->srna, "snap_face_nearest_steps", 1, 1, 32767, "Face Nearest Steps", "", 1, 32767);
+      RNA_def_property_flag(prop, PROP_HIDDEN);
 
       prop = RNA_def_float_vector(
           ot->srna, "snap_point", 3, NULL, -FLT_MAX, FLT_MAX, "Point", "", -FLT_MAX, FLT_MAX);
       RNA_def_property_flag(prop, PROP_HIDDEN);
 
       if (flags & P_ALIGN_SNAP) {
-        prop = RNA_def_boolean(ot->srna, "snap_align", 0, "Align with Point Normal", "");
+        prop = RNA_def_boolean(ot->srna, "snap_align", false, "Align with Point Normal", "");
         RNA_def_property_flag(prop, PROP_HIDDEN);
         prop = RNA_def_float_vector(
             ot->srna, "snap_normal", 3, NULL, -FLT_MAX, FLT_MAX, "Normal", "", -FLT_MAX, FLT_MAX);
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index dfe290c6425..ff65f78742a 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -128,11 +128,12 @@ bool activeSnap(const TransInfo *t)
 
 bool activeSnap_SnappingIndividual(const TransInfo *t)
 {
-  if (activeSnap(t) && t->tsnap.mode & SCE_SNAP_MODE_FACE_NEAREST) {
+  if (t->tsnap.mode & SCE_SNAP_MODE_FACE_NEAREST) {
+    // Face Nearest snapping always snaps individual vertices
     return true;
   }
 
-  if (!t->tsnap.project) {
+  if (t->tsnap.mode & SCE_SNAP_MODE_FACE_RAYCAST && !t->tsnap.project) {
     return false;
   }
 
@@ -157,10 +158,6 @@ bool activeSnap_SnappingAsGroup(const TransInfo *t)
     return false;
   }
 
-  if (t->tsnap.mode == SCE_SNAP_MODE_FACE_NEAREST) {
-    return false;
-  }
-
   if (doForceIncrementSnap(t)) {
     return false;
   }
@@ -368,8 +365,10 @@ eRedrawFlag handleSnapping(TransInfo *t, const wmEvent *event)
   return status;
 }
 
-static bool applyFaceProject(TransInfo *t, TransDataContainer *tc, TransData *td)
+static bool applyFaceProject_Individual(TransInfo *t, TransDataContainer *tc, TransData *td)
 {
+  /* TODO(gfxcoder): remove debug print */
+  printf("applyFaceProject_Individual: %d\n", t->tsnap.flag);
   if (!(t->tsnap.mode & SCE_SNAP_MODE_FACE_RAYCAST)) {
     return false;
   }
@@ -493,7 +492,10 @@ static void applyFaceNearest(TransInfo *t, TransDataContainer *tc, TransData *td
 
 void applySnappingIndividual(TransInfo *t)
 {
+  /* TODO(gfxcoder): remove debug print */
+  printf("applySnappingIndividual\n");
   if (!activeSnap_SnappingIndividual(t)) {
+    printf("  skipping!\n");
     return;
   }
 
@@ -511,8 +513,11 @@ void applySnappingIndividual(TransInfo *t)
 
       /* 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) {
+      bool hit = false;
+      if (t->tsnap.flag & SCE_SNAP_PROJECT && t->tsnap.mode & SCE_SNAP_MODE_FACE_RAYCAST) {
+        hit = applyFaceProject_Individual(t, tc, td);
+      }
+      if (!hit && t->tsnap.mode & SCE_SNAP_MODE_FACE_NEAREST) {
         applyFaceNearest(t, tc, td);
       }
 #if 0 /* TODO: support this? */
@@ -574,7 +579,10 @@ void applyGridAbsolute(TransInfo *t)
 
 void applySnappingAsGroup(TransInfo *t, float *vec)
 {
+  /* TODO(gfxcoder): remove debug print */
+  printf("applySnappingAsGroup\n");
   if (!activeSnap_SnappingAsGroup(t)) {
+    printf("  skipping!\n");
     return;
   }
 
@@ -738,6 +746,7 @@ static eSnapTargetSelect snap_select_target_get(TransInfo *t)
   bool use_snap_edit = (t->tsnap.target_select & SCE_SNAP_TARGET_NOT_EDITED) == 0;
   bool use_snap_nonedit = (t->tsnap.target_select & SCE_SNAP_TARGET_NOT_NONEDITED) == 0;
   bool use_snap_selectable_only = (t->tsnap.target_select & SCE_SNAP_TARGET_ONLY_SELECTABLE) != 0;
+  // bool use_retopology_mode = (t->tsnap.target_select & SCE_SNAP_TARGET_RETOPOLOGY_MODE) != 0;
 
   if (ELEM(t->spacetype, SPACE_VIEW3D, SPACE_IMAGE) && !(t->options & CTX_CAMERA)) {
     if (base_act && (base_act->object->mode & OB_MODE_PARTICLE_EDIT)) {
@@ -918,6 +927,13 @@ void initSnapping(TransInfo *t, wmOperator *op)
                            RNA_property_boolean_get(op->ptr, prop),
                            SCE_SNAP_TARGET_ONLY_SELECTABLE);
       }
+
+      if ((prop = RNA_struct_find_property(op->ptr, "use_snap_retopology_mode")) &&
+          RNA_property_is_set(op->ptr, prop)) {
+        SET_FLAG_FROM_TEST(t->tsnap.target_select,
+                           RNA_property_boolean_get(op->ptr, prop),
+                           SCE_SNAP_TARGET_RETOPOLOGY_MODE);
+      }
     }
   }
   /* use scene defaults only when transform

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list