[Bf-blender-cvs] [afe11eff8a9] retopo_transform: tweaked snap options and snap option descriptions

jon denning noreply at git.blender.org
Wed Jul 20 23:19:49 CEST 2022


Commit: afe11eff8a96656dc456d075270ce473b81ee8e3
Author: jon denning
Date:   Wed Jul 20 17:12:13 2022 -0400
Branches: retopo_transform
https://developer.blender.org/rBafe11eff8a96656dc456d075270ce473b81ee8e3

tweaked snap options and snap option descriptions

- retopo mode changes layout and options under snap menu
- retopo mode auto sets defaults on options not shown in menu
- reworked descriptions of snap options

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

M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/editors/transform/transform_snap.c
M	source/blender/editors/transform/transform_snap_object.cc
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 f352c8fbec7..ab2ad3c3502 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -632,6 +632,14 @@ class VIEW3D_HT_header(Header):
             row = layout.row(align=True)
             row.prop(tool_settings, "use_snap", text="")
 
+            if object_mode == 'EDIT' and obj.type == 'MESH':
+                row.prop(
+                    tool_settings,
+                    "use_snap_retopology_mode",
+                    text="",
+                    icon='MOD_MESHDEFORM',
+                )
+
             sub = row.row(align=True)
             sub.popover(
                 panel="VIEW3D_PT_snapping",
@@ -6810,45 +6818,65 @@ class VIEW3D_PT_snapping(Panel):
         obj = context.active_object
         object_mode = obj.mode if obj else 'OBJECT'
         show_target_options = object_mode == 'EDIT' and obj.type not in {'LATTICE', 'META', 'FONT'}
+        multiple_objects = len(context.objects_in_mode) > 1
+        retopo_mode = object_mode == 'EDIT' and tool_settings.use_snap_retopology_mode
 
         layout = self.layout
         col = layout.column()
 
-        if snap_elements != {'INCREMENT'} and show_target_options:
+        if show_target_options:
             col.prop(
                 tool_settings,
                 "use_snap_retopology_mode",
-                text="Use Retopology Mode",
+                text="Retopology Mode",
                 # icon='MOD_MESHDEFORM',
             )
 
-        col.label(text="Snap To")
-        col.prop(tool_settings, "snap_elements", expand=True)
+        if not retopo_mode:
+            col_snapto = col.column(align=True, heading="Snap To")
+            col_snapto.prop(tool_settings, "snap_elements", expand=True)
+        else:
+            col_snapto_edited = col.column(align=True, heading="Snap To Edited")
+            col_snapto_edited.prop_enum(tool_settings, "snap_elements", 'VERTEX')
+            col_snapto_edited.prop_enum(tool_settings, "snap_elements", 'EDGE')
+            col_snapto_edited.prop_enum(tool_settings, "snap_elements", 'EDGE_MIDPOINT')
+            col_snapto_edited.prop_enum(tool_settings, "snap_elements", 'EDGE_PERPENDICULAR')
 
-        if 'INCREMENT' in snap_elements:
-            col.prop(tool_settings, "use_snap_grid_absolute")
+            col_snapto_nonedited = col.column(align=True, heading="Snap To Non-Edited")
+            col_snapto_nonedited.prop_enum(tool_settings, "snap_elements", 'FACE')
+            col_snapto_nonedited.prop_enum(tool_settings, "snap_elements", 'FACE_NEAREST')
 
         if snap_elements - {'INCREMENT', 'FACE_NEAREST'}:
-            col.label(text="Snap With")
-            row = col.row(align=True)
-            row.prop(tool_settings, "snap_target", expand=True)
+            col_snapwith = col.column(align=True)
+            col_snapwith.label(text='Snap With')
+            col_snapwith.row().prop(tool_settings, "snap_target", expand=True)
 
         if snap_elements != {'INCREMENT'}:
-            col.label(text="Target Selection")
-            col_targetsel = col.column(align=True)
-            if show_target_options:
-                col_targetsel.prop(
-                    tool_settings,
-                    "use_snap_self",
-                    text="Include Active",
-                    icon='EDITMODE_HLT',
-                )
-                col_targetsel.prop(
-                    tool_settings,
-                    "use_snap_edit",
-                    text="Include Edited",
-                    icon='OUTLINER_DATA_MESH',
-                )
+            col_targetsel = col.column(align=True, heading="Target Selection")
+            if not retopo_mode and show_target_options:
+                if not multiple_objects:
+                    col_targetsel.prop(
+                        tool_settings,
+                        'use_snap_self',
+                        text="Include Edited",
+                        # description='Snap onto edited objects (Edit Mode Only)',
+                        icon='EDITMODE_HLT',
+                    )
+                else:
+                    col_targetsel.prop(
+                        tool_settings,
+                        "use_snap_self",
+                        text="Include Active Edited",
+                        # description='Snap onto active edited object (Edit Mode Only)',
+                        icon='EDITMODE_HLT',
+                    )
+                    col_targetsel.prop(
+                        tool_settings,
+                        "use_snap_edit",
+                        text="Include Other Edited",
+                        # description='Snap onto non-active edited object(s) (Edit Mode Only)',
+                        icon='OUTLINER_DATA_MESH',
+                    )
                 col_targetsel.prop(
                     tool_settings,
                     "use_snap_nonedit",
@@ -6862,26 +6890,29 @@ class VIEW3D_PT_snapping(Panel):
                 icon='RESTRICT_SELECT_OFF',
             )
 
-            col.label(text="Options")
+        col_options = col.column(heading="Options")
+        if 'INCREMENT' in snap_elements:
+            col_options.prop(tool_settings, "use_snap_grid_absolute")
+        if snap_elements != {'INCREMENT'}:
             # TODO(@gfxcoder): Does WEIGHT_PAINT have any snapping?
             if object_mode in {'OBJECT', 'POSE', 'EDIT', 'WEIGHT_PAINT'}:
-                col.prop(tool_settings, "use_snap_align_rotation")
+                col_options.prop(tool_settings, "use_snap_align_rotation")
             if snap_elements != {'FACE_NEAREST'}:
-                col.prop(tool_settings, "use_snap_backface_culling")
-            if 'FACE' in snap_elements:
-                col.prop(tool_settings, "use_snap_project")
+                col_options.prop(tool_settings, "use_snap_backface_culling")
+            if 'FACE' in snap_elements and not retopo_mode:
+                col_options.prop(tool_settings, "use_snap_project")
             if 'FACE_NEAREST' in snap_elements:
-                col.prop(tool_settings, 'use_snap_to_same_target')
+                col_options.prop(tool_settings, 'use_snap_to_same_target')
                 if object_mode == 'EDIT':
-                    col.prop(tool_settings, 'snap_face_nearest_steps')
+                    col_options.prop(tool_settings, 'snap_face_nearest_steps')
             if 'VOLUME' in snap_elements:
-                col.prop(tool_settings, "use_snap_peel_object")
+                col_options.prop(tool_settings, "use_snap_peel_object")
 
-        col.label(text="Affect")
-        row = col.row(align=True)
-        row.prop(tool_settings, "use_snap_translate", text="Move", toggle=True)
-        row.prop(tool_settings, "use_snap_rotate", text="Rotate", toggle=True)
-        row.prop(tool_settings, "use_snap_scale", text="Scale", toggle=True)
+        if not retopo_mode:
+            row = col.row(align=True, heading="Affect")
+            row.prop(tool_settings, "use_snap_translate", text="Move", toggle=True)
+            row.prop(tool_settings, "use_snap_rotate", text="Rotate", toggle=True)
+            row.prop(tool_settings, "use_snap_scale", text="Scale", toggle=True)
 
 
 class VIEW3D_PT_proportional_edit(Panel):
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 35a344ba9e6..348c65054a2 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -168,9 +168,22 @@ bool activeSnap_SnappingAsGroup(const TransInfo *t)
   return true;
 }
 
+static bool useSnapRetopoMode(const TransInfo *t)
+{
+  if (t->spacetype != SPACE_VIEW3D || t->obedit_type != OB_MESH) {
+    /* Not the correct context for retopology mode. */
+    return false;
+  }
+  return t->settings->snap_flag & SCE_SNAP_RETOPOLOGY_MODE;
+}
+
 bool transformModeUseSnap(const TransInfo *t)
 {
   ToolSettings *ts = t->settings;
+  if (useSnapRetopoMode(t)) {
+    /* Always use snap when retopology mode is enabled. */
+    return true;
+  }
   if (t->mode == TFM_TRANSLATION) {
     return (ts->snap_transform_mode_flag & SCE_SNAP_TRANSFORM_MODE_TRANSLATE) != 0;
   }
@@ -845,6 +858,19 @@ static void initSnappingMode(TransInfo *t)
   }
 }
 
+static void initSnappingRetopoMode(TransInfo *t)
+{
+  if (!useSnapRetopoMode(t)) {
+    /* Not using retopology mode. */
+    return;
+  }
+
+  /* Enable all possible targets.  The targets will be filtered based on snap method. */
+  t->tsnap.target_select &= ~(SCE_SNAP_TARGET_NOT_ACTIVE | SCE_SNAP_TARGET_NOT_EDITED |
+                              SCE_SNAP_TARGET_NOT_NONEDITED);
+  t->tsnap.project = true;
+}
+
 void initSnapping(TransInfo *t, wmOperator *op)
 {
   ToolSettings *ts = t->settings;
@@ -962,6 +988,7 @@ void initSnapping(TransInfo *t, wmOperator *op)
   t->tsnap.source_select = snap_source;
 
   initSnappingMode(t);
+  initSnappingRetopoMode(t);
 }
 
 void freeSnapping(TransInfo *t)
diff --git a/source/blender/editors/transform/transform_snap_object.cc b/source/blender/editors/transform/transform_snap_object.cc
index f195a13fb6c..e329048aad6 100644
--- a/source/blender/editors/transform/transform_snap_object.cc
+++ b/source/blender/editors/transform/transform_snap_object.cc
@@ -1267,7 +1267,7 @@ static bool nearest_world_tree(SnapObjectContext *UNUSED(sctx),
 
   /* compute offset between init co and prev co in local space */
   float init_co_local[3], curr_co_local[3];
-  float delta_local[3];
+  float delta_local[3], delta_step[3];
   mul_v3_m4v3(init_co_local, imat, init_co);
   mul_v3_m4v3(curr_co_local, imat, curr_co);
   sub_v3_v3v3(delta_local, curr_co_local, init_co_local);
@@ -1290,8 +1290,9 @@ static bool nearest_world_tree(SnapObjectContext *UNUSED(sctx),
   *r_dist_sq = dist_sq;
 
   /* scale to make `snap_face_nearest_steps` steps */
-  float step_scale_factor = 1.0f / max_ff(1.0f, (float)params->face_nearest_steps);
-  mul_v3_fl(delta_local, step_scale_factor);
+  int steps = max_ii(1, params->face_nearest_steps);
+  float factor = 1.0f / (float)steps;
+  mul_v3_v3fl(delta_step, delta_local

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list