[Bf-blender-cvs] [bea9c3a] master: Fix T36998: Bisect would operate on unselected vertices.

Campbell Barton noreply at git.blender.org
Mon Nov 18 21:01:39 CET 2013


Commit: bea9c3ab30b5946d84298bc6fd85d38ed4a6802f
Author: Campbell Barton
Date:   Tue Nov 19 07:00:18 2013 +1100
http://developer.blender.org/rBbea9c3ab30b5946d84298bc6fd85d38ed4a6802f

Fix T36998: Bisect would operate on unselected vertices.

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

M	source/blender/bmesh/tools/bmesh_bisect_plane.c

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

diff --git a/source/blender/bmesh/tools/bmesh_bisect_plane.c b/source/blender/bmesh/tools/bmesh_bisect_plane.c
index c3c2924..6aeb264 100644
--- a/source/blender/bmesh/tools/bmesh_bisect_plane.c
+++ b/source/blender/bmesh/tools/bmesh_bisect_plane.c
@@ -300,31 +300,26 @@ void BM_mesh_bisect_plane(BMesh *bm, float plane[4],
 
 	BMIter iter;
 
-	BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
-		vert_is_center_disable(v);
-
-		BM_VERT_DIR(v) = plane_point_test_v3(plane, v->co, eps, &(BM_VERT_DIST(v)));
-		if (BM_VERT_DIR(v) == 0) {
-			if (oflag_center) {
-				BMO_elem_flag_enable(bm, v, oflag_center);
-			}
-			if (use_snap_center) {
-				closest_to_plane_v3(v->co, plane, v->co);
-			}
-		}
-	}
-
 	if (use_tag) {
 		/* build tagged edge array */
 		BMEdge *e;
 		einput_len = 0;
+
+		/* flush edge tags to verts */
+		BM_mesh_elem_hflag_disable_all(bm, BM_VERT, BM_ELEM_TAG, false);
+
 		/* keep face tags as is */
 		BM_ITER_MESH_INDEX (e, &iter, bm, BM_EDGES_OF_MESH, i) {
 			if (edge_is_cut_test(e)) {
 				edges_arr[einput_len++] = e;
+
+				/* flush edge tags to verts */
+				BM_elem_flag_enable(e->v1, BM_ELEM_TAG);
+				BM_elem_flag_enable(e->v2, BM_ELEM_TAG);
 			}
 		}
 
+		/* face tags are set by caller */
 	}
 	else {
 		BMEdge *e;
@@ -339,6 +334,32 @@ void BM_mesh_bisect_plane(BMesh *bm, float plane[4],
 		}
 	}
 
+
+	BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
+
+		if (use_tag && !BM_elem_flag_test(v, BM_ELEM_TAG)) {
+			vert_is_center_disable(v);
+
+			/* these should never be accessed */
+			BM_VERT_DIR(v) = 0;
+			BM_VERT_DIST(v) = 0.0f;
+
+			continue;
+		}
+
+		vert_is_center_disable(v);
+		BM_VERT_DIR(v) = plane_point_test_v3(plane, v->co, eps, &(BM_VERT_DIST(v)));
+
+		if (BM_VERT_DIR(v) == 0) {
+			if (oflag_center) {
+				BMO_elem_flag_enable(bm, v, oflag_center);
+			}
+			if (use_snap_center) {
+				closest_to_plane_v3(v->co, plane, v->co);
+			}
+		}
+	}
+
 	/* store a stack of faces to be evaluated for splitting */
 	BLI_LINKSTACK_INIT(face_stack);




More information about the Bf-blender-cvs mailing list