[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