[Bf-blender-cvs] [7524925] master: BMesh: optimize edge select

Campbell Barton noreply at git.blender.org
Mon Feb 2 23:34:05 CET 2015


Commit: 75249259f4f6ec9c514d355f00899d7bf427ebf7
Author: Campbell Barton
Date:   Tue Feb 3 05:05:21 2015 +1100
Branches: master
https://developer.blender.org/rB75249259f4f6ec9c514d355f00899d7bf427ebf7

BMesh: optimize edge select

It's called a lot, so avoid using a generic iterator for edges of vert.

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

M	source/blender/bmesh/intern/bmesh_marking.c

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

diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c
index ee35d8c..0f198b1 100644
--- a/source/blender/bmesh/intern/bmesh_marking.c
+++ b/source/blender/bmesh/intern/bmesh_marking.c
@@ -41,6 +41,7 @@
 #include "BLI_listbase.h"
 
 #include "bmesh.h"
+#include "bmesh_structure.h"
 
 static void recount_totsels(BMesh *bm)
 {
@@ -378,28 +379,24 @@ void BM_edge_select_set(BMesh *bm, BMEdge *e, const bool select)
 		BM_elem_flag_disable(e, BM_ELEM_SELECT);
 
 		if ((bm->selectmode & SCE_SELECT_VERTEX) == 0) {
-			BMIter iter;
-			BMVert *verts[2] = {e->v1, e->v2};
-			BMEdge *e2;
 			int i;
 
 			/* check if the vert is used by a selected edge */
 			for (i = 0; i < 2; i++) {
 				bool deselect = true;
+				BMVert *v = *((&e->v1) + i);
+				BMEdge *e_other = e;
 
-				for (e2 = BM_iter_new(&iter, bm, BM_EDGES_OF_VERT, verts[i]); e2; e2 = BM_iter_step(&iter)) {
-					if (e2 == e) {
-						continue;
-					}
-
-					if (BM_elem_flag_test(e2, BM_ELEM_SELECT)) {
+				/* start by stepping over the current edge */
+				while ((e_other = bmesh_disk_edge_next(e_other, v)) != e) {
+					if (BM_elem_flag_test(e_other, BM_ELEM_SELECT)) {
 						deselect = false;
 						break;
 					}
 				}
 
 				if (deselect) {
-					BM_vert_select_set(bm, verts[i], false);
+					BM_vert_select_set(bm, v, false);
 				}
 			}
 		}




More information about the Bf-blender-cvs mailing list