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;
                        }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to