[Bf-blender-cvs] [3354ec3fb3f] master: Fix T99334: Ignore edit-related snap options in Object mode

jon denning noreply at git.blender.org
Wed Jul 6 22:39:26 CEST 2022


Commit: 3354ec3fb3f6c0785c7c1ad9d84bae1c58d1628f
Author: jon denning
Date:   Wed Jul 6 16:21:56 2022 -0400
Branches: master
https://developer.blender.org/rB3354ec3fb3f6c0785c7c1ad9d84bae1c58d1628f

Fix T99334: Ignore edit-related snap options in Object mode

When in Object Mode, any of the active- and edit-related snapping
options (Include Active, Include Edited, Include Non-Edited) should be
ignored when in Object Mode, otherwise snapping could be effectively
disabled.

This commit forces snap code to ignore the active- and edit-related
options when in Object Mode.

Reviewed By: Germano Cavalcante (mano-wii)

Differential Revision: https://developer.blender.org/D15366

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

M	source/blender/editors/transform/transform_snap_object.cc

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

diff --git a/source/blender/editors/transform/transform_snap_object.cc b/source/blender/editors/transform/transform_snap_object.cc
index 817474f795e..479214ee2d3 100644
--- a/source/blender/editors/transform/transform_snap_object.cc
+++ b/source/blender/editors/transform/transform_snap_object.cc
@@ -492,39 +492,39 @@ static bool snap_object_is_snappable(const SnapObjectContext *sctx,
     return false;
   }
 
-  /* get base attributes */
+  /* Get attributes of potential target. */
   const bool is_active = (base_act == base);
   const bool is_selected = (base->flag & BASE_SELECTED) || (base->flag_legacy & BA_WAS_SEL);
   const bool is_edited = (base->object->mode == OB_MODE_EDIT);
   const bool is_selectable = (base->flag & BASE_SELECTABLE);
+  /* Get attributes of state. */
   const bool is_in_object_mode = (base_act == NULL) || (base_act->object->mode == OB_MODE_OBJECT);
 
-  if (is_edited) {
-    if (is_active) {
-      if (snap_target_select & SCE_SNAP_TARGET_NOT_ACTIVE) {
-        return false;
-      }
-    }
-    else {
-      if (snap_target_select & SCE_SNAP_TARGET_NOT_EDITED) {
-        return false;
-      }
+  if (is_in_object_mode) {
+    /* Handle target selection options that make sense for object mode. */
+    if ((snap_target_select & SCE_SNAP_TARGET_NOT_SELECTED) && is_selected) {
+      /* What is selectable or not is part of the object and depends on the mode. */
+      return false;
     }
   }
-
-  if ((snap_target_select & SCE_SNAP_TARGET_NOT_NONEDITED) && !is_edited) {
-    return false;
+  else {
+    /* Handle target selection options that make sense for edit/pose mode. */
+    if ((snap_target_select & SCE_SNAP_TARGET_NOT_ACTIVE) && is_active) {
+      return false;
+    }
+    if ((snap_target_select & SCE_SNAP_TARGET_NOT_EDITED) && is_edited && !is_active) {
+      /* Base is edited, but not active. */
+      return false;
+    }
+    if ((snap_target_select & SCE_SNAP_TARGET_NOT_NONEDITED) && !is_edited) {
+      return false;
+    }
   }
 
   if ((snap_target_select & SCE_SNAP_TARGET_ONLY_SELECTABLE) && !is_selectable) {
     return false;
   }
 
-  if ((snap_target_select & SCE_SNAP_TARGET_NOT_SELECTED) && is_in_object_mode && is_selected) {
-    /* What is selectable or not is part of the object and depends on the mode. */
-    return false;
-  }
-
   return true;
 }



More information about the Bf-blender-cvs mailing list