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