[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