Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2015-02-02 21:05:21 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-02-03 01:33:04 +0300
commit75249259f4f6ec9c514d355f00899d7bf427ebf7 (patch)
tree4fa193e8d3bee25184a80365f458a82cf213c131 /source/blender
parent052a02171164087159411cf4200c496b1a414d43 (diff)
BMesh: optimize edge select
It's called a lot, so avoid using a generic iterator for edges of vert.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/bmesh/intern/bmesh_marking.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c
index ee35d8cd1d2..0f198b11f42 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);
}
}
}