Blender
V3.3
|
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. More... | |
void * | BMW_begin (BMWalker *walker, void *start) |
void * | BMW_step (struct BMWalker *walker) |
Step Walker. More... | |
void | BMW_end (struct BMWalker *walker) |
End Walker. More... | |
int | BMW_current_depth (BMWalker *walker) |
Walker Current Depth. More... | |
void * | BMW_current_state (BMWalker *walker) |
Current Walker State. More... | |
void * | BMW_state_add (BMWalker *walker) |
Add a new Walker State. More... | |
void | BMW_state_remove (BMWalker *walker) |
Remove Current Walker State. More... | |
void * | BMW_walk (BMWalker *walker) |
Main Walking Function. More... | |
void | BMW_reset (BMWalker *walker) |
Reset Walker. More... | |
Definition at line 128 of file bmesh_walkers.h.
#define BMW_MASK_NOP 0 |
Definition at line 54 of file bmesh_walkers.h.
#define BMW_NIL_LAY 0 |
Definition at line 170 of file bmesh_walkers.h.
anonymous enum |
Definition at line 146 of file bmesh_walkers.h.
enum BMWFlag |
Enumerator | |
---|---|
BMW_FLAG_NOP | |
BMW_FLAG_TEST_HIDDEN |
Definition at line 18 of file bmesh_walkers.h.
enum BMWOrder |
Enumerator | |
---|---|
BMW_DEPTH_FIRST | |
BMW_BREADTH_FIRST |
Definition at line 13 of file bmesh_walkers.h.
NOTE(@joeedh): Details on design.
Original design: walkers directly emulation recursive functions. functions save their state onto a BMWalker.worklist, and also add new states to implement recursive or looping behavior. Generally only one state push per call with a specific state is desired.
basic design pattern: the walker step function goes through its list of possible choices for recursion, and recurses (by pushing a new state) using the first non-visited one. This choice is the flagged as visited using the GHash. Each step may push multiple new states onto the BMWalker.worklist at once.
Definition at line 40 of file bmesh_walkers.c.
References BMWalker::begin, BMWalker::begin_htype, BLI_assert, BMW_current_state(), NULL, and BMWalker::step.
Referenced by BM_mesh_decimate_unsubdivide_ex(), bmo_collapse_exec(), bmo_collapsecon_do_layer(), bmo_dissolve_faces_exec(), check_hole_in_region(), edgering_select(), view3d_preselect_mesh_edgering_update_edges_from_edge(), walker_deselect_nth(), walker_select(), and walker_select_count().
int BMW_current_depth | ( | BMWalker * | walker | ) |
Walker Current Depth.
Returns the current depth of the walker.
Definition at line 123 of file bmesh_walkers.c.
References BMWalker::depth.
Referenced by BM_mesh_decimate_unsubdivide_ex(), and walker_deselect_nth().
Current Walker State.
Returns the first state from the walker state worklist. This state is the next in the worklist for processing.
Definition at line 141 of file bmesh_walkers.c.
References BMWalker::depth, BMwGenericWalker::depth, ListBase::first, and BMWalker::states.
Referenced by BMW_begin(), bmw_ConnectedVertexWalker_yield(), bmw_EdgeboundaryWalker_yield(), bmw_EdgeLoopWalker_begin(), bmw_EdgeLoopWalker_yield(), bmw_EdgeringWalker_begin(), bmw_EdgeringWalker_yield(), bmw_FaceLoopWalker_begin(), bmw_FaceLoopWalker_yield(), bmw_FaceShellWalker_yield(), bmw_IslandboundWalker_step(), bmw_IslandboundWalker_yield(), bmw_IslandWalker_yield(), bmw_LoopShellWalker_yield(), bmw_LoopShellWireWalker_yield(), bmw_NonManifoldedgeWalker_yield(), BMW_reset(), BMW_state_remove(), bmw_UVEdgeWalker_yield(), bmw_VertShellWalker_yield(), and BMW_walk().
End Walker.
Frees a walker's worklist.
Definition at line 107 of file bmesh_walkers.c.
References BLI_gset_free(), BLI_mempool_destroy(), NULL, BMWalker::visit_set, BMWalker::visit_set_alt, and BMWalker::worklist.
Referenced by BM_mesh_decimate_unsubdivide_ex(), bmo_collapse_exec(), bmo_collapsecon_do_layer(), bmo_dissolve_faces_exec(), check_hole_in_region(), edbm_select_linked_exec(), edbm_select_linked_pick_ex(), edgering_select(), view3d_preselect_mesh_edgering_update_edges_from_edge(), walker_deselect_nth(), walker_select(), and walker_select_count().
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.
Allocates and returns a new mesh walker of a given type. The elements visited are filtered by the bitmask 'searchmask'.
Definition at line 49 of file bmesh_walkers.c.
References BMWalker::begin, BMWalker::begin_htype, BLI_assert, BLI_gset_ptr_new(), BLI_listbase_clear(), BLI_mempool_create(), BLI_MEMPOOL_NOP, bm, BMWalker::bm, BM_EDGE, BM_FACE, BM_VERT, bm_walker_types, BMW_CUSTOM, BMW_MAXWALKERS, BMWalker::flag, BMWalker::layer, BMWalker::mask_edge, BMWalker::mask_face, BMWalker::mask_vert, BMWalker::order, BMWalker::states, BMWalker::step, BMWalker::structsize, type, UNLIKELY, BMWalker::valid_mask, BMWalker::visit_set, BMWalker::visit_set_alt, BMWalker::worklist, and BMWalker::yield.
Referenced by BM_mesh_decimate_unsubdivide_ex(), bmo_collapse_exec(), bmo_collapsecon_do_layer(), bmo_dissolve_faces_exec(), check_hole_in_region(), edbm_select_linked_exec(), edbm_select_linked_pick_ex(), edgering_select(), view3d_preselect_mesh_edgering_update_edges_from_edge(), walker_deselect_nth(), walker_select(), and walker_select_count().
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.c.
References BLI_gset_clear(), BMW_current_state(), BMW_state_remove(), BMWalker::depth, NULL, BMWalker::visit_set, and BMWalker::visit_set_alt.
Add a new Walker State.
Allocate a new empty state and put it on the worklist. A pointer to the new state is returned so that the caller can fill in the state data. The new state will be inserted at the front for depth-first walks, and at the end for breadth-first walks.
Definition at line 168 of file bmesh_walkers.c.
References BLI_addhead(), BLI_addtail(), BLI_assert, BLI_mempool_alloc(), BMW_BREADTH_FIRST, BMW_DEPTH_FIRST, BMWalker::depth, BMwGenericWalker::depth, BMWalker::order, BMWalker::states, and BMWalker::worklist.
Referenced by bmw_ConnectedVertexWalker_visitVertex(), bmw_EdgeboundaryWalker_begin(), bmw_EdgeboundaryWalker_step(), bmw_EdgeLoopWalker_begin(), bmw_EdgeLoopWalker_step(), bmw_EdgeringWalker_begin(), bmw_EdgeringWalker_step(), bmw_FaceLoopWalker_begin(), bmw_FaceLoopWalker_step(), bmw_FaceShellWalker_visitEdge(), bmw_IslandboundWalker_begin(), bmw_IslandboundWalker_step(), bmw_IslandWalker_begin(), bmw_IslandWalker_step_ex(), bmw_LoopShellWalker_visitEdgeWire(), bmw_LoopShellWalker_visitLoop(), bmw_NonManifoldedgeWalker_begin(), bmw_NonManifoldedgeWalker_step(), bmw_UVEdgeWalker_begin(), bmw_UVEdgeWalker_step(), and bmw_VertShellWalker_visitEdge().
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.c.
References BLI_mempool_free(), BLI_remlink(), BMW_current_state(), BMWalker::states, and BMWalker::worklist.
Referenced by bmw_IslandboundWalker_step(), and BMW_reset().
Step Walker.
Definition at line 114 of file bmesh_walkers.c.
References BMW_walk().
Referenced by BM_mesh_decimate_unsubdivide_ex(), bmo_collapse_exec(), bmo_collapsecon_do_layer(), bmo_dissolve_faces_exec(), check_hole_in_region(), edgering_select(), view3d_preselect_mesh_edgering_update_edges_from_edge(), walker_deselect_nth(), walker_select(), and walker_select_count().
Main Walking Function.
Steps a mesh walker forward by one element
Definition at line 128 of file bmesh_walkers.c.
References BMW_current_state(), NULL, and BMWalker::step.
Referenced by bmw_EdgeLoopWalker_begin(), bmw_EdgeringWalker_begin(), bmw_FaceLoopWalker_begin(), and BMW_step().