[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43987] branches/bmesh/blender/source/ blender/bmesh/intern/bmesh_marking.c: small speedup for BM_SelectMode_Flush ()
Campbell Barton
ideasman42 at gmail.com
Wed Feb 8 16:00:08 CET 2012
Revision: 43987
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43987
Author: campbellbarton
Date: 2012-02-08 15:00:03 +0000 (Wed, 08 Feb 2012)
Log Message:
-----------
small speedup for BM_SelectMode_Flush()
- don't check selected vertices for hidden faces.
- rather then counting total selected verts for a face, break out of the for() loop when an unselected vert is found.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c 2012-02-08 14:29:14 UTC (rev 43986)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_marking.c 2012-02-08 15:00:03 UTC (rev 43987)
@@ -88,7 +88,7 @@
BMIter edges;
BMIter faces;
- int totsel;
+ int ok;
if (bm->selectmode & SCE_SELECT_VERTEX) {
for (e = BMIter_New(&edges, bm, BM_EDGES_OF_MESH, bm); e; e = BMIter_Step(&edges)) {
@@ -100,15 +100,21 @@
}
}
for (f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm); f; f = BMIter_Step(&faces)) {
- totsel = 0;
- l_iter = l_first = BM_FACE_FIRST_LOOP(f);
- do {
- if (BM_TestHFlag(l_iter->v, BM_SELECT)) {
- totsel++;
- }
- } while ((l_iter = l_iter->next) != l_first);
-
- if (totsel == f->len && !BM_TestHFlag(f, BM_HIDDEN)) {
+ ok = TRUE;
+ if (!BM_TestHFlag(f, BM_HIDDEN)) {
+ l_iter = l_first = BM_FACE_FIRST_LOOP(f);
+ do {
+ if (!BM_TestHFlag(l_iter->v, BM_SELECT)) {
+ ok = FALSE;
+ break;
+ }
+ } while ((l_iter = l_iter->next) != l_first);
+ }
+ else {
+ ok = FALSE;
+ }
+
+ if (ok) {
BM_SetHFlag(f, BM_SELECT);
}
else {
@@ -118,15 +124,21 @@
}
else if (bm->selectmode & SCE_SELECT_EDGE) {
for (f = BMIter_New(&faces, bm, BM_FACES_OF_MESH, bm); f; f = BMIter_Step(&faces)) {
- totsel = 0;
- l_iter = l_first = BM_FACE_FIRST_LOOP(f);
- do {
- if (BM_TestHFlag(&(l_iter->e->head), BM_SELECT)) {
- totsel++;
- }
- } while ((l_iter = l_iter->next) != l_first);
-
- if (totsel == f->len && !BM_TestHFlag(f, BM_HIDDEN)) {
+ ok = TRUE;
+ if (!BM_TestHFlag(f, BM_HIDDEN)) {
+ l_iter = l_first = BM_FACE_FIRST_LOOP(f);
+ do {
+ if (!BM_TestHFlag(&(l_iter->e->head), BM_SELECT)) {
+ ok = FALSE;
+ break;
+ }
+ } while ((l_iter = l_iter->next) != l_first);
+ }
+ else {
+ ok = FALSE;
+ }
+
+ if (ok) {
BM_SetHFlag(f, BM_SELECT);
}
else {
More information about the Bf-blender-cvs
mailing list