Blender V4.3
bmesh_walkers_impl.cc File Reference
#include <cstring>
#include "BLI_utildefines.h"
#include "BKE_customdata.hh"
#include "bmesh.hh"
#include "intern/bmesh_walkers_private.hh"

Go to the source code of this file.

Macros

#define BMW_state_remove_r(walker, owalk)
 
#define EDGE_CHECK(e)    (bmw_mask_check_edge(walker, e) && (BM_edge_is_boundary(e) || BM_edge_is_manifold(e)))
 

Functions

Mask Flag Checks
static bool bmw_mask_check_vert (BMWalker *walker, BMVert *v)
 
static bool bmw_mask_check_edge (BMWalker *walker, BMEdge *e)
 
static bool bmw_mask_check_face (BMWalker *walker, BMFace *f)
 
BMesh Queries (modified to check walker flags)
static bool bmw_edge_is_wire (const BMWalker *walker, const BMEdge *e)
 
Shell Walker

Starts at a vertex on the mesh and walks over the 'shell' it belongs to via visiting connected edges.

takes an edge or vertex as an argument, and spits out edges, restrict flag acts on the edges as well.

Todo
Add restriction flag/callback for wire edges.
static void bmw_VertShellWalker_visitEdge (BMWalker *walker, BMEdge *e)
 
static void bmw_VertShellWalker_begin (BMWalker *walker, void *data)
 
static void * bmw_VertShellWalker_yield (BMWalker *walker)
 
static void * bmw_VertShellWalker_step (BMWalker *walker)
 
LoopShell Walker

Starts at any element on the mesh and walks over the 'shell' it belongs to via visiting connected loops.

Note
this is mainly useful to loop over a shell delimited by edges.
static void bmw_LoopShellWalker_visitLoop (BMWalker *walker, BMLoop *l)
 
static void bmw_LoopShellWalker_begin (BMWalker *walker, void *data)
 
static void * bmw_LoopShellWalker_yield (BMWalker *walker)
 
static void bmw_LoopShellWalker_step_impl (BMWalker *walker, BMLoop *l)
 
static void * bmw_LoopShellWalker_step (BMWalker *walker)
 
LoopShell & 'Wire' Walker

Piggyback on top of BMwLoopShellWalker, but also walk over wire edges This isn't elegant but users expect it when selecting linked, so we can support delimiters and walking over wire edges.

Details:

  • can yield edges (as well as loops)
  • only step over wire edges.
  • verts and edges are stored in visit_set_alt.
static void bmw_LoopShellWalker_visitEdgeWire (BMWalker *walker, BMEdge *e)
 
static void bmw_LoopShellWireWalker_visitVert (BMWalker *walker, BMVert *v, const BMEdge *e_from)
 
static void bmw_LoopShellWireWalker_begin (BMWalker *walker, void *data)
 
static void * bmw_LoopShellWireWalker_yield (BMWalker *walker)
 
static void * bmw_LoopShellWireWalker_step (BMWalker *walker)
 
FaceShell Walker

Starts at an edge on the mesh and walks over the 'shell' it belongs to via visiting connected faces.

static void bmw_FaceShellWalker_visitEdge (BMWalker *walker, BMEdge *e)
 
static void bmw_FaceShellWalker_begin (BMWalker *walker, void *data)
 
static void * bmw_FaceShellWalker_yield (BMWalker *walker)
 
static void * bmw_FaceShellWalker_step (BMWalker *walker)
 
Connected Vertex Walker

Similar to shell walker, but visits vertices instead of edges.

Walk from a vertex to all connected vertices.

static void bmw_ConnectedVertexWalker_visitVertex (BMWalker *walker, BMVert *v)
 
static void bmw_ConnectedVertexWalker_begin (BMWalker *walker, void *data)
 
static void * bmw_ConnectedVertexWalker_yield (BMWalker *walker)
 
static void * bmw_ConnectedVertexWalker_step (BMWalker *walker)
 
Island Boundary Walker

Starts at a edge on the mesh and walks over the boundary of an island it belongs to.

Note
that this doesn't work on non-manifold geometry. it might be better to rewrite this to extract boundary info from the island walker, rather than directly walking over the boundary. raises an error if it encounters non-manifold geometry.
Todo
Add restriction flag/callback for wire edges.
static void bmw_IslandboundWalker_begin (BMWalker *walker, void *data)
 
static void * bmw_IslandboundWalker_yield (BMWalker *walker)
 
static void * bmw_IslandboundWalker_step (BMWalker *walker)
 
Island Walker

Starts at a tool flagged-face and walks over the face region

Todo
Add restriction flag/callback for wire edges.
static void bmw_IslandWalker_begin (BMWalker *walker, void *data)
 
static void * bmw_IslandWalker_yield (BMWalker *walker)
 
static void * bmw_IslandWalker_step_ex (BMWalker *walker, bool only_manifold)
 
static void * bmw_IslandWalker_step (BMWalker *walker)
 
static void * bmw_IslandManifoldWalker_step (BMWalker *walker)
 
Edge Loop Walker

Starts at a tool-flagged edge and walks over the edge loop

static bool bm_edge_is_single (BMEdge *e)
 
static void bmw_EdgeLoopWalker_begin (BMWalker *walker, void *data)
 
static void * bmw_EdgeLoopWalker_yield (BMWalker *walker)
 
static void * bmw_EdgeLoopWalker_step (BMWalker *walker)
 
Face Loop Walker

Starts at a tool-flagged face and walks over the face loop Conditions for starting and stepping the face loop have been tuned in an attempt to match the face loops built by edit-mesh

static bool bmw_FaceLoopWalker_include_face (BMWalker *walker, BMLoop *l)
 
static bool bmw_FaceLoopWalker_edge_begins_loop (BMWalker *walker, BMEdge *e)
 
static void bmw_FaceLoopWalker_begin (BMWalker *walker, void *data)
 
static void * bmw_FaceLoopWalker_yield (BMWalker *walker)
 
static void * bmw_FaceLoopWalker_step (BMWalker *walker)
 
Edge Ring Walker

Starts at a tool-flagged edge and walks over the edge ring Conditions for starting and stepping the edge ring have been tuned to match behavior users expect (dating back to v2.4x).

static void bmw_EdgeringWalker_begin (BMWalker *walker, void *data)
 
static void * bmw_EdgeringWalker_yield (BMWalker *walker)
 
static void * bmw_EdgeringWalker_step (BMWalker *walker)
 
Boundary Edge Walker
static void bmw_EdgeboundaryWalker_begin (BMWalker *walker, void *data)
 
static void * bmw_EdgeboundaryWalker_yield (BMWalker *walker)
 
static void * bmw_EdgeboundaryWalker_step (BMWalker *walker)
 
UV Edge Walker

walk over uv islands; takes a loop as input. restrict flag restricts the walking to loops whose vert has restrict flag set as a tool flag.

The flag parameter to BMW_init maps to a loop customdata layer index.

static void bmw_UVEdgeWalker_begin (BMWalker *walker, void *data)
 
static void * bmw_UVEdgeWalker_yield (BMWalker *walker)
 
static void * bmw_UVEdgeWalker_step (BMWalker *walker)
 
Non-manifold Edge Walker
static void bmw_NonManifoldedgeWalker_begin (BMWalker *walker, void *data)
 
static void * bmw_NonManifoldedgeWalker_yield (BMWalker *walker)
 
static BMLoopbmw_NonManifoldLoop_find_next_around_vertex (BMLoop *l, BMVert *v, int face_count)
 
static void * bmw_NonManifoldedgeWalker_step (BMWalker *walker)
 

Variables

static BMWalker bmw_VertShellWalker_Type
 
static BMWalker bmw_LoopShellWalker_Type
 
static BMWalker bmw_LoopShellWireWalker_Type
 
static BMWalker bmw_FaceShellWalker_Type
 
static BMWalker bmw_IslandboundWalker_Type
 
static BMWalker bmw_IslandWalker_Type
 
static BMWalker bmw_IslandManifoldWalker_Type
 
static BMWalker bmw_EdgeLoopWalker_Type
 
static BMWalker bmw_FaceLoopWalker_Type
 
static BMWalker bmw_EdgeringWalker_Type
 
static BMWalker bmw_EdgeboundaryWalker_Type
 
static BMWalker bmw_NonManifoldedgeWalker_type
 
static BMWalker bmw_UVEdgeWalker_Type
 
static BMWalker bmw_ConnectedVertexWalker_Type
 
All Walker Types
BMWalkerbm_walker_types []
 
const int bm_totwalkers = ARRAY_SIZE(bm_walker_types)
 

Detailed Description

BMesh Walker Code.

Definition in file bmesh_walkers_impl.cc.

Macro Definition Documentation

◆ BMW_state_remove_r

#define BMW_state_remove_r ( walker,
owalk )

◆ EDGE_CHECK

#define EDGE_CHECK ( e)     (bmw_mask_check_edge(walker, e) && (BM_edge_is_boundary(e) || BM_edge_is_manifold(e)))

Referenced by bmw_EdgeringWalker_step().

Function Documentation

◆ bm_edge_is_single()

static bool bm_edge_is_single ( BMEdge * e)
static

Definition at line 842 of file bmesh_walkers_impl.cc.

References BM_edge_is_boundary(), BMVert::e, and e.

Referenced by bmw_EdgeLoopWalker_begin(), and bmw_EdgeLoopWalker_step().

◆ bmw_ConnectedVertexWalker_begin()

static void bmw_ConnectedVertexWalker_begin ( BMWalker * walker,
void * data )
static

Definition at line 591 of file bmesh_walkers_impl.cc.

References bmw_ConnectedVertexWalker_visitVertex(), data, and v.

◆ bmw_ConnectedVertexWalker_step()

◆ bmw_ConnectedVertexWalker_visitVertex()

static void bmw_ConnectedVertexWalker_visitVertex ( BMWalker * walker,
BMVert * v )
static

◆ bmw_ConnectedVertexWalker_yield()

static void * bmw_ConnectedVertexWalker_yield ( BMWalker * walker)
static

◆ bmw_edge_is_wire()

static bool bmw_edge_is_wire ( const BMWalker * walker,
const BMEdge * e )
static

Check for a wire edge, taking ignoring hidden.

Definition at line 74 of file bmesh_walkers_impl.cc.

References BM_edge_is_all_face_flag_test(), BM_edge_is_wire(), BM_ELEM_HIDDEN, BMW_FLAG_TEST_HIDDEN, e, and BMWalker::flag.

Referenced by bmw_LoopShellWalker_visitEdgeWire(), and bmw_LoopShellWireWalker_visitVert().

◆ bmw_EdgeboundaryWalker_begin()

static void bmw_EdgeboundaryWalker_begin ( BMWalker * walker,
void * data )
static

◆ bmw_EdgeboundaryWalker_step()

◆ bmw_EdgeboundaryWalker_yield()

static void * bmw_EdgeboundaryWalker_yield ( BMWalker * walker)
static

Definition at line 1454 of file bmesh_walkers_impl.cc.

References BMW_current_state(), and BMwEdgeboundaryWalker::e.

◆ bmw_EdgeLoopWalker_begin()

static void bmw_EdgeLoopWalker_begin ( BMWalker * walker,
void * data )
static

Detect an NGon (face-hub)

The face-hub - BMwEdgeLoopWalker.f_hub - is set when there is an ngon on one side of the edge and a series of faces on the other, loop around the ngon for as long as it's connected to faces which would form an edge loop in the absence of the ngon (used as the hub).

This isn't simply ignoring the ngon though, as the edges looped over must all be connected to the hub.

NGon in Grid Example

+-----+-----+-----+-----+-----+
| | | | | |
+-----va=ea=+==eb=+==ec=vb----+
| | | |
+-----+ +-----+
| | f_hub | |
+-----+ +-----+
| | | |
+-----+-----+-----+-----+-----+
| | | | | |
+-----+-----+-----+-----+-----+

In the example above, starting from edges marked ea/eb/ec, the will detect f_hub and walk along the edge loop between va -> vb. The same is true for any of the un-marked sides of the ngon, walking stops for vertices with >= 3 connected faces (in this case they look like corners).

Mixed Triangle-Fan & Quad Example

+-----------------------------------------------+
| f_hub |
va-ea-vb=eb=+==ec=+=ed==+=ee=vc=ef=vd----------ve
| |\ | | | / / \ |
| | \ \ | / / / \ |
| | \ | | | / / \ |
| | \ \ | / / / \ |
| | \ | | | / / \ |
| | \ \ | / / / \ |
| | \ | | | / / \ |
| | \ \ | / / / \ |
| | \| | |/ / \ |
| | \\|// / \ |
| | \|/ / \|
+-----+-----------+-----+-----------------------+

In the example above, starting from edges marked eb/eb/ed/ed/ef, the will detect f_hub and walk along the edge loop between vb -> vd.

Notice vb and vd delimit the loop, since the faces connected to vb excluding f_hub don't share an edge, which isn't walked over in the case of boundaries either.

Notice vc doesn't delimit stepping from ee onto ef as the stepping method used doesn't differentiate between the number of sides of faces opposite f_hub, only that each of the connected faces share an edge.

Definition at line 848 of file bmesh_walkers_impl.cc.

References BLI_gset_clear(), BLI_gset_insert(), BM_edge_is_boundary(), bm_edge_is_single(), BM_edge_other_vert(), BM_FACES_OF_EDGE, BM_ITER_ELEM, BM_vert_edge_count_nonwire(), BM_vert_face_count(), BMW_current_state(), BMW_state_add(), BMW_walk(), BMwEdgeLoopWalker::cur, data, e, BMwEdgeLoopWalker::f_hub, BMwEdgeLoopWalker::is_boundary, BMwEdgeLoopWalker::is_single, BMwEdgeLoopWalker::lastv, BMFace::len, BMwEdgeLoopWalker::start, BMwEdgeLoopWalker::startv, v, and BMWalker::visit_set.

◆ bmw_EdgeLoopWalker_step()

◆ bmw_EdgeLoopWalker_yield()

static void * bmw_EdgeLoopWalker_yield ( BMWalker * walker)
static

Definition at line 981 of file bmesh_walkers_impl.cc.

References BMW_current_state(), and BMwEdgeLoopWalker::cur.

◆ bmw_EdgeringWalker_begin()

◆ bmw_EdgeringWalker_step()

◆ bmw_EdgeringWalker_yield()

static void * bmw_EdgeringWalker_yield ( BMWalker * walker)
static

◆ bmw_FaceLoopWalker_begin()

◆ bmw_FaceLoopWalker_edge_begins_loop()

static bool bmw_FaceLoopWalker_edge_begins_loop ( BMWalker * walker,
BMEdge * e )
static

◆ bmw_FaceLoopWalker_include_face()

static bool bmw_FaceLoopWalker_include_face ( BMWalker * walker,
BMLoop * l )
static

Check whether the face loop should includes the face specified by the given BMLoop.

Definition at line 1165 of file bmesh_walkers_impl.cc.

References BLI_gset_haskey(), bmw_mask_check_face(), BMLoop::e, BMLoop::f, l, BMFace::len, BMWalker::visit_set, and BMWalker::visit_set_alt.

Referenced by bmw_FaceLoopWalker_edge_begins_loop(), and bmw_FaceLoopWalker_step().

◆ bmw_FaceLoopWalker_step()

◆ bmw_FaceLoopWalker_yield()

static void * bmw_FaceLoopWalker_yield ( BMWalker * walker)
static

Definition at line 1240 of file bmesh_walkers_impl.cc.

References BMW_current_state(), BMLoop::f, and BMwFaceLoopWalker::l.

◆ bmw_FaceShellWalker_begin()

static void bmw_FaceShellWalker_begin ( BMWalker * walker,
void * data )
static

Definition at line 523 of file bmesh_walkers_impl.cc.

References bmw_FaceShellWalker_visitEdge(), data, and e.

◆ bmw_FaceShellWalker_step()

static void * bmw_FaceShellWalker_step ( BMWalker * walker)
static

◆ bmw_FaceShellWalker_visitEdge()

static void bmw_FaceShellWalker_visitEdge ( BMWalker * walker,
BMEdge * e )
static

◆ bmw_FaceShellWalker_yield()

static void * bmw_FaceShellWalker_yield ( BMWalker * walker)
static

Definition at line 529 of file bmesh_walkers_impl.cc.

References BMW_current_state(), and BMwShellWalker::curedge.

◆ bmw_IslandboundWalker_begin()

static void bmw_IslandboundWalker_begin ( BMWalker * walker,
void * data )
static

◆ bmw_IslandboundWalker_step()

◆ bmw_IslandboundWalker_yield()

static void * bmw_IslandboundWalker_yield ( BMWalker * walker)
static

Definition at line 654 of file bmesh_walkers_impl.cc.

References BMW_current_state(), and BMwIslandboundWalker::curloop.

◆ bmw_IslandManifoldWalker_step()

static void * bmw_IslandManifoldWalker_step ( BMWalker * walker)
static

Ignore edges that don't have 2x usable faces.

Definition at line 828 of file bmesh_walkers_impl.cc.

References bmw_IslandWalker_step_ex().

◆ bmw_IslandWalker_begin()

static void bmw_IslandWalker_begin ( BMWalker * walker,
void * data )
static

◆ bmw_IslandWalker_step()

static void * bmw_IslandWalker_step ( BMWalker * walker)
static

Definition at line 820 of file bmesh_walkers_impl.cc.

References bmw_IslandWalker_step_ex().

◆ bmw_IslandWalker_step_ex()

◆ bmw_IslandWalker_yield()

static void * bmw_IslandWalker_yield ( BMWalker * walker)
static

Definition at line 751 of file bmesh_walkers_impl.cc.

References BMW_current_state(), and BMwIslandWalker::cur.

◆ bmw_LoopShellWalker_begin()

static void bmw_LoopShellWalker_begin ( BMWalker * walker,
void * data )
static

◆ bmw_LoopShellWalker_step()

static void * bmw_LoopShellWalker_step ( BMWalker * walker)
static

◆ bmw_LoopShellWalker_step_impl()

◆ bmw_LoopShellWalker_visitEdgeWire()

static void bmw_LoopShellWalker_visitEdgeWire ( BMWalker * walker,
BMEdge * e )
static

◆ bmw_LoopShellWalker_visitLoop()

◆ bmw_LoopShellWalker_yield()

static void * bmw_LoopShellWalker_yield ( BMWalker * walker)
static

Definition at line 293 of file bmesh_walkers_impl.cc.

References BMW_current_state(), and BMwLoopShellWalker::curloop.

◆ bmw_LoopShellWireWalker_begin()

◆ bmw_LoopShellWireWalker_step()

◆ bmw_LoopShellWireWalker_visitVert()

◆ bmw_LoopShellWireWalker_yield()

static void * bmw_LoopShellWireWalker_yield ( BMWalker * walker)
static

Definition at line 463 of file bmesh_walkers_impl.cc.

References BMW_current_state(), and BMwLoopShellWireWalker::curelem.

◆ bmw_mask_check_edge()

◆ bmw_mask_check_face()

◆ bmw_mask_check_vert()

◆ bmw_NonManifoldedgeWalker_begin()

◆ bmw_NonManifoldedgeWalker_step()

◆ bmw_NonManifoldedgeWalker_yield()

static void * bmw_NonManifoldedgeWalker_yield ( BMWalker * walker)
static

◆ bmw_NonManifoldLoop_find_next_around_vertex()

static BMLoop * bmw_NonManifoldLoop_find_next_around_vertex ( BMLoop * l,
BMVert * v,
int face_count )
static

Walk over manifold loops around v until loop-edge is found with face_count users. or return nullptr if not found.

Definition at line 1642 of file bmesh_walkers_impl.cc.

References BLI_assert, BM_edge_face_count_is_equal, BM_loop_other_edge_loop(), BMLoop::e, l, BMLoop::radial_next, and v.

Referenced by bmw_NonManifoldedgeWalker_step().

◆ bmw_UVEdgeWalker_begin()

static void bmw_UVEdgeWalker_begin ( BMWalker * walker,
void * data )
static

◆ bmw_UVEdgeWalker_step()

◆ bmw_UVEdgeWalker_yield()

static void * bmw_UVEdgeWalker_yield ( BMWalker * walker)
static

Definition at line 1530 of file bmesh_walkers_impl.cc.

References BMW_current_state(), and BMwUVEdgeWalker::l.

◆ bmw_VertShellWalker_begin()

static void bmw_VertShellWalker_begin ( BMWalker * walker,
void * data )
static

◆ bmw_VertShellWalker_step()

static void * bmw_VertShellWalker_step ( BMWalker * walker)
static

◆ bmw_VertShellWalker_visitEdge()

static void bmw_VertShellWalker_visitEdge ( BMWalker * walker,
BMEdge * e )
static

◆ bmw_VertShellWalker_yield()

static void * bmw_VertShellWalker_yield ( BMWalker * walker)
static

Definition at line 149 of file bmesh_walkers_impl.cc.

References BMW_current_state(), and BMwShellWalker::curedge.

Variable Documentation

◆ bm_totwalkers

const int bm_totwalkers = ARRAY_SIZE(bm_walker_types)

Definition at line 1883 of file bmesh_walkers_impl.cc.

◆ bm_walker_types

BMWalker* bm_walker_types[]
Initial value:
= {
}
static BMWalker bmw_UVEdgeWalker_Type
static BMWalker bmw_FaceLoopWalker_Type
static BMWalker bmw_ConnectedVertexWalker_Type
static BMWalker bmw_FaceShellWalker_Type
static BMWalker bmw_EdgeboundaryWalker_Type
static BMWalker bmw_LoopShellWireWalker_Type
static BMWalker bmw_IslandboundWalker_Type
static BMWalker bmw_EdgeringWalker_Type
static BMWalker bmw_LoopShellWalker_Type
static BMWalker bmw_EdgeLoopWalker_Type
static BMWalker bmw_VertShellWalker_Type
static BMWalker bmw_IslandManifoldWalker_Type
static BMWalker bmw_NonManifoldedgeWalker_type
static BMWalker bmw_IslandWalker_Type

Definition at line 1866 of file bmesh_walkers_impl.cc.

Referenced by BMW_init().

◆ bmw_ConnectedVertexWalker_Type

BMWalker bmw_ConnectedVertexWalker_Type
static
Initial value:
= {
}
#define BM_VERT
@ BMW_BREADTH_FIRST
static void bmw_ConnectedVertexWalker_begin(BMWalker *walker, void *data)
static void * bmw_ConnectedVertexWalker_step(BMWalker *walker)
static void * bmw_ConnectedVertexWalker_yield(BMWalker *walker)
struct BMwConnectedVertexWalker BMwConnectedVertexWalker

Definition at line 1850 of file bmesh_walkers_impl.cc.

◆ bmw_EdgeboundaryWalker_Type

BMWalker bmw_EdgeboundaryWalker_Type
static
Initial value:
= {
0,
}
#define BM_EDGE
@ BMW_DEPTH_FIRST
static void bmw_EdgeboundaryWalker_begin(BMWalker *walker, void *data)
static void * bmw_EdgeboundaryWalker_yield(BMWalker *walker)
static void * bmw_EdgeboundaryWalker_step(BMWalker *walker)
struct BMwEdgeboundaryWalker BMwEdgeboundaryWalker

Definition at line 1820 of file bmesh_walkers_impl.cc.

◆ bmw_EdgeLoopWalker_Type

BMWalker bmw_EdgeLoopWalker_Type
static
Initial value:
= {
0,
}
static void * bmw_EdgeLoopWalker_step(BMWalker *walker)
static void * bmw_EdgeLoopWalker_yield(BMWalker *walker)
static void bmw_EdgeLoopWalker_begin(BMWalker *walker, void *data)
struct BMwEdgeLoopWalker BMwEdgeLoopWalker

Definition at line 1788 of file bmesh_walkers_impl.cc.

◆ bmw_EdgeringWalker_Type

BMWalker bmw_EdgeringWalker_Type
static
Initial value:
= {
}
static void * bmw_EdgeringWalker_step(BMWalker *walker)
static void bmw_EdgeringWalker_begin(BMWalker *walker, void *data)
static void * bmw_EdgeringWalker_yield(BMWalker *walker)
struct BMwEdgeringWalker BMwEdgeringWalker

Definition at line 1810 of file bmesh_walkers_impl.cc.

◆ bmw_FaceLoopWalker_Type

BMWalker bmw_FaceLoopWalker_Type
static
Initial value:
= {
0,
}
static void bmw_FaceLoopWalker_begin(BMWalker *walker, void *data)
static void * bmw_FaceLoopWalker_yield(BMWalker *walker)
static void * bmw_FaceLoopWalker_step(BMWalker *walker)
struct BMwFaceLoopWalker BMwFaceLoopWalker

Definition at line 1799 of file bmesh_walkers_impl.cc.

◆ bmw_FaceShellWalker_Type

BMWalker bmw_FaceShellWalker_Type
static
Initial value:
= {
sizeof(BMwShellWalker),
}
static void bmw_FaceShellWalker_begin(BMWalker *walker, void *data)
static void * bmw_FaceShellWalker_yield(BMWalker *walker)
static void * bmw_FaceShellWalker_step(BMWalker *walker)
struct BMwShellWalker BMwShellWalker

Definition at line 1748 of file bmesh_walkers_impl.cc.

◆ bmw_IslandboundWalker_Type

BMWalker bmw_IslandboundWalker_Type
static
Initial value:
= {
}
@ BM_LOOP
#define BM_FACE
static void * bmw_IslandboundWalker_yield(BMWalker *walker)
static void * bmw_IslandboundWalker_step(BMWalker *walker)
static void bmw_IslandboundWalker_begin(BMWalker *walker, void *data)
struct BMwIslandboundWalker BMwIslandboundWalker

Definition at line 1758 of file bmesh_walkers_impl.cc.

◆ bmw_IslandManifoldWalker_Type

BMWalker bmw_IslandManifoldWalker_Type
static
Initial value:
= {
sizeof(BMwIslandWalker),
}
static void * bmw_IslandManifoldWalker_step(BMWalker *walker)
static void bmw_IslandWalker_begin(BMWalker *walker, void *data)
static void * bmw_IslandWalker_yield(BMWalker *walker)
struct BMwIslandWalker BMwIslandWalker

Definition at line 1778 of file bmesh_walkers_impl.cc.

◆ bmw_IslandWalker_Type

BMWalker bmw_IslandWalker_Type
static
Initial value:

Definition at line 1768 of file bmesh_walkers_impl.cc.

◆ bmw_LoopShellWalker_Type

BMWalker bmw_LoopShellWalker_Type
static
Initial value:
= {
}
static void * bmw_LoopShellWalker_step(BMWalker *walker)
static void * bmw_LoopShellWalker_yield(BMWalker *walker)
static void bmw_LoopShellWalker_begin(BMWalker *walker, void *data)
struct BMwLoopShellWalker BMwLoopShellWalker

Definition at line 1728 of file bmesh_walkers_impl.cc.

◆ bmw_LoopShellWireWalker_Type

BMWalker bmw_LoopShellWireWalker_Type
static
Initial value:
= {
}
static void bmw_LoopShellWireWalker_begin(BMWalker *walker, void *data)
static void * bmw_LoopShellWireWalker_step(BMWalker *walker)
static void * bmw_LoopShellWireWalker_yield(BMWalker *walker)
struct BMwLoopShellWireWalker BMwLoopShellWireWalker

Definition at line 1738 of file bmesh_walkers_impl.cc.

◆ bmw_NonManifoldedgeWalker_type

BMWalker bmw_NonManifoldedgeWalker_type
static
Initial value:
= {
0,
}
static void * bmw_NonManifoldedgeWalker_step(BMWalker *walker)
static void bmw_NonManifoldedgeWalker_begin(BMWalker *walker, void *data)
static void * bmw_NonManifoldedgeWalker_yield(BMWalker *walker)
struct BMwNonManifoldEdgeLoopWalker BMwNonManifoldEdgeLoopWalker

Definition at line 1830 of file bmesh_walkers_impl.cc.

◆ bmw_UVEdgeWalker_Type

BMWalker bmw_UVEdgeWalker_Type
static
Initial value:
= {
sizeof(BMwUVEdgeWalker),
}
static void * bmw_UVEdgeWalker_step(BMWalker *walker)
static void * bmw_UVEdgeWalker_yield(BMWalker *walker)
static void bmw_UVEdgeWalker_begin(BMWalker *walker, void *data)
struct BMwUVEdgeWalker BMwUVEdgeWalker

Definition at line 1840 of file bmesh_walkers_impl.cc.

◆ bmw_VertShellWalker_Type

BMWalker bmw_VertShellWalker_Type
static
Initial value:
= {
sizeof(BMwShellWalker),
}
static void bmw_VertShellWalker_begin(BMWalker *walker, void *data)
static void * bmw_VertShellWalker_yield(BMWalker *walker)
static void * bmw_VertShellWalker_step(BMWalker *walker)

Definition at line 1718 of file bmesh_walkers_impl.cc.