[Bf-blender-cvs] [236fda7faf5] master: Fix T101343: useless Snapping menu in transform operators

Germano Cavalcante noreply at git.blender.org
Mon Sep 26 19:19:24 CEST 2022


Commit: 236fda7faf58921f9f4b6d0d0300313b0ab1976a
Author: Germano Cavalcante
Date:   Mon Sep 26 14:18:29 2022 -0300
Branches: master
https://developer.blender.org/rB236fda7faf58921f9f4b6d0d0300313b0ab1976a

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 85bb8c1b31a..6ca33a591cc 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -1578,40 +1578,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 99919c0ed78..f15ad99dbc3 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -570,10 +570,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;
       }
     }
@@ -626,7 +624,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);
     }
@@ -660,17 +658,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
@@ -686,22 +684,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(
@@ -709,11 +699,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) {
@@ -1165,7 +1150,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)
@@ -1200,7 +1185,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 a3effa32072..6a2a4ca97ad 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -723,10 +723,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