Fix T101343: useless Snapping menu in transform operators

Changes:
- Use the "snap_elements" property only for operators that support snapping to geometry.
- Remove unused properties:
  - "use_snap_to_same_target",
  - "snap_face_nearest_steps").
- Fix property with wrong name "use_snap_selectable_only" -> "use_snap_selectable"
- Fix use of dependent property flags.
- Remove redundant initialization of variables
- Simplify `poll_propety`. Only the "use_snap_project" is not hidden.

>>! In rBc484599687ba it's said:
>  These options are needed for Python tools to control snapping without requiring the tool settings to be adjusted.
If that's the case, there doesn't seem to be any need to display them in the redo panel.  Therefore:
- Hide snapping properties in redo panel.

Many properties have been added that can be independent of ToolSettings. Therefore:
- Save snapping properties in the operator itself. For Redo.
This commit is contained in:
Germano Cavalcante 2022-09-26 14:18:29 -03:00 committed by Philipp Oeser
parent a6c27ea49d
commit 1c8374978d
Notes: blender-bot 2023-02-14 01:52:41 +01:00
Referenced by issue #100749, Blender LTS: Maintenance Task 3.3
Referenced by issue #101343, Regression: useless Snapping menu in the adjustment popup of Edge bevel weight operator
3 changed files with 67 additions and 78 deletions

View File

@ -1573,40 +1573,59 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
}
}
if (t->flag & T_MODAL) {
/* do we check for parameter? */
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. */
short *snap_flag_ptr;
/* Save sanpping settings. */
if (prop = RNA_struct_find_property(op->ptr, "snap")) {
RNA_property_boolean_set(op->ptr, prop, (t->modifiers & MOD_SNAP) != 0);
wmMsgParams_RNA msg_key_params = {{0}};
RNA_pointer_create(&t->scene->id, &RNA_ToolSettings, ts, &msg_key_params.ptr);
if (prop = RNA_struct_find_property(op->ptr, "snap_elements")) {
RNA_property_enum_set(op->ptr, prop, t->tsnap.mode);
RNA_boolean_set(op->ptr, "use_snap_project", t->tsnap.project);
RNA_enum_set(op->ptr, "snap_target", t->tsnap.source_select);
if (t->spacetype == SPACE_NODE) {
snap_flag_ptr = &ts->snap_flag_node;
msg_key_params.prop = &rna_ToolSettings_use_snap_node;
}
else if (t->spacetype == SPACE_IMAGE) {
snap_flag_ptr = &ts->snap_uv_flag;
msg_key_params.prop = &rna_ToolSettings_use_snap_uv;
}
else if (t->spacetype == SPACE_SEQ) {
snap_flag_ptr = &ts->snap_flag_seq;
msg_key_params.prop = &rna_ToolSettings_use_snap_sequencer;
}
else {
snap_flag_ptr = &ts->snap_flag;
msg_key_params.prop = &rna_ToolSettings_use_snap;
}
eSnapTargetSelect target = t->tsnap.target_select;
RNA_boolean_set(op->ptr, "use_snap_self", (target & SCE_SNAP_TARGET_NOT_ACTIVE) != 0);
RNA_boolean_set(op->ptr, "use_snap_edit", (target & SCE_SNAP_TARGET_NOT_EDITED) != 0);
RNA_boolean_set(op->ptr, "use_snap_nonedit", (target & SCE_SNAP_TARGET_NOT_NONEDITED) != 0);
RNA_boolean_set(
op->ptr, "use_snap_selectable", (target & SCE_SNAP_TARGET_ONLY_SELECTABLE) != 0);
}
if (t->modifiers & MOD_SNAP) {
*snap_flag_ptr |= SCE_SNAP;
/* Update `ToolSettings` for properties that change during modal. */
if (t->flag & T_MODAL) {
/* Do we check for parameter? */
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. */
short *snap_flag_ptr;
wmMsgParams_RNA msg_key_params = {{0}};
RNA_pointer_create(&t->scene->id, &RNA_ToolSettings, ts, &msg_key_params.ptr);
if (t->spacetype == SPACE_NODE) {
snap_flag_ptr = &ts->snap_flag_node;
msg_key_params.prop = &rna_ToolSettings_use_snap_node;
}
else if (t->spacetype == SPACE_IMAGE) {
snap_flag_ptr = &ts->snap_uv_flag;
msg_key_params.prop = &rna_ToolSettings_use_snap_uv;
}
else if (t->spacetype == SPACE_SEQ) {
snap_flag_ptr = &ts->snap_flag_seq;
msg_key_params.prop = &rna_ToolSettings_use_snap_sequencer;
}
else {
snap_flag_ptr = &ts->snap_flag;
msg_key_params.prop = &rna_ToolSettings_use_snap;
}
if (t->modifiers & MOD_SNAP) {
*snap_flag_ptr |= SCE_SNAP;
}
else {
*snap_flag_ptr &= ~SCE_SNAP;
}
WM_msg_publish_rna_params(t->mbus, &msg_key_params);
}
else {
*snap_flag_ptr &= ~SCE_SNAP;
}
WM_msg_publish_rna_params(t->mbus, &msg_key_params);
}
}
}

View File

@ -568,10 +568,8 @@ static bool transform_poll_property(const bContext *UNUSED(C),
/* Snapping. */
{
PropertyRNA *prop_snap = RNA_struct_find_property(op->ptr, "snap");
if (prop_snap && (prop_snap != prop) &&
(RNA_property_boolean_get(op->ptr, prop_snap) == false)) {
if (STRPREFIX(prop_id, "snap") || STRPREFIX(prop_id, "use_snap")) {
if (STREQ(prop_id, "use_snap_project")) {
if (RNA_boolean_get(op->ptr, "snap") == false) {
return false;
}
}
@ -624,7 +622,7 @@ void Transform_Properties(struct wmOperatorType *ot, int flags)
if (flags & P_MIRROR) {
prop = RNA_def_boolean(ot->srna, "mirror", 0, "Mirror Editing", "");
if (flags & P_MIRROR_DUMMY) {
if ((flags & P_MIRROR_DUMMY) == P_MIRROR_DUMMY) {
/* only used so macros can disable this option */
RNA_def_property_flag(prop, PROP_HIDDEN);
}
@ -658,17 +656,17 @@ void Transform_Properties(struct wmOperatorType *ot, int flags)
prop = RNA_def_boolean(ot->srna, "snap", false, "Use Snapping Options", "");
RNA_def_property_flag(prop, PROP_HIDDEN);
prop = RNA_def_enum(ot->srna,
"snap_elements",
rna_enum_snap_element_items,
SCE_SNAP_MODE_INCREMENT,
"Snap to Elements",
"");
RNA_def_property_flag(prop, PROP_ENUM_FLAG);
if ((flags & P_GEO_SNAP) == P_GEO_SNAP) {
prop = RNA_def_enum(ot->srna,
"snap_elements",
rna_enum_snap_element_items,
SCE_SNAP_MODE_INCREMENT,
"Snap to Elements",
"");
RNA_def_property_flag(prop, PROP_HIDDEN | PROP_ENUM_FLAG);
RNA_def_boolean(ot->srna, "use_snap_project", false, "Project Individual Elements", "");
RNA_def_boolean(ot->srna, "use_snap_project", false, "Project Individual Elements", "");
if (flags & P_GEO_SNAP) {
/* TODO(@gfxcoder): Rename `snap_target` to `snap_source` to avoid previous ambiguity of
* "target" (now, "source" is geometry to be moved and "target" is geometry to which moved
* geometry is snapped). Use "Source snap point" and "Point on source that will snap to
@ -684,22 +682,14 @@ void Transform_Properties(struct wmOperatorType *ot, int flags)
prop = RNA_def_boolean(ot->srna, "use_snap_nonedit", true, "Target: Include Non-Edited", "");
RNA_def_property_flag(prop, PROP_HIDDEN);
prop = RNA_def_boolean(
ot->srna, "use_snap_selectable_only", false, "Target: Exclude Non-Selectable", "");
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);
ot->srna, "use_snap_selectable", true, "Target: Exclude Non-Selectable", "");
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) {
if ((flags & P_ALIGN_SNAP) == P_ALIGN_SNAP) {
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(
@ -707,11 +697,6 @@ void Transform_Properties(struct wmOperatorType *ot, int flags)
RNA_def_property_flag(prop, PROP_HIDDEN);
}
}
else {
prop = RNA_def_boolean(
ot->srna, "use_snap_selectable_only", false, "Target: Exclude Non-Selectable", "");
RNA_def_property_flag(prop, PROP_HIDDEN);
}
}
if (flags & P_GPENCIL_EDIT) {
@ -1163,7 +1148,7 @@ static void TRANSFORM_OT_edge_slide(struct wmOperatorType *ot)
"When Even mode is active, flips between the two adjacent edge loops");
RNA_def_boolean(ot->srna, "use_clamp", true, "Clamp", "Clamp within the edge extents");
Transform_Properties(ot, P_MIRROR | P_SNAP | P_CORRECT_UV);
Transform_Properties(ot, P_MIRROR | P_GEO_SNAP | P_CORRECT_UV);
}
static void TRANSFORM_OT_vert_slide(struct wmOperatorType *ot)
@ -1198,7 +1183,7 @@ static void TRANSFORM_OT_vert_slide(struct wmOperatorType *ot)
"When Even mode is active, flips between the two adjacent edge loops");
RNA_def_boolean(ot->srna, "use_clamp", true, "Clamp", "Clamp within the edge extents");
Transform_Properties(ot, P_MIRROR | P_SNAP | P_CORRECT_UV);
Transform_Properties(ot, P_MIRROR | P_GEO_SNAP | P_CORRECT_UV);
}
static void TRANSFORM_OT_edge_crease(struct wmOperatorType *ot)

View File

@ -726,10 +726,8 @@ static eSnapTargetSelect snap_target_select_from_spacetype(TransInfo *t)
eSnapTargetSelect ret = SCE_SNAP_TARGET_ALL;
bool use_snap_active = (t->tsnap.target_select & SCE_SNAP_TARGET_NOT_ACTIVE) == 0;
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;
/* `t->tsnap.target_select` not initialized yet. */
BLI_assert(t->tsnap.target_select == SCE_SNAP_TARGET_ALL);
if (ELEM(t->spacetype, SPACE_VIEW3D, SPACE_IMAGE) && !(t->options & CTX_CAMERA)) {
if (base_act && (base_act->object->mode & OB_MODE_PARTICLE_EDIT)) {
@ -737,10 +735,6 @@ static eSnapTargetSelect snap_target_select_from_spacetype(TransInfo *t)
return ret;
}
if (use_snap_selectable_only) {
ret |= SCE_SNAP_TARGET_ONLY_SELECTABLE;
}
if (t->options & (CTX_GPENCIL_STROKES | CTX_CURSOR | CTX_OBMODE_XFORM_OBDATA)) {
/* In "Edit Strokes" mode,
* snap tool can perform snap to selected or active objects (see T49632)
@ -759,15 +753,6 @@ static eSnapTargetSelect snap_target_select_from_spacetype(TransInfo *t)
/* Exclude editmesh when using proportional edit */
ret |= SCE_SNAP_TARGET_NOT_EDITED;
}
if (!use_snap_active) {
ret |= SCE_SNAP_TARGET_NOT_ACTIVE;
}
if (!use_snap_edit) {
ret |= SCE_SNAP_TARGET_NOT_EDITED;
}
if (!use_snap_nonedit) {
ret |= SCE_SNAP_TARGET_NOT_NONEDITED;
}
}
else if (ELEM(obedit_type, OB_ARMATURE, OB_CURVES_LEGACY, OB_SURF, OB_LATTICE, OB_MBALL)) {
/* Temporary limited to edit mode armature, curves, surfaces, lattices, and metaballs. */