Blender V4.3
bmesh_walkers.hh File Reference

Go to the source code of this file.

Classes

struct  BMWalker
 

Macros

#define BMW_MASK_NOP   0
 
#define BMW_ITER(ele, walker, data)
 
#define BMW_NIL_LAY   0
 

Typedefs

typedef struct BMWalker BMWalker
 

Enumerations

enum  BMWOrder { BMW_DEPTH_FIRST , BMW_BREADTH_FIRST }
 
enum  BMWFlag { BMW_FLAG_NOP = 0 , BMW_FLAG_TEST_HIDDEN = (1 << 0) }
 
enum  {
  BMW_VERT_SHELL , BMW_LOOP_SHELL , BMW_LOOP_SHELL_WIRE , BMW_FACE_SHELL ,
  BMW_EDGELOOP , BMW_FACELOOP , BMW_EDGERING , BMW_EDGEBOUNDARY ,
  BMW_EDGELOOP_NONMANIFOLD , BMW_LOOPDATA_ISLAND , BMW_ISLANDBOUND , BMW_ISLAND ,
  BMW_ISLAND_MANIFOLD , BMW_CONNECTED_VERTEX , BMW_CUSTOM , BMW_MAXWALKERS
}
 

Functions

void BMW_init (struct BMWalker *walker, BMesh *bm, int type, short mask_vert, short mask_edge, short mask_face, BMWFlag flag, int layer)
 Init Walker.
 
void * BMW_begin (BMWalker *walker, void *start)
 
void * BMW_step (struct BMWalker *walker)
 Step Walker.
 
void BMW_end (struct BMWalker *walker)
 End Walker.
 
int BMW_current_depth (BMWalker *walker)
 Walker Current Depth.
 
void * BMW_current_state (BMWalker *walker)
 Current Walker State.
 
void * BMW_state_add (BMWalker *walker)
 Add a new Walker State.
 
void BMW_state_remove (BMWalker *walker)
 Remove Current Walker State.
 
void * BMW_walk (BMWalker *walker)
 Main Walking Function.
 
void BMW_reset (BMWalker *walker)
 Reset Walker.
 

Macro Definition Documentation

◆ BMW_ITER

#define BMW_ITER ( ele,
walker,
data )
Value:
for (BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BMW_begin(walker, (BM_CHECK_TYPE_ELEM(data), data)); ele; \
BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BMW_step(walker))
#define BM_CHECK_TYPE_ELEM_ASSIGN(ele)
#define BM_CHECK_TYPE_ELEM(ele)
void * BMW_begin(BMWalker *walker, void *start)
void * BMW_step(struct BMWalker *walker)
Step Walker.

Definition at line 130 of file bmesh_walkers.hh.

Referenced by edbm_select_linked_exec(), and edbm_select_linked_pick_ex().

◆ BMW_MASK_NOP

◆ BMW_NIL_LAY

Typedef Documentation

◆ BMWalker

typedef struct BMWalker BMWalker

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
BMW_VERT_SHELL 
BMW_LOOP_SHELL 
BMW_LOOP_SHELL_WIRE 
BMW_FACE_SHELL 
BMW_EDGELOOP 
BMW_FACELOOP 
BMW_EDGERING 
BMW_EDGEBOUNDARY 
BMW_EDGELOOP_NONMANIFOLD 
BMW_LOOPDATA_ISLAND 
BMW_ISLANDBOUND 
BMW_ISLAND 
BMW_ISLAND_MANIFOLD 
BMW_CONNECTED_VERTEX 
BMW_CUSTOM 
BMW_MAXWALKERS 

Definition at line 148 of file bmesh_walkers.hh.

◆ BMWFlag

enum BMWFlag
Enumerator
BMW_FLAG_NOP 
BMW_FLAG_TEST_HIDDEN 

Definition at line 20 of file bmesh_walkers.hh.

◆ BMWOrder

enum BMWOrder
Enumerator
BMW_DEPTH_FIRST 
BMW_BREADTH_FIRST 

Definition at line 15 of file bmesh_walkers.hh.

Function Documentation

◆ BMW_begin()

◆ BMW_current_depth()

int BMW_current_depth ( BMWalker * walker)

Walker Current Depth.

Returns the current depth of the walker.

Definition at line 123 of file bmesh_walkers.cc.

References BMWalker::depth.

Referenced by BM_mesh_decimate_unsubdivide_ex(), and walker_deselect_nth().

◆ BMW_current_state()

◆ BMW_end()

◆ BMW_init()

◆ BMW_reset()

void BMW_reset ( BMWalker * walker)

Reset Walker.

Frees all states from the worklist, resetting the walker for reuse in a new walk.

Definition at line 187 of file bmesh_walkers.cc.

References BLI_gset_clear(), BMW_current_state(), BMW_state_remove(), BMWalker::depth, BMWalker::visit_set, and BMWalker::visit_set_alt.

◆ BMW_state_add()

◆ BMW_state_remove()

void BMW_state_remove ( BMWalker * walker)

Remove Current Walker State.

Remove and free an item from the end of the walker state worklist.

Definition at line 160 of file bmesh_walkers.cc.

References BLI_mempool_free(), BLI_remlink(), BMW_current_state(), BMWalker::states, and BMWalker::worklist.

Referenced by bmw_IslandboundWalker_step(), and BMW_reset().

◆ BMW_step()

◆ BMW_walk()

void * BMW_walk ( BMWalker * walker)

Main Walking Function.

Steps a mesh walker forward by one element

Definition at line 128 of file bmesh_walkers.cc.

References BMW_current_state(), and BMWalker::step.

Referenced by bmw_EdgeLoopWalker_begin(), bmw_EdgeringWalker_begin(), bmw_FaceLoopWalker_begin(), and BMW_step().