[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42184] branches/bmesh/blender/source/ blender: use faster method of getting vert/edge/ face indices which uses BLI_mempool_findelem to skip over chunks rather than going over every element

Campbell Barton ideasman42 at gmail.com
Sun Nov 27 03:05:51 CET 2011


Revision: 42184
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42184
Author:   campbellbarton
Date:     2011-11-27 02:05:46 +0000 (Sun, 27 Nov 2011)
Log Message:
-----------
use faster method of getting vert/edge/face indices which uses BLI_mempool_findelem to skip over chunks rather than going over every element

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/bmesh.h
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_iterators.c
    branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
    branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c
    branches/bmesh/blender/source/blender/editors/object/object_vgroup.c

Modified: branches/bmesh/blender/source/blender/bmesh/bmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh.h	2011-11-27 01:42:56 UTC (rev 42183)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh.h	2011-11-27 02:05:46 UTC (rev 42184)
@@ -334,6 +334,10 @@
 
 void BM_ElemIndex_Validate(BMesh *bm, const char *location, const char *func, const char *msg_a, const char *msg_b);
 
+BMVert *BM_Vert_AtIndex(BMesh *bm, const int index);
+BMEdge *BM_Edge_AtIndex(BMesh *bm, const int index);
+BMFace *BM_Face_AtIndex(BMesh *bm, const int index);
+
 /*start/stop edit*/
 void bmesh_begin_edit(struct BMesh *bm, int flag);
 void bmesh_end_edit(struct BMesh *bm, int flag);

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_iterators.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_iterators.c	2011-11-27 01:42:56 UTC (rev 42183)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_iterators.c	2011-11-27 02:05:46 UTC (rev 42184)
@@ -3,7 +3,9 @@
 #include "bmesh.h"
 #include "bmesh_private.h"
 
-
+/*
+ * note, we have BM_Vert_AtIndex/BM_Edge_AtIndex/BM_Face_AtIndex for arrays
+ */
 void *BMIter_AtIndex(struct BMesh *bm, const char htype, void *data, int index)
 {
 	BMIter iter;

Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c	2011-11-27 01:42:56 UTC (rev 42183)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c	2011-11-27 02:05:46 UTC (rev 42184)
@@ -587,3 +587,18 @@
 #endif
 #endif
 }
+
+BMVert *BM_Vert_AtIndex(BMesh *bm, const int index)
+{
+	return BLI_mempool_findelem(bm->vpool, index);
+}
+
+BMEdge *BM_Edge_AtIndex(BMesh *bm, const int index)
+{
+	return BLI_mempool_findelem(bm->epool, index);
+}
+
+BMFace *BM_Face_AtIndex(BMesh *bm, const int index)
+{
+	return BLI_mempool_findelem(bm->fpool, index);
+}

Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c	2011-11-27 01:42:56 UTC (rev 42183)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_select.c	2011-11-27 02:05:46 UTC (rev 42184)
@@ -366,7 +366,7 @@
 static unsigned int findnearestvert__backbufIndextest(void *handle, unsigned int index)
 {
 	BMEditMesh *em= (BMEditMesh *)handle;
-	BMVert *eve = BMIter_AtIndex(em->bm, BM_VERTS_OF_MESH, NULL, index-1);
+	BMVert *eve = BM_Vert_AtIndex(em->bm, index-1);
 
 	if(eve && BM_TestHFlag(eve, BM_SELECT)) return 0;
 	return 1; 
@@ -390,7 +390,7 @@
 		if(strict) index = view3d_sample_backbuf_rect(vc, vc->mval, 50, bm_wireoffs, 0xFFFFFF, &distance, strict, vc->em, findnearestvert__backbufIndextest); 
 		else index = view3d_sample_backbuf_rect(vc, vc->mval, 50, bm_wireoffs, 0xFFFFFF, &distance, 0, NULL, NULL); 
 		
-		eve = BMIter_AtIndex(vc->em->bm, BM_VERTS_OF_MESH, NULL, index-1);
+		eve = BM_Vert_AtIndex(vc->em->bm, index-1);
 		
 		if(eve && distance < *dist) {
 			*dist = distance;
@@ -405,7 +405,7 @@
 		static int lastSelectedIndex=0;
 		static BMVert *lastSelected=NULL;
 		
-		if (lastSelected && BMIter_AtIndex(vc->em->bm, BM_VERTS_OF_MESH, NULL, lastSelectedIndex)!=lastSelected) {
+		if (lastSelected && BM_Vert_AtIndex(vc->em->bm, lastSelectedIndex) != lastSelected) {
 			lastSelectedIndex = 0;
 			lastSelected = NULL;
 		}
@@ -499,7 +499,7 @@
 		view3d_validate_backbuf(vc);
 		
 		index = view3d_sample_backbuf_rect(vc, vc->mval, 50, bm_solidoffs, bm_wireoffs, &distance,0, NULL, NULL);
-		eed = BMIter_AtIndex(vc->em->bm, BM_EDGES_OF_MESH, NULL, index-1);
+		eed = BM_Edge_AtIndex(vc->em->bm, index-1);
 		
 		if (eed && distance<*dist) {
 			*dist = distance;
@@ -569,7 +569,7 @@
 		view3d_validate_backbuf(vc);
 
 		index = view3d_sample_backbuf(vc, vc->mval[0], vc->mval[1]);
-		efa = BMIter_AtIndex(vc->em->bm, BM_FACES_OF_MESH, NULL, index-1);
+		efa = BM_Face_AtIndex(vc->em->bm, index-1);
 		
 		if (efa) {
 			struct { short mval[2]; int dist; BMFace *toFace; } data;
@@ -594,7 +594,7 @@
 		static int lastSelectedIndex=0;
 		static BMFace *lastSelected=NULL;
 
-		if (lastSelected && BMIter_AtIndex(vc->em->bm, BM_FACES_OF_MESH, NULL, lastSelectedIndex)!=lastSelected) {
+		if (lastSelected && BM_Face_AtIndex(vc->em->bm, lastSelectedIndex) != lastSelected) {
 			lastSelectedIndex = 0;
 			lastSelected = NULL;
 		}

Modified: branches/bmesh/blender/source/blender/editors/object/object_vgroup.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/object/object_vgroup.c	2011-11-27 01:42:56 UTC (rev 42183)
+++ branches/bmesh/blender/source/blender/editors/object/object_vgroup.c	2011-11-27 02:05:46 UTC (rev 42184)
@@ -556,7 +556,7 @@
 		me= ob->data;
 
 		if(me->edit_btmesh) {
-			eve= BMIter_AtIndex(me->edit_btmesh->bm, BM_VERTS_OF_MESH, NULL, vertnum);
+			eve= BM_Vert_AtIndex(me->edit_btmesh->bm, vertnum);
 			if(!eve) {
 				return 0.0f;
 			}




More information about the Bf-blender-cvs mailing list