28 this->
queue.push(vertex);
33 for (
const int vert :
verts) {
40 this->
queue.push(vertex);
45 for (
const int vert :
verts) {
52 this->
queue.push(vertex);
57 for (
const int vert :
verts) {
64 this->
queue.push(vertex);
70 this->
queue.push(vertex);
76 this->
queue.push(vertex);
93 while (!this->
queue.empty()) {
94 const int from_v = this->
queue.front();
102 for (
const int neighbor : neighbors) {
107 if (!hide_vert.is_empty() && hide_vert[neighbor]) {
112 if (func(from_v, neighbor)) {
113 this->
queue.push(neighbor);
125 while (!this->
queue.empty()) {
144 const int index_in_grid = neighbor.
y * key.
grid_size + neighbor.
x;
157 const bool is_duplicate =
i >= num_unique;
158 if (func(from_v, neighbor, is_duplicate)) {
159 this->
queue.push(neighbor);
169 while (!this->
queue.empty()) {
190 if (func(from_v, neighbor)) {
191 this->
queue.push(neighbor);
CCGKey BKE_subdiv_ccg_key_top_level(const SubdivCCG &subdiv_ccg)
void BKE_subdiv_ccg_neighbor_coords_get(const SubdivCCG &subdiv_ccg, const SubdivCCGCoord &coord, bool include_duplicates, SubdivCCGNeighbors &r_neighbors)
#define BM_elem_index_get(ele)
#define BM_elem_flag_test(ele, hflag)
BLI_INLINE BMVert * BM_vert_at_index(BMesh *bm, const int index)
void append(const T &value)
void insert(const int64_t insert_index, const T &value)
GAttributeReader lookup_or_default(StringRef attribute_id, AttrDomain domain, AttrType data_type, const void *default_value=nullptr) const
GAttributeReader lookup(const StringRef attribute_id) const
Vector< BMVert *, 64 > BMeshNeighborVerts
Span< BMVert * > vert_neighbors_get_bmesh(BMVert &vert, BMeshNeighborVerts &r_neighbors)
Span< int > vert_neighbors_get_mesh(const OffsetIndices< int > faces, const Span< int > corner_verts, const GroupedSpan< int > vert_to_face, const Span< bool > hide_poly, const int vert, Vector< int > &r_neighbors)
#define FAKE_NEIGHBOR_NONE
int to_index(const CCGKey &key) const
static SubdivCCGCoord from_index(const CCGKey &key, int index)
SubdivCCGNeighborCoords coords
blender::BitGroupVector grid_hidden
Span< int > fake_neighbors
std::queue< BMVert * > queue
void add_initial(BMVert *vertex)
void add_and_skip_initial(BMVert *vertex, int index)
void execute(Object &object, FunctionRef< bool(BMVert *from_v, BMVert *to_v)> func)
void execute(Object &object, const SubdivCCG &subdiv_ccg, FunctionRef< bool(SubdivCCGCoord from_v, SubdivCCGCoord to_v, bool is_duplicate)> func)
std::queue< SubdivCCGCoord > queue
void add_initial(SubdivCCGCoord vertex)
Span< int > fake_neighbors
void add_and_skip_initial(SubdivCCGCoord vertex, int index)
void execute(Object &object, GroupedSpan< int > vert_to_face_map, FunctionRef< bool(int from_v, int to_v)> func)
void add_and_skip_initial(int vertex)
void add_initial(int vertex)
Span< int > fake_neighbors