[Bf-blender-cvs] [1c8374978d6] blender-v3.3-release: Fix T101343: useless Snapping menu in transform operators

Germano Cavalcante noreply at git.blender.org
Fri Sep 30 15:08:18 CEST 2022


Commit: 1c8374978d64a1a80da7b840d9e071654b699eeb
Author: Germano Cavalcante
Date:   Mon Sep 26 14:18:29 2022 -0300
Branches: blender-v3.3-release
https://developer.blender.org/rB1c8374978d64a1a80da7b840d9e071654b699eeb

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.

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

M	source/blender/editors/transform/transform.c
M	source/blender/editors/transform/transform_ops.c
M	source/blender/editors/transform/transform_snap.c

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

diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 8dcbf07b776..212b84a101a 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -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;
-        }
-        else {
-          *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);
         }
-        WM_msg_publish_rna_params(t->mbus, &msg_key_params);
       }
     }
   }
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index 7c94241f3e3..aeb88e9298f 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -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)
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index e87f2771693..20efa4799f4 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -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)) 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list