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);
                                }
                        }
                }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to