[Bf-blender-cvs] [3064270] master: Correct snap checks for edges & faces

Campbell Barton noreply at git.blender.org
Thu May 5 23:40:10 CEST 2016


Commit: 3064270e132693d1dce1f273381a3120b3953d90
Author: Campbell Barton
Date:   Fri May 6 07:44:07 2016 +1000
Branches: master
https://developer.blender.org/rB3064270e132693d1dce1f273381a3120b3953d90

Correct snap checks for edges & faces

Snap targets can't contain vertices which are being transformed

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

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

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

diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index d923bcb..b909328 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -486,6 +486,35 @@ bool validSnappingNormal(TransInfo *t)
 	return false;
 }
 
+static bool bm_edge_is_snap_target(BMEdge *e, void *UNUSED(user_data))
+{
+	if (BM_elem_flag_test(e, BM_ELEM_SELECT | BM_ELEM_HIDDEN) ||
+	    BM_elem_flag_test(e->v1, BM_ELEM_SELECT) ||
+	    BM_elem_flag_test(e->v2, BM_ELEM_SELECT))
+	{
+		return false;
+	}
+
+	return true;
+}
+
+static bool bm_face_is_snap_target(BMFace *f, void *UNUSED(user_data))
+{
+	if (BM_elem_flag_test(f, BM_ELEM_SELECT | BM_ELEM_HIDDEN)) {
+		return false;
+	}
+
+	BMLoop *l_iter, *l_first;
+	l_iter = l_first = BM_FACE_FIRST_LOOP(f);
+	do {
+		if (BM_elem_flag_test(l_iter->v, BM_ELEM_SELECT)) {
+			return false;
+		}
+	} while ((l_iter = l_iter->next) != l_first);
+
+	return true;
+}
+
 static void initSnappingMode(TransInfo *t)
 {
 	ToolSettings *ts = t->settings;
@@ -577,8 +606,8 @@ static void initSnappingMode(TransInfo *t)
 				ED_transform_snap_object_context_set_editmesh_callbacks(
 				        t->tsnap.object_context,
 				        (bool (*)(BMVert *, void *))BM_elem_cb_check_hflag_disabled,
-				        (bool (*)(BMEdge *, void *))BM_elem_cb_check_hflag_disabled,
-				        (bool (*)(BMFace *, void *))BM_elem_cb_check_hflag_disabled,
+				        bm_edge_is_snap_target,
+				        bm_face_is_snap_target,
 				        SET_UINT_IN_POINTER((BM_ELEM_SELECT | BM_ELEM_HIDDEN)));
 			}
 		}




More information about the Bf-blender-cvs mailing list