Blender V4.3
bmesh_iterators.hh File Reference

Go to the source code of this file.

Classes

struct  BMIter__elem_of_mesh
 
struct  BMIter__edge_of_vert
 
struct  BMIter__face_of_vert
 
struct  BMIter__loop_of_vert
 
struct  BMIter__loop_of_edge
 
struct  BMIter__loop_of_loop
 
struct  BMIter__face_of_edge
 
struct  BMIter__vert_of_edge
 
struct  BMIter__vert_of_face
 
struct  BMIter__edge_of_face
 
struct  BMIter__loop_of_face
 
struct  BMIter
 

Macros

#define BM_ITYPE_MAX   14
 
#define BMITER_CB_DEF(name)
 
#define BM_ITER_CHECK_TYPE_DATA(data)    CHECK_TYPE_ANY(data, void *, BMFace *, BMEdge *, BMVert *, BMLoop *, BMElem *)
 
#define BM_iter_new(iter, bm, itype, data)    (BM_ITER_CHECK_TYPE_DATA(data), BM_iter_new(iter, bm, itype, data))
 
#define BM_iter_init(iter, bm, itype, data)    (BM_ITER_CHECK_TYPE_DATA(data), BM_iter_init(iter, bm, itype, data))
 
Defines for passing to #BM_iter_new.

"OF" can be substituted for "around" so BM_VERTS_OF_FACE means "vertices* around a face."

#define BM_ITER_MESH(ele, iter, bm, itype)
 
#define BM_ITER_MESH_INDEX(ele, iter, bm, itype, indexvar)
 
#define BM_ITER_MESH_MUTABLE(ele, ele_next, iter, bm, itype)
 
#define BM_ITER_ELEM(ele, iter, data, itype)
 
#define BM_ITER_ELEM_INDEX(ele, iter, data, itype, indexvar)
 

Typedefs

typedef enum BMIterType BMIterType
 BMesh Iterators.
 
typedef void(* BMIter__begin_cb) (void *)
 
typedef void *(* BMIter__step_cb) (void *)
 

Enumerations

enum  BMIterType {
  BM_VERTS_OF_MESH = 1 , BM_EDGES_OF_MESH = 2 , BM_FACES_OF_MESH = 3 , BM_EDGES_OF_VERT = 4 ,
  BM_FACES_OF_VERT = 5 , BM_LOOPS_OF_VERT = 6 , BM_VERTS_OF_EDGE = 7 , BM_FACES_OF_EDGE = 8 ,
  BM_VERTS_OF_FACE = 9 , BM_EDGES_OF_FACE = 10 , BM_LOOPS_OF_FACE = 11 , BM_LOOPS_OF_LOOP = 12 ,
  BM_LOOPS_OF_EDGE = 13
}
 BMesh Iterators. More...
 

Functions

void * BM_iter_at_index (BMesh *bm, char itype, void *data, int index) ATTR_WARN_UNUSED_RESULT
 
int BM_iter_as_array (BMesh *bm, char itype, void *data, void **array, int len)
 Iterator as Array.
 
void * BM_iter_as_arrayN (BMesh *bm, char itype, void *data, int *r_len, void **stack_array, int stack_array_size) ATTR_WARN_UNUSED_RESULT
 Iterator as Array.
 
int BMO_iter_as_array (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, char restrictmask, void **array, int len)
 Operator Iterator as Array.
 
void * BMO_iter_as_arrayN (BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, char restrictmask, int *r_len, void **stack_array, int stack_array_size)
 
int BM_iter_mesh_bitmap_from_filter (char itype, BMesh *bm, blender::MutableBitSpan bitmap, bool(*test_fn)(BMElem *, void *user_data), void *user_data)
 
int BM_iter_mesh_bitmap_from_filter_tessface (BMesh *bm, blender::MutableBitSpan bitmap, bool(*test_fn)(BMFace *, void *user_data), void *user_data)
 
int BM_iter_elem_count_flag (char itype, void *data, char hflag, bool value)
 Elem Iter Flag Count.
 
int BMO_iter_elem_count_flag (BMesh *bm, char itype, void *data, short oflag, bool value)
 Elem Iter Tool Flag Count.
 
int BM_iter_mesh_count (char itype, BMesh *bm)
 
int BM_iter_mesh_count_flag (char itype, BMesh *bm, char hflag, bool value)
 Mesh Iter Flag Count.
 
 BMITER_CB_DEF (elem_of_mesh)
 
 BMITER_CB_DEF (edge_of_vert)
 
 BMITER_CB_DEF (face_of_vert)
 
 BMITER_CB_DEF (loop_of_vert)
 
 BMITER_CB_DEF (loop_of_edge)
 
 BMITER_CB_DEF (loop_of_loop)
 
 BMITER_CB_DEF (face_of_edge)
 
 BMITER_CB_DEF (vert_of_edge)
 
 BMITER_CB_DEF (vert_of_face)
 
 BMITER_CB_DEF (edge_of_face)
 
 BMITER_CB_DEF (loop_of_face)
 

Variables

const char bm_iter_itype_htype_map [BM_ITYPE_MAX]
 

Macro Definition Documentation

◆ BM_ITER_CHECK_TYPE_DATA

#define BM_ITER_CHECK_TYPE_DATA ( data)     CHECK_TYPE_ANY(data, void *, BMFace *, BMEdge *, BMVert *, BMLoop *, BMElem *)

Definition at line 281 of file bmesh_iterators.hh.

◆ BM_ITER_ELEM

#define BM_ITER_ELEM ( ele,
iter,
data,
itype )
Value:
for (BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_new(iter, NULL, itype, data); ele; \
BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_step(iter))
#define BM_CHECK_TYPE_ELEM_ASSIGN(ele)
#define BM_iter_new(iter, bm, itype, data)
ATTR_WARN_UNUSED_RESULT BMesh const char itype
#define NULL

Definition at line 91 of file bmesh_iterators.hh.

Referenced by blender::ed::object::bake_targets_output_vertex_colors(), bev_create_ngon(), bev_merge_edge_uvs(), bev_merge_uvs(), bev_rebuild_polygon(), bevel_build_edge_polygons(), bevel_edge_order_extend(), bevel_edges_sharp_boundary(), bevel_harden_normals(), bevel_vert_construct(), BKE_mesh_remesh_voxel_fix_poles(), BKE_pbvh_sync_visibility_from_verts(), bm_clear_uv_vert_selection(), BM_custom_loop_normals_to_vector_layer(), BM_data_layer_copy(), bm_decim_edge_collapse(), bm_edge_collapse_is_degenerate_flip(), bm_edge_collapse_is_degenerate_topology(), bm_edge_info_average_length(), bm_edge_info_average_length_fallback(), bm_edge_is_select_isolated(), BM_edge_normals_update(), BM_edge_pair_share_face_by_len(), bm_edgenet_path_step(), bm_edgering_pair_calc(), bm_edgering_pair_order(), bm_edgering_pair_subdiv(), BM_face_exists_multi(), BM_face_exists_overlap(), BM_face_exists_overlap_subset(), BM_face_multires_bounds_smooth(), bm_face_region_pivot_edge_find(), bm_face_region_vert_boundary_id(), bm_face_region_vert_pass_id(), BM_face_share_face_check(), BM_face_share_face_count(), bm_face_split(), bm_face_split_by_edges(), BM_face_split_edgenet(), BM_iter_elem_count_flag(), BM_lnorspace_invalidate(), BM_lnorspace_rebuild(), bm_loop_customdata_merge(), BM_loop_normal_editdata_array_init(), bm_loop_normal_mark_indiv(), bm_loop_normal_mark_indiv_do_loop(), bm_loop_path_build_step(), bm_loop_tags_clear(), bm_loop_uv_select_single_vert_validate(), BM_mesh_bevel(), BM_mesh_bisect_plane(), BM_mesh_calc_edge_groups(), BM_mesh_calc_face_groups(), BM_mesh_calc_path_uv_region_edge(), BM_mesh_calc_path_uv_region_vert(), BM_mesh_calc_uvs_circle(), BM_mesh_calc_uvs_cone(), BM_mesh_data_free(), BM_mesh_decimate_dissolve_ex(), BM_mesh_decimate_unsubdivide_ex(), bm_mesh_loops_custom_normals_set(), BM_mesh_remap(), BM_mesh_wireframe(), bm_ray_cast_cb_elem_not_in_face_check(), bm_uidwalk_calc_vert_uid(), bm_uv_build_islands(), BM_uv_element_map_create(), bm_vert_boundary_tangent(), BM_vert_calc_shell_factor(), BM_vert_calc_shell_factor_ex(), bm_vert_calc_surface_tangent(), BM_vert_collapse_faces(), bm_vert_dissolve_fan(), bm_vert_dissolve_fan_test(), BM_vert_edge_count_nonwire(), bm_vert_fasthash_single(), BM_vert_is_all_edge_flag_test(), BM_vert_is_all_face_flag_test(), bm_vert_is_tag_edge_connect(), bm_vert_is_uid_connect(), BM_vert_loop_groups_data_layer_create(), bm_vert_other_tag(), bm_vert_pair_best_face_get(), BM_vert_pair_share_face_by_angle(), BM_vert_pair_share_face_by_len(), BM_vert_pair_share_face_check(), BM_vert_pair_share_face_check_cb(), BM_vert_pair_shared_face_cb(), bm_vert_pair_to_matrix(), blender::ed::sculpt_paint::smooth::bmesh_four_neighbor_average(), blender::ed::mesh::set_attribute::bmesh_loop_layer_selected_values_set(), bmesh_test_loose_edge(), bmo_average_vert_facedata_exec(), bmo_collapsecon_do_layer(), bmo_connect_verts_exec(), bmo_create_icosphere_exec(), bmo_create_monkey_exec(), bmo_create_uvsphere_exec(), bmo_dissolve_edges_exec(), bmo_dissolve_verts_exec(), bmo_edgeloop_fill_exec(), bmo_extrude_face_region_exec(), bmo_inset_region_exec(), BMO_iter_elem_count_flag(), bmo_mesh_copy(), bmo_mirror_exec(), bmo_offset_edgeloops_exec(), bmo_planar_faces_exec(), bmo_pointmerge_facedata_exec(), bmo_region_extend_contract(), bmo_region_extend_expand(), bmo_rotate_colors_exec(), bmo_rotate_uvs_exec(), bmo_smooth_vert_exec(), bmo_split_exec(), bmo_subdivide_edgering_exec(), bmo_subdivide_edges_exec(), bmo_triangle_fill_exec(), bmo_weld_verts_exec(), bmw_ConnectedVertexWalker_step(), bmw_EdgeboundaryWalker_step(), bmw_EdgeLoopWalker_begin(), bmw_EdgeLoopWalker_step(), bmw_FaceShellWalker_step(), bmw_LoopShellWalker_begin(), bmw_LoopShellWireWalker_visitVert(), bmw_UVEdgeWalker_step(), bmw_VertShellWalker_begin(), bmw_VertShellWalker_step(), build_hull(), calc_solidify_normals(), check_hole_in_region(), collapse_face_corners(), construct_param_edge_set_seams(), createTransUVs(), CustomData_bmesh_merge_layout(), do_lasso_select_mesh_uv(), DRW_text_edit_mesh_measure_stats(), ED_transverts_create_from_obedit(), ED_uvedit_ensure_uvs(), ED_uvedit_foreach_uv(), ED_uvedit_select_all(), ED_uvedit_selected_edges(), ED_uvedit_selected_verts(), ED_uvedit_selectmode_clean(), ED_uvedit_selectmode_flush(), edbm_add_edge_face_exec__vert_edge_lookup(), edbm_bridge_tag_boundary_edges(), edbm_dissolve_limited_exec(), edbm_extrude_discrete_faces(), edbm_face_split_by_edges_exec(), edbm_fill_grid_vert_tag_angle(), EDBM_mesh_knife(), edbm_region_to_loop_exec(), edbm_rip_edge_invoke(), edbm_rip_invoke__edge(), edbm_rip_invoke__vert(), edbm_ripsel_edge_mark_step(), edbm_ripsel_edge_uid_step(), edbm_ripsel_looptag_helper(), edbm_screw_exec(), edbm_select_linked_flat_faces_exec(), edbm_select_loose_exec(), edbm_set_normals_from_faces_exec(), edbm_smooth_normals_exec(), edge_next(), edge_step(), edgering_find_order(), edges_face_connected_at_vert(), edgetag_add_adjacent(), edgetag_add_adjacent_uv(), edgetag_test_cb(), face_step(), facetag_add_adjacent(), facetag_add_adjacent_uv(), facetag_test_cb(), fast_bevel_edge_order(), find_bevel_edge_order(), blender::bke::pbvh::find_outer_flap_vert(), geometry_extract_tag_masked_faces(), get_bm_knife_edge(), get_bm_knife_vert(), get_incident_edges(), get_initial_edge_y(), get_uv_edge_needle(), get_uv_face_needle(), get_uv_vert_needle(), UVGroups::init(), is_vert_slide_visible_bmesh(), isect_ray_poly(), island_has_pins(), island_uv_transform(), knife_add_edge_faces_to_vert(), knife_get_face_kedges(), loop_find_region(), loop_find_regions(), math_layer_info_init(), blender::bke::pbvh::merge_face_edge_data(), mesh_calc_path_region_elem(), mesh_customdatacorrect_find_best_face_substitute(), mouse_mesh_loop(), multires_unsubdivide_extract_grids(), multires_unsubdivide_extract_single_grid_from_face_edge(), blender::bke::pbvh::pbvh_bmesh_split_edge(), remdoubles_splitface(), seam_connected_recursive(), shrink_loop_uv_by_aspect_ratio(), blender::ed::object::skin_root_clear(), skin_smooth_hulls(), slice_paint_mask(), smart_project_exec(), solidify_add_thickness(), state_step(), stitch_init(), texface_from_original_index(), transform_convert_mesh_connectivity_distance(), transform_convert_mesh_islands_calc(), transform_mesh_edge_slide_data_create(), transform_mesh_vert_slide_data_create(), unsubdivide_build_base_mesh_from_tags(), unsubdivide_face_center_vertex_tag(), unsubdivide_init_elem_ids(), unsubdivide_is_center_vertex_tag_valid(), unsubdivide_tag_disconnected_mesh_element(), update_data_blocks(), uv_box_select_exec(), uv_circle_select_exec(), uv_cylinder_project(), uv_find_nearest_loop_from_edge(), uv_find_nearest_loop_from_vert(), uv_from_view_exec(), uv_hide_exec(), uv_isolate_selected_islands(), uv_map_clip_correct(), uv_map_mirror(), uv_mark_seam_exec(), uv_pin_exec(), uv_remove_doubles_to_selected_shared_vertex(), uv_reveal_exec(), uv_rip_object(), uv_rip_pairs_calc_uv_angle(), uv_rip_pairs_loop_count_on_side(), uv_rip_single_from_loop(), uv_sculpt_stroke_init(), uv_select_all(), uv_select_edgeloop(), uv_select_flush_from_loop_edge_flag(), uv_select_flush_from_tag_face(), uv_select_flush_from_tag_loop(), uv_select_invert(), uv_select_linked_multi(), uv_select_more_less(), uv_select_pinned_exec(), uv_select_similar_edge_exec(), uv_select_similar_vert_exec(), uv_select_split_exec(), uv_set_connectivity_distance(), uv_snap_uvs_to_adjacent_unselected(), uv_sphere_project(), uvedit_center(), uvedit_deselect_flush(), uvedit_face_select_disable(), uvedit_face_select_enable(), uvedit_face_select_shared_vert(), uvedit_face_select_test_ex(), uvedit_first_selected_uv_from_vertex(), uvedit_have_selection(), uvedit_is_face_affected(), uvedit_prepare_pinned_indices(), uvedit_select_flush(), uvedit_select_is_any_selected(), uvedit_translate(), uvedit_unwrap_cube_project(), uvedit_vert_is_all_other_faces_selected(), uvedit_vert_is_face_select_any_other(), uvedit_vertex_select_tagged(), vert_face_normal_mark_set(), vert_face_normal_mark_update(), blender::ed::sculpt_paint::face_set::vert_has_face_set(), blender::bke::pbvh::vert_in_face_adjacent_to_edge(), vert_is_boundary(), blender::ed::sculpt_paint::vert_neighbors_get_bmesh(), blender::ed::sculpt_paint::vert_neighbors_get_interior_bmesh(), verttag_add_adjacent(), verttag_add_adjacent_uv(), verttag_set_cb(), verttag_test_cb(), and blender::ed::object::vgroup_smooth_subset().

◆ BM_ITER_ELEM_INDEX

◆ BM_iter_init

#define BM_iter_init ( iter,
bm,
itype,
data )    (BM_ITER_CHECK_TYPE_DATA(data), BM_iter_init(iter, bm, itype, data))

◆ BM_ITER_MESH

#define BM_ITER_MESH ( ele,
iter,
bm,
itype )
Value:
for (BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_new(iter, bm, itype, NULL); ele; \
BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_step(iter))
ATTR_WARN_UNUSED_RESULT BMesh * bm

Definition at line 66 of file bmesh_iterators.hh.

Referenced by adjust_offsets(), blender::ed::sculpt_paint::expand::any_nonzero_mask(), blender::ed::sculpt_paint::trim::apply_trim(), blender::ed::object::bake_targets_output_vertex_colors(), bevel_edges_sharp_boundary(), bevel_harden_normals(), bevel_limit_offset(), bevel_set_weighted_normal_face_strength(), BKE_crazyspace_set_quats_editmesh(), BKE_editmesh_cache_calc_minmax(), BKE_mesh_ensure_skin_customdata(), BKE_mesh_material_remap(), BKE_mesh_remesh_voxel_fix_poles(), BKE_object_defgroup_clear(), BKE_pbvh_sync_visibility_from_verts(), bm_clear_uv_vert_selection(), BM_custom_loop_normals_to_vector_layer(), BM_data_layer_copy(), bm_decim_build_quadrics(), bm_decim_triangulate_begin(), bm_decim_triangulate_end(), bm_edge_info_average_length_fallback(), bm_edgenet_edge_get_next(), bm_face_split(), BM_iter_mesh_count_flag(), BM_lnorspace_invalidate(), BM_lnorspace_rebuild(), BM_log_all_added(), bm_log_assign_ids(), BM_log_before_all_removed(), BM_loop_at_index_find(), BM_loop_normal_editdata_array_init(), bm_loop_normal_mark_indiv(), bm_loop_tags_clear(), BM_mesh_active_face_get(), BM_mesh_bevel(), BM_mesh_bisect_plane(), BM_mesh_calc_edge_groups_as_arrays(), BM_mesh_calc_path_uv_edge(), BM_mesh_calc_path_uv_face(), BM_mesh_calc_path_uv_region_edge(), BM_mesh_calc_path_uv_region_vert(), BM_mesh_calc_path_uv_vert(), bm_mesh_calc_tessellation__single_threaded(), BM_mesh_calc_tessellation_beauty(), bm_mesh_calc_uv_islands(), BM_mesh_calc_uvs_circle(), BM_mesh_calc_uvs_cone(), BM_mesh_calc_uvs_cube(), BM_mesh_calc_uvs_grid(), BM_mesh_calc_uvs_sphere(), BM_mesh_calc_volume(), BM_mesh_data_free(), BM_mesh_decimate_dissolve_ex(), BM_mesh_decimate_unsubdivide_ex(), BM_mesh_delete_hflag_context(), BM_mesh_deselect_flush(), BM_mesh_edgeloops_find(), BM_mesh_edgeloops_find_path(), BM_mesh_edgenet(), BM_mesh_edgesplit(), BM_mesh_elem_index_ensure_ex(), BM_mesh_elem_index_validate(), BM_mesh_elem_toolflags_ensure(), bm_mesh_elems_select_get_n__internal(), bm_mesh_flag_count(), BM_mesh_intersect_edges(), bm_mesh_loops_calc_normals__single_threaded(), bm_mesh_loops_calc_normals_no_autosmooth(), bm_mesh_loops_custom_normals_set(), BM_mesh_region_match(), BM_mesh_remap(), BM_mesh_select_flush(), BM_mesh_select_mode_clean_ex(), BM_mesh_select_mode_set(), BM_mesh_separate_faces(), BM_mesh_triangulate(), BM_mesh_wireframe(), bm_rotate_edges_shared(), BM_uv_element_map_create(), BM_uv_vert_map_create(), bm_vert_fasthash_create(), bm_verts_tag_count(), BMD_mesh_bm_create(), BMD_mesh_intersection(), bmesh_face_attribute_fill(), blender::ed::mesh::set_attribute::bmesh_loop_layer_selected_values_set(), bmesh_selected_verts_center_calc(), blender::ed::mesh::set_attribute::bmesh_vert_edge_face_layer_selected_values_set(), bmo_beautify_fill_exec(), bmo_collapse_exec(), bmo_collapsecon_do_layer(), bmo_create_icosphere_exec(), bmo_create_uvsphere_exec(), bmo_dissolve_degenerate_exec(), bmo_dissolve_edges_exec(), bmo_dissolve_faces_exec(), bmo_extrude_face_region_exec(), bmo_inset_region_exec(), bmo_join_triangles_exec(), bmo_mesh_copy(), BMO_mesh_delete_oflag_context(), bmo_mesh_flag_count(), BMO_mesh_flag_disable_all(), BMO_slot_buffer_from_all(), bmo_slot_buffer_from_flag(), bmo_slot_buffer_from_hflag(), bmo_split_exec(), bmo_subdivide_edges_exec(), bmo_unsubdivide_exec(), bmo_weld_verts_exec(), bpy_bmesh_transform(), calc_ortho_extent(), calc_solidify_normals(), construct_param_edge_set_seams(), contarget_get_mesh_mat(), correct_uv_aspect(), correct_uv_aspect_per_face(), createTransEdge(), createTransEditVerts(), createTransMeshSkin(), createTransMeshVertCData(), createTransUVs(), CustomData_bmesh_merge_layout(), cylinder_project_exec(), blender::ed::sculpt_paint::face_set::delete_geometry(), deselect_nth_active(), do_lasso_select_mesh_uv(), doEdgeSplit(), blender::draw::draw_subdiv_cache_extra_coarse_face_data_bm(), DRW_text_edit_mesh_measure_stats(), ED_mesh_mirrtopo_init(), ED_mesh_uv_loop_reset_ex(), ED_transverts_create_from_obedit(), ED_uvedit_ensure_uvs(), ED_uvedit_foreach_uv(), ED_uvedit_select_all(), ED_uvedit_selected_edges(), ED_uvedit_selected_faces(), ED_uvedit_selected_verts(), ED_uvedit_selectmode_clean(), ED_uvedit_selectmode_flush(), edbm_add_edge_face__smooth_get(), edbm_add_edge_face_exec__tricky_extend_sel(), edbm_average_normals_exec(), edbm_backbuf_check_and_select_edges(), edbm_backbuf_check_and_select_faces(), edbm_backbuf_check_and_select_verts(), edbm_beautify_fill_exec(), edbm_blend_from_shape_exec(), edbm_bridge_edge_loops_for_single_editmesh(), edbm_bridge_tag_boundary_edges(), edbm_connect_vert_pair(), edbm_decimate_exec(), edbm_delete_edgeloop_exec(), edbm_delete_loose_exec(), EDBM_deselect_by_material(), edbm_dissolve_limited_exec(), edbm_dupli_extrude_cursor_invoke(), edbm_edge_rotate_selected_exec(), edbm_edge_split_selected_verts(), edbm_extrude_edge_exclude_mirror(), edbm_face_split_by_edges_exec(), edbm_fill_grid_prepare(), edbm_intersect_select(), edbm_loop_multiselect_exec(), edbm_loop_to_region_exec(), edbm_mark_seam_exec(), edbm_mark_sharp_exec(), EDBM_mesh_hide(), EDBM_mesh_knife(), EDBM_mesh_reveal(), edbm_mod_weighted_strength_exec(), edbm_normals_tools_exec(), edbm_point_normals_modal(), EDBM_project_snap_verts(), edbm_region_to_loop_exec(), edbm_rip_edge_invoke(), edbm_rip_invoke(), edbm_rip_invoke__edge(), edbm_rip_invoke__vert(), edbm_ripsel_looptag_helper(), edbm_screw_exec(), edbm_select_axis_exec(), edbm_select_by_attribute_exec(), edbm_select_face_by_sides_exec(), EDBM_select_interior_faces(), edbm_select_linked_exec(), edbm_select_linked_flat_faces_exec(), edbm_select_loose_exec(), EDBM_select_mirrored(), edbm_select_non_manifold_exec(), edbm_select_random_exec(), edbm_select_sharp_edges_exec(), EDBM_select_swap(), edbm_select_ungrouped_exec(), EDBM_selectmode_convert(), EDBM_selectmode_set(), edbm_set_normals_from_faces_exec(), edbm_shortest_path_select_exec(), edbm_tagged_loop_pairs_to_fill(), EDBM_unified_findnearest_from_raycast(), EDBM_verts_mirror_apply(), editbmesh_get_x_mirror_vert_topo(), blender::ed::sculpt_paint::face_set::ensure_face_sets_bmesh(), blender::draw::extract_data_bmesh_edge(), blender::draw::extract_data_bmesh_face(), blender::draw::extract_data_bmesh_loop(), blender::draw::extract_data_bmesh_vert(), blender::draw::extract_edituv_lines_bm(), blender::draw::extract_edituv_points_bm(), blender::draw::extract_skin_roots(), blender::draw::extract_uv_stretch_angle_bm(), blender::ed::sculpt_paint::fill_bm_face_or_corner_attribute(), fill_laplacian_matrix(), blender::ed::sculpt_paint::face_set::find_next_available_id(), flip_custom_normals(), blender::bke::pbvh::Tree::from_bmesh(), geometry_extract_apply(), geometry_extract_tag_face_set(), geometry_extract_tag_masked_faces(), getTransformOrientation_ex(), gizmo_3d_foreach_selected(), gizmo_mesh_spin_init_refresh(), hull_merge_triangles(), UVGroups::init(), init_laplacian_matrix(), key_block_get_data(), loop_find_regions(), material_slot_assign_exec(), merge_target(), blender::geometry::boolean::mesh_bm_concat(), mesh_calc_path_region_elem(), mesh_calc_path_region_elem(), mesh_separate_material(), mesh_set_smooth_faces(), modify_mesh(), multires_unsubdivide_extract_grids(), normals_split(), normals_split_merge(), object_defgroup_remove_edit_mode(), blender::ed::object::object_origin_set_exec(), blender::ed::object::return_editmesh_indexar(), blender::ed::object::return_editmesh_vgroup(), blender::ed::object::select_editbmesh_hook(), select_linked_delimit_begin(), blender::ed::mesh::set_sharpness_by_angle_exec(), shape_propagate(), similar_edge_select_exec(), similar_face_select_exec(), similar_vert_select_exec(), skin_hole_target_face(), blender::ed::object::skin_loose_mark_clear_exec(), blender::ed::object::skin_radii_equalize_exec(), blender::ed::object::skin_root_mark_exec(), skin_smooth_hulls(), slice_paint_mask(), smart_project_exec(), solidify_add_thickness(), sphere_project_exec(), blender::draw::statvis_calc_overhang(), blender::draw::statvis_calc_sharp(), blender::draw::statvis_calc_thickness(), stitch_init(), stitch_process_data(), blender::ed::sculpt_paint::hide::sync_all_from_faces(), transform_convert_mesh_connectivity_distance(), transform_mesh_edge_slide_data_create(), unsubdivide_build_base_mesh_from_tags(), unsubdivide_find_any_pole(), unsubdivide_is_all_quads(), unsubdivide_is_center_vertex_tag_valid(), unsubdivide_tag_disconnected_mesh_element(), update_data_blocks(), uv_box_select_exec(), uv_circle_select_exec(), uv_find_nearest_edge(), uv_find_nearest_face_ex(), uv_find_nearest_vert(), uv_from_view_exec(), uv_hide_exec(), uv_isolate_selected_islands(), uv_map_clip_correct(), uv_map_transform_calc_bounds(), uv_map_transform_calc_center_median(), uv_mark_seam_exec(), uv_pin_exec(), uv_remove_doubles_to_selected_shared_vertex(), uv_reveal_exec(), uv_rip_object(), uv_sculpt_stroke_init(), uv_seams_from_islands_exec(), uv_select_all(), uv_select_edgeloop(), uv_select_flush_from_loop_edge_flag(), uv_select_flush_from_tag_face(), uv_select_flush_from_tag_loop(), uv_select_invert(), uv_select_more_less(), uv_select_overlap(), uv_select_pinned_exec(), uv_select_similar_edge_exec(), uv_select_similar_face_exec(), uv_select_similar_vert_exec(), uv_select_split_exec(), uv_set_connectivity_distance(), uv_snap_uvs_to_adjacent_unselected(), uvedit_center(), uvedit_deselect_flush(), uvedit_have_selection(), uvedit_nearest_uv(), uvedit_select_flush(), uvedit_select_is_any_selected(), uvedit_translate(), uvedit_unwrap_cube_project(), uvedit_vertex_select_tagged(), v3d_editvertex_buts(), validate_solution(), blender::ed::object::vgroup_assign_verts(), blender::ed::object::vgroup_do_remap(), blender::ed::object::vgroup_mirror(), blender::ed::object::vgroup_parray_alloc(), blender::ed::object::vgroup_select_verts(), and walker_deselect_nth().

◆ BM_ITER_MESH_INDEX

#define BM_ITER_MESH_INDEX ( ele,
iter,
bm,
itype,
indexvar )
Value:
for (BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_new(iter, bm, itype, NULL), indexvar = 0; ele; \
BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_step(iter), (indexvar)++)

Definition at line 70 of file bmesh_iterators.hh.

Referenced by BKE_crazyspace_set_quats_editmesh(), BKE_editmesh_cache_ensure_face_centers(), BKE_editmesh_cache_ensure_face_normals(), BKE_mesh_foreach_mapped_edge(), BKE_mesh_foreach_mapped_face_center(), BKE_mesh_foreach_mapped_loop(), BKE_mesh_foreach_mapped_vert(), BKE_mesh_wrapper_vert_coords_copy(), BKE_mesh_wrapper_vert_coords_copy_with_mat4(), bm_decim_build_edge_cost(), bm_edge_symmetry_map(), blender::bm_edge_table_build(), blender::bm_face_loop_table_build(), BM_iter_mesh_bitmap_from_filter(), BM_iter_mesh_bitmap_from_filter_tessface(), BM_log_mesh_elems_reorder(), BM_mesh_bisect_plane(), BM_mesh_calc_edge_groups(), BM_mesh_calc_face_groups(), BM_mesh_calc_path_edge(), BM_mesh_calc_path_face(), BM_mesh_calc_path_region_edge(), BM_mesh_calc_path_region_face(), BM_mesh_calc_path_region_vert(), BM_mesh_calc_path_uv_region_face(), BM_mesh_calc_path_vert(), BM_mesh_copy(), BM_mesh_decimate_dissolve_ex(), BM_mesh_edgeloops_find_path(), bm_mesh_edges_sharp_tag(), BM_mesh_elem_table_check(), BM_mesh_intersect_edges(), bm_mesh_loops_calc_normals__single_threaded(), BM_mesh_partial_create_from_verts(), BM_mesh_partial_create_from_verts_group_multi(), BM_mesh_partial_create_from_verts_group_single(), BM_mesh_rebuild(), BM_mesh_validate(), BM_mesh_vert_coords_apply(), BM_mesh_vert_coords_apply_with_mat4(), BM_mesh_vert_coords_get(), BM_mesh_vert_normals_get(), BM_mesh_wireframe(), BM_normals_loops_edges_tag(), bm_to_mesh_shape(), bm_to_mesh_vertex_map(), BM_uv_element_map_create(), BM_uv_vert_map_create(), bm_vert_fasthash_create(), blender::bm_vert_table_build(), bmo_flag_layer_alloc(), bmo_flag_layer_clear(), bmo_flag_layer_free(), bmo_inset_region_exec(), bmo_spin_exec(), C_BVHTree_FromBMesh(), blender::draw::calc_face_tri_starts_bmesh(), construct_param_handle(), construct_param_handle_multi(), create_mesh(), createTransEditVerts(), createTransMeshSkin(), createTransMeshVertCData(), curve_deform_coords_impl(), deformVerts_do(), DRW_text_edit_mesh_measure_stats(), ED_mesh_mirror_spatial_table_begin(), edbm_decimate_exec(), edbm_face_split_by_edges_exec(), EDBM_select_interior_faces(), edbm_set_normals_from_faces_exec(), EDBM_verts_mirror_cache_begin_ex(), editmesh_partial_update_begin_fn(), fill_laplacian_matrix(), blender::bke::pbvh::Tree::from_bmesh(), get_weights_array(), init_laplacian_matrix(), make_child_duplis_faces_from_editmesh(), make_child_duplis_verts_from_editmesh(), blender::draw::mesh_render_data_loose_edges_bm(), blender::draw::mesh_render_data_loose_verts_bm(), mesh_symmetry_snap_exec(), sort_bmelem_flag(), blender::draw::statvis_calc_distort(), transform_convert_mesh_connectivity_distance(), transform_convert_mesh_islands_calc(), transform_convert_mesh_mirrordata_calc(), uv_select_flush_from_loop_edge_flag(), uv_select_flush_from_tag_face(), uv_select_flush_from_tag_loop(), uv_select_linked_multi(), uv_select_overlap(), blender::ed::object::vertex_parent_set_exec(), blender::ed::object::vgroup_copy_active_to_sel(), and blender::ed::object::vgroup_copy_active_to_sel_single().

◆ BM_ITER_MESH_MUTABLE

◆ BM_iter_new

◆ BM_ITYPE_MAX

#define BM_ITYPE_MAX   14

Definition at line 55 of file bmesh_iterators.hh.

◆ BMITER_CB_DEF

#define BMITER_CB_DEF ( name)
Value:
struct BMIter__##name; \
void bmiter__##name##_begin(struct BMIter__##name *iter); \
void *bmiter__##name##_step(struct BMIter__##name *iter)

Definition at line 260 of file bmesh_iterators.hh.

Typedef Documentation

◆ BMIter__begin_cb

typedef void(* BMIter__begin_cb) (void *)

Definition at line 147 of file bmesh_iterators.hh.

◆ BMIter__step_cb

typedef void *(* BMIter__step_cb) (void *)

Definition at line 148 of file bmesh_iterators.hh.

◆ BMIterType

typedef enum BMIterType BMIterType

BMesh Iterators.

The functions and structures in this file provide a unified method for iterating over the elements of a mesh and answering simple adjacency queries. Tool authors should use the iterators provided in this file instead of inspecting the structure directly.

Enumeration Type Documentation

◆ BMIterType

enum BMIterType

BMesh Iterators.

The functions and structures in this file provide a unified method for iterating over the elements of a mesh and answering simple adjacency queries. Tool authors should use the iterators provided in this file instead of inspecting the structure directly.

Enumerator
BM_VERTS_OF_MESH 
BM_EDGES_OF_MESH 
BM_FACES_OF_MESH 
BM_EDGES_OF_VERT 
BM_FACES_OF_VERT 
BM_LOOPS_OF_VERT 
BM_VERTS_OF_EDGE 
BM_FACES_OF_EDGE 
BM_VERTS_OF_FACE 
BM_EDGES_OF_FACE 
BM_LOOPS_OF_FACE 
BM_LOOPS_OF_LOOP 
BM_LOOPS_OF_EDGE 

Definition at line 31 of file bmesh_iterators.hh.

Function Documentation

◆ BM_iter_as_array()

int BM_iter_as_array ( BMesh * bm,
char itype,
void * data,
void ** array,
int len )

Iterator as Array.

Sometimes its convenient to get the iterator as an array to avoid multiple calls to BM_iter_at_index.

Definition at line 82 of file bmesh_iterators.cc.

References bm, BM_iter_new, itype, and len.

Referenced by BM_mesh_elem_table_ensure(), bm_vert_dissolve_fan(), edbm_rip_invoke__vert(), blender::bke::pbvh::pbvh_bmesh_edge_loops(), quad_from_tris(), and skin_fix_hole_no_good_verts().

◆ BM_iter_as_arrayN()

void * BM_iter_as_arrayN ( BMesh * bm,
char itype,
void * data,
int * r_len,
void ** stack_array,
int stack_array_size )

Iterator as Array.

Allocates a new array, has the advantage that you don't need to know the size ahead of time.

Takes advantage of less common iterator usage to avoid counting twice, which you might end up doing when BM_iter_as_array is used.

Caller needs to free the array.

Definition at line 129 of file bmesh_iterators.cc.

References BLI_assert, bm, BM_EDGES_OF_MESH, BM_FACES_OF_MESH, BM_iter_init, BM_VERTS_OF_MESH, BMIter::count, itype, MEM_mallocN, BMesh::totedge, BMesh::totface, and BMesh::totvert.

Referenced by bevel_rebuild_existing_polygons(), and BM_mesh_decimate_dissolve().

◆ BM_iter_at_index()

◆ BM_iter_elem_count_flag()

int BM_iter_elem_count_flag ( char itype,
void * data,
char hflag,
bool value )

Elem Iter Flag Count.

Counts how many flagged / unflagged items are found in this element.

Definition at line 269 of file bmesh_iterators.cc.

References BM_elem_flag_test_bool, BM_ITER_ELEM, count, and itype.

Referenced by bm_vert_is_select_history_open(), and transform_mesh_edge_slide_data_create().

◆ BM_iter_mesh_bitmap_from_filter()

int BM_iter_mesh_bitmap_from_filter ( char itype,
BMesh * bm,
blender::MutableBitSpan bitmap,
bool(* test_fn )(BMElem *, void *user_data),
void * user_data )

Definition at line 215 of file bmesh_iterators.cc.

References bm, BM_ITER_MESH_INDEX, and itype.

◆ BM_iter_mesh_bitmap_from_filter_tessface()

int BM_iter_mesh_bitmap_from_filter_tessface ( BMesh * bm,
blender::MutableBitSpan bitmap,
bool(* test_fn )(BMFace *, void *user_data),
void * user_data )

Needed when we want to check faces, but return a loop aligned array.

Definition at line 239 of file bmesh_iterators.cc.

References bm, BM_FACES_OF_MESH, BM_ITER_MESH_INDEX, and BMFace::len.

◆ BM_iter_mesh_count()

int BM_iter_mesh_count ( char itype,
BMesh * bm )

◆ BM_iter_mesh_count_flag()

int BM_iter_mesh_count_flag ( char itype,
BMesh * bm,
char hflag,
bool value )

Mesh Iter Flag Count.

Counts how many flagged / unflagged items are found in this mesh.

Definition at line 325 of file bmesh_iterators.cc.

References bm, BM_elem_flag_test_bool, BM_ITER_MESH, count, and itype.

Referenced by bmo_collapse_uvs_exec(), and transform_convert_mesh_connectivity_distance().

◆ BMITER_CB_DEF() [1/11]

BMITER_CB_DEF ( edge_of_face )

◆ BMITER_CB_DEF() [2/11]

BMITER_CB_DEF ( edge_of_vert )

◆ BMITER_CB_DEF() [3/11]

BMITER_CB_DEF ( elem_of_mesh )

◆ BMITER_CB_DEF() [4/11]

BMITER_CB_DEF ( face_of_edge )

◆ BMITER_CB_DEF() [5/11]

BMITER_CB_DEF ( face_of_vert )

◆ BMITER_CB_DEF() [6/11]

BMITER_CB_DEF ( loop_of_edge )

◆ BMITER_CB_DEF() [7/11]

BMITER_CB_DEF ( loop_of_face )

◆ BMITER_CB_DEF() [8/11]

BMITER_CB_DEF ( loop_of_loop )

◆ BMITER_CB_DEF() [9/11]

BMITER_CB_DEF ( loop_of_vert )

◆ BMITER_CB_DEF() [10/11]

BMITER_CB_DEF ( vert_of_edge )

◆ BMITER_CB_DEF() [11/11]

BMITER_CB_DEF ( vert_of_face )

◆ BMO_iter_as_array()

int BMO_iter_as_array ( BMOpSlot slot_args[BMO_OP_MAX_SLOTS],
const char * slot_name,
char restrictmask,
void ** array,
int len )

Operator Iterator as Array.

Sometimes its convenient to get the iterator as an array.

Definition at line 102 of file bmesh_iterators.cc.

References BMO_iter_new(), BMO_iter_step(), and len.

Referenced by bmo_contextual_create_exec().

◆ BMO_iter_as_arrayN()

void * BMO_iter_as_arrayN ( BMOpSlot slot_args[BMO_OP_MAX_SLOTS],
const char * slot_name,
char restrictmask,
int * r_len,
void ** stack_array,
int stack_array_size )

◆ BMO_iter_elem_count_flag()

int BMO_iter_elem_count_flag ( BMesh * bm,
char itype,
void * data,
short oflag,
bool value )

Elem Iter Tool Flag Count.

Counts how many flagged / unflagged items are found in this element.

Definition at line 284 of file bmesh_iterators.cc.

References BLI_assert, bm, BM_EDGE, BM_FACE, BM_ITER_ELEM, bm_iter_itype_htype_map, BM_LOOP, BM_VERT, BMO_edge_flag_test_bool, BMO_face_flag_test_bool, BMO_vert_flag_test_bool, count, itype, and oflag.

Referenced by bmo_contextual_create_exec(), bmo_edgeloop_fill_exec(), and bmo_edgenet_prepare_exec().

Variable Documentation

◆ bm_iter_itype_htype_map