merge with 2.5 at r18865
[blender.git] / source / blender / bmesh / bmesh_iterators.h
1 /*
2  * BMESH ITERATORS
3  * 
4  * The functions and structures in this file 
5  * provide a unified method for iterating over 
6  * the elements of a mesh and answering simple
7  * adjacency queries. Tool authors should use
8  * the iterators provided in this file instead
9  * of inspecting the structure directly.
10  *
11 */
12
13 #ifndef BM_ITERATORS_H
14 #define BM_ITERATORS_H
15
16 /*Defines for passing to BMIter_New*/
17 #define BM_VERTS                        1
18 #define BM_EDGES                        2
19 #define BM_FACES                        3
20 #define BM_EDGES_OF_VERT                        4
21 #define BM_FACES_OF_VERT                        5
22 #define BM_VERTS_OF_EDGE                        6
23 #define BM_FACES_OF_EDGE                        7
24 #define BM_VERTS_OF_FACE                        8
25 #define BM_FACEVERTS_OF_FACE            9
26 #define BM_EDGES_OF_FACE                        10
27 #define BM_LOOPS_OF_FACE                        11
28
29 /*Iterator Structure*/
30 typedef struct BMIter{
31         struct BMVert *firstvert, *nextvert, *vdata;
32         struct BMEdge *firstedge, *nextedge, *edata;
33         struct BMLoop *firstloop, *nextloop, *ldata;
34         struct BMFace *firstpoly, *nextpoly, *pdata;
35         struct BMesh *bm;
36         void (*begin)(struct BMIter *iter);
37         void *(*step)(struct BMIter *iter);
38         union{
39                 void            *p;
40                 int                     i;
41                 long            l;
42                 float           f;
43         }filter;
44         int type, count;
45 }BMIter;
46
47 void *BMIter_New(struct BMIter *iter, struct BMesh *bm, int type, void *data);
48 void *BMIter_Step(struct BMIter *iter);
49
50 #endif