Blender V5.0
bmesh_class.hh File Reference
#include "BLI_assert.h"
#include "BLI_sys_types.h"
#include "DNA_customdata_types.h"
#include "DNA_listBase.h"

Go to the source code of this file.

Classes

struct  BMHeader
struct  BMVert
struct  BMVert_OFlag
struct  BMEdge
struct  BMEdge_OFlag
struct  BMLoop
struct  BMElemF
struct  BMElem
struct  BMFace
struct  BMFace_OFlag
struct  BMFlagLayer
struct  BMesh
struct  BMLoopNorEditData
struct  BMLoopNorEditDataArray

Macros

#define BM_ALL   (BM_VERT | BM_EDGE | BM_LOOP | BM_FACE)
#define BM_ALL_NOLOOP   (BM_VERT | BM_EDGE | BM_FACE)
#define _BM_GENERIC_TYPE_ELEM_NONCONST
#define _BM_GENERIC_TYPE_ELEM_CONST
#define BM_CHECK_TYPE_ELEM_CONST(ele)
#define BM_CHECK_TYPE_ELEM_NONCONST(ele)
#define BM_CHECK_TYPE_ELEM(ele)
#define _BM_GENERIC_TYPE_VERT_NONCONST   BMVert *, BMVert_OFlag *
#define _BM_GENERIC_TYPE_VERT_CONST   const BMVert *, const BMVert_OFlag *
#define BM_CHECK_TYPE_VERT_CONST(ele)
#define BM_CHECK_TYPE_VERT_NONCONST(ele)
#define BM_CHECK_TYPE_VERT(ele)
#define _BM_GENERIC_TYPE_EDGE_NONCONST   BMEdge *, BMEdge_OFlag *
#define _BM_GENERIC_TYPE_EDGE_CONST   const BMEdge *, const BMEdge_OFlag *
#define BM_CHECK_TYPE_EDGE_CONST(ele)
#define BM_CHECK_TYPE_EDGE_NONCONST(ele)
#define BM_CHECK_TYPE_EDGE(ele)
#define _BM_GENERIC_TYPE_FACE_NONCONST   BMFace *, BMFace_OFlag *
#define _BM_GENERIC_TYPE_FACE_CONST   const BMFace *, const BMFace_OFlag *
#define BM_CHECK_TYPE_FACE_CONST(ele)
#define BM_CHECK_TYPE_FACE_NONCONST(ele)
#define BM_CHECK_TYPE_FACE(ele)
#define BM_CHECK_TYPE_ELEM_ASSIGN(ele)
#define BM_ELEM_SELECT_UV_EDGE   BM_ELEM_SEAM
#define BM_ELEM_CD_SET_INT(ele, offset, f)
#define BM_ELEM_CD_GET_INT(ele, offset)
#define BM_ELEM_CD_SET_BOOL(ele, offset, f)
#define BM_ELEM_CD_GET_BOOL(ele, offset)
#define BM_ELEM_CD_GET_BOOL_P(ele, offset)
#define BM_ELEM_CD_GET_VOID_P(ele, offset)
#define BM_ELEM_CD_SET_FLOAT(ele, offset, f)
#define BM_ELEM_CD_GET_FLOAT(ele, offset)
#define BM_ELEM_CD_GET_FLOAT_P(ele, offset)
#define BM_ELEM_CD_GET_FLOAT2_P(ele, offset)
#define BM_ELEM_CD_GET_FLOAT3_P(ele, offset)
#define BM_ELEM_CD_SET_FLOAT2(ele, offset, f)
#define BM_ELEM_CD_SET_FLOAT3(ele, offset, f)
#define BM_ELEM_CD_GET_FLOAT_AS_UCHAR(ele, offset)
#define BM_FACE_FIRST_LOOP(p)
#define BM_DISK_EDGE_NEXT(e, v)
#define BM_DISK_EDGE_PREV(e, v)
#define BM_DEFAULT_NGON_STACK_SIZE   32
#define BM_DEFAULT_ITER_STACK_SIZE   16
#define BM_LOOP_RADIAL_MAX   10000
#define BM_NGON_MAX   100000
#define BM_THREAD_LIMIT   10000

Typedefs

using BMElemFilterFunc = bool (*)(const BMElem *, void *user_data)
using BMVertFilterFunc = bool (*)(const BMVert *, void *user_data)
using BMEdgeFilterFunc = bool (*)(const BMEdge *, void *user_data)
using BMFaceFilterFunc = bool (*)(const BMFace *, void *user_data)
using BMLoopFilterFunc = bool (*)(const BMLoop *, void *user_data)
using BMLoopPairFilterFunc = bool (*)(const BMLoop *, const BMLoop *, void *user_data)

Enumerations

enum  { BM_VERT = 1 , BM_EDGE = 2 , BM_LOOP = 4 , BM_FACE = 8 }
enum  { BM_SPACEARR_DIRTY = 1 << 0 , BM_SPACEARR_DIRTY_ALL = 1 << 1 , BM_SPACEARR_BMO_SET = 1 << 2 }
enum  {
  BM_ELEM_SELECT = (1 << 0) , BM_ELEM_HIDDEN = (1 << 1) , BM_ELEM_SEAM = (1 << 2) , BM_ELEM_SMOOTH = (1 << 3) ,
  BM_ELEM_TAG = (1 << 4) , BM_ELEM_SELECT_UV = (1 << 5) , BM_ELEM_TAG_ALT = (1 << 6) , BM_ELEM_INTERNAL_TAG = (1 << 7)
}

Functions

 BLI_STATIC_ASSERT ((sizeof(BMHeader)<=16), "BMHeader size has grown!")
void bpy_bm_generic_invalidate (struct BPy_BMGeneric *self)

Detailed Description

BMesh data structures, used for mesh editing operations that benefit from accessing connectivity information.

Definition in file bmesh_class.hh.

Macro Definition Documentation

◆ _BM_GENERIC_TYPE_EDGE_CONST

#define _BM_GENERIC_TYPE_EDGE_CONST   const BMEdge *, const BMEdge_OFlag *

Definition at line 489 of file bmesh_class.hh.

◆ _BM_GENERIC_TYPE_EDGE_NONCONST

#define _BM_GENERIC_TYPE_EDGE_NONCONST   BMEdge *, BMEdge_OFlag *

Definition at line 488 of file bmesh_class.hh.

◆ _BM_GENERIC_TYPE_ELEM_CONST

#define _BM_GENERIC_TYPE_ELEM_CONST
Value:
const void *, const BMVert *, const BMEdge *, const BMLoop *, const BMFace *, \
const BMVert_OFlag *, const BMEdge_OFlag *, const BMFace_OFlag *, const BMElem *, \
const BMElemF *, const BMHeader *

Definition at line 468 of file bmesh_class.hh.

◆ _BM_GENERIC_TYPE_ELEM_NONCONST

#define _BM_GENERIC_TYPE_ELEM_NONCONST
Value:

Definition at line 464 of file bmesh_class.hh.

◆ _BM_GENERIC_TYPE_FACE_CONST

#define _BM_GENERIC_TYPE_FACE_CONST   const BMFace *, const BMFace_OFlag *

Definition at line 496 of file bmesh_class.hh.

◆ _BM_GENERIC_TYPE_FACE_NONCONST

#define _BM_GENERIC_TYPE_FACE_NONCONST   BMFace *, BMFace_OFlag *

Definition at line 495 of file bmesh_class.hh.

◆ _BM_GENERIC_TYPE_VERT_CONST

#define _BM_GENERIC_TYPE_VERT_CONST   const BMVert *, const BMVert_OFlag *

Definition at line 482 of file bmesh_class.hh.

◆ _BM_GENERIC_TYPE_VERT_NONCONST

#define _BM_GENERIC_TYPE_VERT_NONCONST   BMVert *, BMVert_OFlag *

Definition at line 481 of file bmesh_class.hh.

◆ BM_ALL

#define BM_ALL   (BM_VERT | BM_EDGE | BM_LOOP | BM_FACE)

◆ BM_ALL_NOLOOP

◆ BM_CHECK_TYPE_EDGE

#define BM_CHECK_TYPE_EDGE ( ele)
Value:
#define CHECK_TYPE_ANY(...)
#define _BM_GENERIC_TYPE_EDGE_CONST
#define _BM_GENERIC_TYPE_EDGE_NONCONST

Definition at line 492 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_EDGE_CONST

#define BM_CHECK_TYPE_EDGE_CONST ( ele)
Value:

Definition at line 490 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_EDGE_NONCONST

#define BM_CHECK_TYPE_EDGE_NONCONST ( ele)
Value:

Definition at line 491 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_ELEM

#define BM_CHECK_TYPE_ELEM ( ele)
Value:

Definition at line 477 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_ELEM_ASSIGN

#define BM_CHECK_TYPE_ELEM_ASSIGN ( ele)
Value:
(BM_CHECK_TYPE_ELEM(ele)), *((void **)&ele)
#define BM_CHECK_TYPE_ELEM(ele)

Assignment from a void* to a typed pointer is not allowed in C++, casting the LHS to void works fine though.

Definition at line 506 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_ELEM_CONST

#define BM_CHECK_TYPE_ELEM_CONST ( ele)
Value:
CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPES_CONST)

Definition at line 473 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_ELEM_NONCONST

#define BM_CHECK_TYPE_ELEM_NONCONST ( ele)
Value:

Definition at line 475 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_FACE

#define BM_CHECK_TYPE_FACE ( ele)
Value:

Definition at line 499 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_FACE_CONST

#define BM_CHECK_TYPE_FACE_CONST ( ele)
Value:

Definition at line 497 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_FACE_NONCONST

#define BM_CHECK_TYPE_FACE_NONCONST ( ele)
Value:

Definition at line 498 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_VERT

#define BM_CHECK_TYPE_VERT ( ele)
Value:

Definition at line 485 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_VERT_CONST

#define BM_CHECK_TYPE_VERT_CONST ( ele)
Value:

Definition at line 483 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_VERT_NONCONST

#define BM_CHECK_TYPE_VERT_NONCONST ( ele)
Value:

Definition at line 484 of file bmesh_class.hh.

◆ BM_DEFAULT_ITER_STACK_SIZE

#define BM_DEFAULT_ITER_STACK_SIZE   16

Size to use for stack arrays dealing with connected mesh data verts of faces, edges of vert - etc. often used with BM_iter_as_arrayN().

Definition at line 703 of file bmesh_class.hh.

◆ BM_DEFAULT_NGON_STACK_SIZE

#define BM_DEFAULT_NGON_STACK_SIZE   32

Size to use for stack arrays when dealing with NGons, allocate after this limit is reached. this value is rather arbitrary.

Definition at line 697 of file bmesh_class.hh.

◆ BM_DISK_EDGE_NEXT

#define BM_DISK_EDGE_NEXT ( e,
v )
Value:
CHECK_TYPE_INLINE(v, BMVert *), \
BLI_assert(BM_vert_in_edge(e, v)), \
(((&e->v1_disk_link)[v == e->v2]).next))
#define CHECK_TYPE_INLINE(val, type)
BLI_INLINE bool BM_vert_in_edge(const BMEdge *e, const BMVert *v) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v

Definition at line 682 of file bmesh_class.hh.

Referenced by bevel_extend_edge_data_ex(), bm_extrude_region_edge_flag(), BM_face_exists(), bm_face_split_edge_find(), BM_face_split_edgenet_connect_islands(), bm_face_split_edgenet_find_loop_pair(), bm_face_split_edgenet_find_loop_pair_exists(), bm_face_split_edgenet_find_loop_walk(), bm_face_split_edgenet_partial_connect(), bm_loop_region_count__clear(), BM_mesh_calc_edge_groups_as_arrays(), BM_mesh_intersect(), BM_mesh_intersect_edges(), bm_mesh_loops_calc_normals_for_vert_with_clnors(), bm_mesh_loops_calc_normals_for_vert_without_clnors(), BM_mesh_partial_create_from_verts(), bm_vert_calc_normals_impl(), bm_vert_calc_normals_with_coords(), BM_vert_edge_pair(), bm_vert_is_delimiter(), BM_vert_is_edge_pair(), BM_vert_is_edge_pair_manifold(), bm_vert_other_edge(), bm_vert_pair_ends(), BM_vert_separate_hflag(), BM_vert_separate_tested_edges(), BM_vert_splice_check_double(), bmesh_find_doubles_by_distance_connected_impl(), bmo_dissolve_verts_exec(), bmo_extrude_face_region_exec(), bmo_find_end_of_chain(), bmw_LoopShellWireWalker_visitVert(), edbm_edge_split_selected_verts(), edbm_polybuild_face_at_cursor_invoke(), blender::bke::pbvh::is_boundary_vert(), mesh_calc_path_region_elem(), uvedit_uv_select_flush_from_tag_sticky_loc_internal(), uvedit_uv_select_shared_vert(), uvedit_vert_is_edge_select_any_other(), blender::ed::sculpt_paint::hide::vert_all_faces_visible_get(), and view3d_preselect_update_preview_triangle_from_vert().

◆ BM_DISK_EDGE_PREV

#define BM_DISK_EDGE_PREV ( e,
v )
Value:
CHECK_TYPE_INLINE(v, BMVert *), \
BLI_assert(BM_vert_in_edge(e, v)), \
(((&e->v1_disk_link)[v == e->v2]).prev))

Definition at line 687 of file bmesh_class.hh.

◆ BM_ELEM_CD_GET_BOOL

◆ BM_ELEM_CD_GET_BOOL_P

#define BM_ELEM_CD_GET_BOOL_P ( ele,
offset )
Value:
(BLI_assert(offset != -1), (bool *)((char *)(ele)->head.data + (offset)))

Definition at line 585 of file bmesh_class.hh.

Referenced by BPy_BMLoopUV_CreatePyObject().

◆ BM_ELEM_CD_GET_FLOAT

◆ BM_ELEM_CD_GET_FLOAT2_P

#define BM_ELEM_CD_GET_FLOAT2_P ( ele,
offset )

◆ BM_ELEM_CD_GET_FLOAT3_P

#define BM_ELEM_CD_GET_FLOAT3_P ( ele,
offset )
Value:
(BLI_assert(offset != -1), (float (*)[3])((char *)(ele)->head.data + (offset)))

Definition at line 647 of file bmesh_class.hh.

◆ BM_ELEM_CD_GET_FLOAT_AS_UCHAR

#define BM_ELEM_CD_GET_FLOAT_AS_UCHAR ( ele,
offset )
Value:
(BLI_assert(offset != -1), (uchar)(BM_ELEM_CD_GET_FLOAT(ele, offset) * 255.0f))
unsigned char uchar
#define BM_ELEM_CD_GET_FLOAT(ele, offset)

Definition at line 671 of file bmesh_class.hh.

◆ BM_ELEM_CD_GET_FLOAT_P

#define BM_ELEM_CD_GET_FLOAT_P ( ele,
offset )
Value:
(BLI_assert(offset != -1), (float *)((char *)(ele)->head.data + (offset)))

Definition at line 641 of file bmesh_class.hh.

Referenced by UV_ClipboardBuffer::append(), bevel_merge_uvs(), BM_edge_uv_share_vert_check(), BM_face_calc_area_uv_signed(), blender::draw::bm_face_no_get(), bm_face_reverse_uvs(), BM_face_uv_calc_center_median(), BM_face_uv_minmax(), bm_lnorspace_ensure_from_free_normals(), bm_loop_calc_uv_angle_from_dir(), blender::ed::transform::bm_loop_uv_calc_opposite_co(), bm_loop_uv_select_single_vert_validate(), BM_loop_uv_share_edge_check(), BM_loop_uv_share_vert_check(), 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_uvs_sphere_face(), BM_uv_element_map_create(), BM_uv_vert_map_create(), blender::draw::bm_vert_no_get(), bmo_create_icosphere_exec(), bmo_create_monkey_exec(), bmo_rotate_uvs_exec(), BPy_BMLoopUV_AssignPyObject(), BPy_BMLoopUV_CreatePyObject(), construct_param_edge_set_seams(), construct_param_handle_face_add(), blender::ed::transform::createTransUVs(), determine_uv_vert_connectivity(), do_lasso_select_mesh_uv(), ED_uvedit_foreach_uv(), edgetag_cut_cost_face_uv(), edgetag_cut_cost_vert_uv(), facetag_cut_cost_edge_uv(), facetag_cut_cost_vert_uv(), get_uv_edge_needle(), blender::ed::transform::UVGroups::init(), blender::ed::transform::isect_face_dst(), island_uv_transform(), loop_uv_match(), blender::ed::transform::mesh_uv_group_is_inner(), seam_connected(), seam_connected_recursive(), shrink_loop_uv_by_aspect_ratio(), similar_edge_select_exec(), similar_vert_select_exec(), smart_project_exec(), stitch_calculate_edge_normal(), stitch_calculate_island_snapping(), stitch_check_edges_stitchable(), stitch_check_uvs_stitchable(), stitch_island_calculate_edge_rotation(), stitch_process_data(), stitch_propagate_uv_final_position(), texface_from_original_index(), blender::ed::transform::transform_mesh_uv_edge_slide_data_create(), blender::ed::transform::transform_mesh_uv_vert_slide_data_create(), uv_aspect(), uv_box_select_exec(), uv_circle_select_exec(), uv_copy_mirrored_faces(), uv_cylinder_project(), uv_find_nearest_edge(), uv_find_nearest_loop_from_edge(), uv_find_nearest_loop_from_vert(), uv_find_nearest_vert(), uv_from_view_exec(), uv_map_clip_correct(), uv_map_mirror(), uv_nearest_between(), uv_remove_doubles_to_selected_shared_vertex(), uv_rip_pairs_calc_center_and_direction(), uv_rip_pairs_calc_uv_angle(), uv_rip_pairs_loop_count_on_side(), uv_rip_single_from_loop(), uv_select_overlap(), blender::ed::transform::uv_set_connectivity_distance(), uv_snap_uvs_to_adjacent_unselected(), uv_sphere_project(), uvedit_center(), uvedit_first_selected_uv_from_vertex(), uvedit_nearest_uv(), uvedit_pack_islands_multi(), uvedit_prepare_pinned_indices(), uvedit_translate(), uvedit_unwrap_cube_project(), uvedit_uv_islands_arrange(), uvedit_uv_straighten_elements(), verttag_add_adjacent_uv(), verttag_set_cb(), verttag_test_cb(), and UV_ClipboardBuffer::write_uvs().

◆ BM_ELEM_CD_GET_INT

◆ BM_ELEM_CD_GET_VOID_P

#define BM_ELEM_CD_GET_VOID_P ( ele,
offset )
Value:
(BLI_assert(offset != -1), (void *)((char *)(ele)->head.data + (offset)))

Definition at line 598 of file bmesh_class.hh.

Referenced by alter_co(), blender::bke::armature_vert_task_editmesh(), blender::ed::object::bake_targets_output_vertex_colors(), bevel_harden_normals(), bevel_set_weighted_normal_face_strength(), BKE_object_defgroup_clear(), BM_custom_loop_normals_to_vector_layer(), BM_edge_is_contiguous_loop_cd(), BM_face_multires_bounds_smooth(), bm_face_reverse_colors(), BM_lnorspace_rebuild(), bm_loop_customdata_merge(), BM_loop_interp_multires_ex(), bm_loop_walk_add(), bm_loop_walk_data(), BM_mesh_bm_from_me(), bm_mesh_loops_assign_normal_data(), bm_mesh_loops_calc_normals_for_loop(), bm_mesh_loops_custom_normals_set(), BM_mesh_remap(), BM_mesh_wireframe(), bm_to_mesh_shape(), BM_uv_element_map_create(), BM_vert_loop_groups_data_layer_create(), bmesh_kernel_loop_reverse(), bmo_average_vert_facedata_exec(), bmo_collapsecon_do_layer(), bmo_pointmerge_facedata_exec(), bmo_rotate_colors_exec(), bmo_subdivide_edges_exec(), bmo_transform_exec(), bmw_UVEdgeWalker_step(), construct_param_handle_face_add(), blender::ed::transform::createTransEdge(), blender::ed::transform::createTransMeshVertCData(), curve_deform_coords_impl(), deformVerts_do(), ED_mesh_active_dvert_get_em(), edbm_average_normals_exec(), edbm_decimate_exec(), edbm_mod_weighted_strength_exec(), edbm_select_ungrouped_exec(), edbm_set_normals_from_faces_exec(), edbm_smooth_normals_exec(), blender::draw::extract_skin_roots(), blender::ed::sculpt_paint::fill_bm_face_or_corner_attribute(), blender::ed::object::get_vert_def_nr(), get_weights_array(), SGLSLEditMeshToTangent::GetTexCoord(), lattice_vert_task_editmesh(), loop_interp_multires_cb(), loop_normal_editdata_init(), blender::ed::object::mesh_defvert_mirror_update_em(), normals_split(), object_defgroup_remove_edit_mode(), reset_uvs_bmesh(), blender::ed::object::return_editmesh_vgroup(), similar_vert_select_exec(), blender::ed::object::skin_root_clear(), blender::ed::object::skin_root_mark_exec(), v3d_editvertex_buts(), blender::ed::object::vgroup_assign_verts(), blender::ed::object::vgroup_copy_active_to_sel(), blender::ed::object::vgroup_copy_active_to_sel_single(), blender::ed::object::vgroup_do_remap(), blender::ed::object::vgroup_mirror(), blender::ed::object::vgroup_parray_alloc(), and blender::ed::object::vgroup_select_verts().

◆ BM_ELEM_CD_SET_BOOL

#define BM_ELEM_CD_SET_BOOL ( ele,
offset,
f )
Value:
{ \
CHECK_TYPE_NONCONST(ele); \
BLI_assert(offset != -1); \
*((bool *)((char *)(ele)->head.data + (offset))) = (f); \
} \
(void)0

Definition at line 565 of file bmesh_class.hh.

Referenced by BPy_BMLoopUV_AssignPyObject(), edgetag_set_cb(), and uv_pin_exec().

◆ BM_ELEM_CD_SET_FLOAT

◆ BM_ELEM_CD_SET_FLOAT2

#define BM_ELEM_CD_SET_FLOAT2 ( ele,
offset,
f )
Value:
{ \
CHECK_TYPE_NONCONST(ele); \
BLI_assert(offset != -1); \
((float *)((char *)(ele)->head.data + (offset)))[0] = (f)[0]; \
((float *)((char *)(ele)->head.data + (offset)))[1] = (f)[1]; \
} \
(void)0

Definition at line 652 of file bmesh_class.hh.

◆ BM_ELEM_CD_SET_FLOAT3

#define BM_ELEM_CD_SET_FLOAT3 ( ele,
offset,
f )
Value:
{ \
CHECK_TYPE_NONCONST(ele); \
BLI_assert(offset != -1); \
((float *)((char *)(ele)->head.data + (offset)))[0] = (f)[0]; \
((float *)((char *)(ele)->head.data + (offset)))[1] = (f)[1]; \
((float *)((char *)(ele)->head.data + (offset)))[2] = (f)[2]; \
} \
(void)0

Definition at line 661 of file bmesh_class.hh.

◆ BM_ELEM_CD_SET_INT

◆ BM_ELEM_SELECT_UV_EDGE

#define BM_ELEM_SELECT_UV_EDGE   BM_ELEM_SEAM

Definition at line 541 of file bmesh_class.hh.

Referenced by bm_edge_uvselect_set_pick(), BM_elem_attrs_copy(), BM_elem_attrs_copy(), BM_face_uvselect_check_edges_all(), BM_loop_edge_uvselect_check_other_loop_edge(), BM_loop_edge_uvselect_set_noflush(), BM_loop_edge_uvselect_set_shared(), BM_loop_edge_uvselect_test(), bm_loop_select_edge_check_internal(), BM_loop_vert_uvselect_check_other_loop_edge(), BM_mesh_bm_from_me(), bm_mesh_uvselect_check_contiguous(), bm_mesh_uvselect_check_flush(), bm_mesh_uvselect_check_flush_and_contiguous(), bm_mesh_uvselect_check_viewport_sync(), bm_mesh_uvselect_disable_all(), BM_mesh_uvselect_flush_from_loop_edges(), BM_mesh_uvselect_flush_from_loop_edges_only_deselect(), BM_mesh_uvselect_flush_from_loop_edges_only_select(), bm_mesh_uvselect_flush_from_mesh_sticky_location_for_edge_mode(), bm_mesh_uvselect_flush_from_mesh_sticky_location_for_face_mode(), bm_mesh_uvselect_flush_from_mesh_sticky_vert_for_edge_mode(), bm_mesh_uvselect_flush_from_mesh_sticky_vert_for_face_mode(), bm_mesh_uvselect_flush_from_mesh_sticky_vert_for_vert_mode(), BM_mesh_uvselect_flush_post_subdivide(), BM_mesh_uvselect_flush_shared_only_deselect(), BM_mesh_uvselect_flush_shared_only_select(), bm_mesh_uvselect_mode_flush_down_deselect_only(), BM_mesh_uvselect_mode_flush_update(), BM_mesh_uvselect_set_elem_shared(), BM_mesh_uvselect_sync_to_mesh(), blender::bm_to_mesh_loops(), ED_uvedit_active_edge_loop_get(), uv_mesh_hide_sync_select(), uv_select_invert(), uvedit_edge_select_disable(), uvedit_edge_select_get_no_sync(), uvedit_edge_select_set_no_sync(), uvedit_edge_select_test_ex(), uvedit_ensure_uvs(), uvedit_face_select_test_ex(), uvedit_loop_edge_select_get(), and uvedit_loop_edge_select_set().

◆ BM_FACE_FIRST_LOOP

#define BM_FACE_FIRST_LOOP ( p)
Value:
((p)->l_first)

Definition at line 679 of file bmesh_class.hh.

Referenced by bevel_build_trifan(), BKE_crazyspace_set_quats_editmesh(), BKE_mesh_foreach_mapped_loop(), bm_decim_build_quadrics(), bm_decim_triangulate_begin(), bm_edgering_pair_subdiv(), bm_extrude_copy_face_loop_attributes(), bm_face_array_visit(), blender::bke::pbvh::bm_face_as_array(), BM_face_as_array_loop_quad(), BM_face_as_array_loop_tri(), BM_face_as_array_vert_quad(), BM_face_as_array_vert_tri(), bm_face_bisect_verts(), BM_face_calc_area(), BM_face_calc_area_uv_signed(), BM_face_calc_area_with_mat3(), BM_face_calc_bounds_expand(), BM_face_calc_center_bounds(), BM_face_calc_center_bounds_vcos(), BM_face_calc_center_median(), BM_face_calc_center_median_weighted(), BM_face_calc_normal(), BM_face_calc_normal_vcos(), BM_face_calc_perimeter(), BM_face_calc_perimeter_with_mat3(), BM_face_calc_point_in_face(), bm_face_calc_poly_center_median_vertex_cos(), bm_face_calc_poly_normal(), bm_face_calc_poly_normal_vertex_cos(), BM_face_calc_tangent_from_edge_diagonal(), BM_face_calc_tangent_from_vert_diagonal(), BM_face_calc_tessellation(), bm_face_connect_verts(), bm_face_convex_tag_verts(), BM_face_copy(), BM_face_copy(), bm_face_copy_impl(), BM_face_copy_shared(), bm_face_copy_with_arrays(), BM_face_edges_kill(), bm_face_edges_tag_out(), BM_face_exists_overlap_subset(), BM_face_find_double(), BM_face_find_longest_loop(), BM_face_find_shortest_loop(), BM_face_hide_set(), BM_face_interp_from_face(), BM_face_interp_from_face_ex(), BM_face_interp_multires_ex(), bm_face_is_all_uv_sel(), BM_face_is_any_edge_flag_test(), BM_face_is_any_vert_flag_test(), bm_face_is_loose(), blender::ed::transform::bm_face_is_snap_target(), blender::bm_face_loop_table_build(), BM_face_point_inside_test(), bm_face_region_pivot_edge_find(), BM_face_select_set(), BM_face_share_edge_check(), BM_face_share_edge_count(), BM_face_share_vert_check(), BM_face_share_vert_count(), bm_face_split_by_edges(), bm_face_split_edge_find(), BM_face_split_edgenet(), BM_face_split_edgenet_connect_islands(), bm_face_split_find(), BM_face_splits_check_legal(), BM_face_triangulate(), BM_face_uv_calc_center_median(), BM_face_uv_calc_center_median_weighted(), BM_face_uv_calc_cross(), BM_face_uv_minmax(), BM_face_uv_point_inside_test(), BM_face_uvselect_check_edges_all(), BM_face_uvselect_set(), bm_face_uvselect_set_pick(), BM_face_uvselect_set_shared(), BM_face_vert_share_loop(), BM_face_verts_kill(), BM_faces_join(), bm_grid_fill_array(), bm_interior_face_group_calc_cost(), bm_interp_face_store(), bm_log_faces_unmake(), BM_loop_at_index_find(), BM_loop_interp_from_face(), BM_loop_interp_multires_ex(), BM_mesh_bm_from_me(), BM_mesh_calc_face_groups(), BM_mesh_calc_path_region_face(), BM_mesh_calc_path_uv_edge(), BM_mesh_calc_path_uv_region_face(), BM_mesh_calc_path_uv_vert(), bm_mesh_calc_tessellation_with_partial__single_threaded(), bm_mesh_copy_new_face(), BM_mesh_decimate_dissolve_ex(), BM_mesh_delete_hflag_context(), BM_mesh_edgenet(), BM_mesh_elem_index_ensure_ex(), BM_mesh_is_valid(), bm_mesh_loop_clear_tag(), bm_mesh_loops_calc_normals__single_threaded(), bm_mesh_loops_calc_normals_no_autosmooth(), 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_select_flush_from_verts(), BM_mesh_select_mode_clean_ex(), bm_mesh_select_mode_flush_edge_to_face_iter_fn(), bm_mesh_select_mode_flush_face_to_vert_and_edge(), BM_mesh_separate_faces(), bm_mesh_uvselect_check_contiguous(), bm_mesh_uvselect_check_flush(), bm_mesh_uvselect_check_flush_and_contiguous(), bm_mesh_uvselect_check_viewport_sync(), bm_mesh_uvselect_disable_all(), BM_mesh_uvselect_flush_from_faces(), BM_mesh_uvselect_flush_from_faces_only_deselect(), BM_mesh_uvselect_flush_from_faces_only_select(), BM_mesh_uvselect_flush_from_loop_edges(), BM_mesh_uvselect_flush_from_loop_edges_only_deselect(), BM_mesh_uvselect_flush_from_loop_edges_only_select(), BM_mesh_uvselect_flush_from_loop_verts(), BM_mesh_uvselect_flush_from_loop_verts_only_deselect(), BM_mesh_uvselect_flush_from_loop_verts_only_select(), bm_mesh_uvselect_flush_from_mesh_sticky_location_for_edge_mode(), bm_mesh_uvselect_flush_from_mesh_sticky_location_for_face_mode(), bm_mesh_uvselect_flush_from_mesh_sticky_vert_for_edge_mode(), bm_mesh_uvselect_flush_from_mesh_sticky_vert_for_face_mode(), bm_mesh_uvselect_flush_from_mesh_sticky_vert_for_vert_mode(), BM_mesh_uvselect_flush_post_subdivide(), BM_mesh_uvselect_flush_shared_only_deselect(), BM_mesh_uvselect_flush_shared_only_select(), bm_mesh_uvselect_mode_flush_down_deselect_only(), BM_mesh_uvselect_mode_flush_update(), BM_mesh_uvselect_set_elem_shared(), BM_mesh_uvselect_sync_to_mesh(), BM_mesh_wireframe(), BM_normals_loops_edges_tag(), bm_uidwalk_calc_face_uid(), bm_uidwalk_pass_add(), BM_vert_interp_from_face(), bmesh_calc_tessellation_for_face_beauty(), bmesh_calc_tessellation_for_face_fn(), bmesh_calc_tessellation_for_face_impl(), bmesh_calc_tessellation_for_face_partial_fn(), bmesh_calc_tessellation_for_face_partial_with_normals_fn(), bmesh_calc_tessellation_for_face_with_normals_fn(), bmesh_elem_check(), bmesh_face_attribute_fill(), bmesh_face_swap_data(), bmesh_kernel_join_edge_kill_vert(), bmesh_kernel_join_face_kill_edge(), bmesh_kernel_join_vert_kill_edge(), bmesh_kernel_split_face_make_edge(), bmesh_loop_validate(), bmiter__edge_of_face_begin(), bmiter__loop_of_face_begin(), bmiter__vert_of_face_begin(), bmo_create_cone_exec(), bmo_dissolve_edges_exec(), bmo_extrude_discrete_faces_exec(), bmo_face_copy(), bmo_face_flag_set_flush(), bmo_face_inset_individual(), bmo_face_is_vert_tag_all(), bmo_inset_region_exec(), BMO_mesh_delete_oflag_context(), bmo_planar_faces_exec(), bmo_poke_exec(), bmo_recalc_face_normals_array(), bmw_IslandWalker_step_ex(), bmw_LoopShellWalker_begin(), bridge_loop_pair(), do_lasso_select_mesh_uv(), edbm_average_normals_exec(), edbm_decimate_exec(), EDBM_mesh_knife(), EDBM_mesh_reveal(), EDBM_select_interior_faces(), edbm_tagged_loop_pairs_do_fill_faces(), EDBM_verts_mirror_get_face(), blender::draw::extract_data_bmesh_edge(), 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_uv_stretch_angle_bm(), face_dupli_from_editmesh(), face_to_plane(), fill_laplacian_matrix(), flip_custom_normals(), blender::bke::pbvh::Tree::from_bmesh(), SGLSLEditMeshToTangent::GetLoop(), init_laplacian_matrix(), blender::bke::pbvh::long_edge_queue_face_add(), make_child_duplis_faces_from_editmesh(), mesh_calc_path_region_elem(), mesh_calc_path_region_elem(), blender::ed::transform::mesh_customdatacorrect_face_substitute_set(), blender::ed::transform::mesh_customdatacorrect_restore(), mesh_separate_material(), normals_split(), paint_is_bmesh_face_hidden(), blender::bke::pbvh::pbvh_bmesh_collapse_edge(), blender::bke::pbvh::pbvh_bmesh_create_nodes_fast_recursive(), blender::bke::pbvh::pbvh_bmesh_face_remove(), blender::bke::pbvh::pbvh_bmesh_node_finalize(), blender::bke::pbvh::pbvh_bmesh_node_limit_ensure(), recalc_face_normals_find_index(), remdoubles_createface(), blender::bke::pbvh::short_edge_queue_face_add(), blender::draw::statvis_calc_distort(), blender::draw::statvis_calc_intersect(), blender::draw::statvis_calc_sharp(), stitch_init(), stitch_process_data(), uv_box_select_exec(), uv_circle_select_exec(), uv_mesh_hide_sync_select(), uv_seams_from_islands_exec(), uvedit_face_select_test_ex(), uvedit_nearest_uv(), view3d_preselect_mesh_elem_update_from_face(), and view3d_preselect_update_preview_triangle_from_face().

◆ BM_LOOP_RADIAL_MAX

#define BM_LOOP_RADIAL_MAX   10000

Avoid an eternal loop, this value is arbitrary but should not error on valid cases.

Definition at line 706 of file bmesh_class.hh.

Referenced by bmesh_radial_length(), and bmesh_radial_validate().

◆ BM_NGON_MAX

#define BM_NGON_MAX   100000

Definition at line 707 of file bmesh_class.hh.

Referenced by bmesh_elem_check().

◆ BM_THREAD_LIMIT

#define BM_THREAD_LIMIT   10000

Typedef Documentation

◆ BMEdgeFilterFunc

using BMEdgeFilterFunc = bool (*)(const BMEdge *, void *user_data)

Definition at line 548 of file bmesh_class.hh.

◆ BMElemFilterFunc

using BMElemFilterFunc = bool (*)(const BMElem *, void *user_data)

Definition at line 546 of file bmesh_class.hh.

◆ BMFaceFilterFunc

using BMFaceFilterFunc = bool (*)(const BMFace *, void *user_data)

Definition at line 549 of file bmesh_class.hh.

◆ BMLoopFilterFunc

using BMLoopFilterFunc = bool (*)(const BMLoop *, void *user_data)

Definition at line 550 of file bmesh_class.hh.

◆ BMLoopPairFilterFunc

using BMLoopPairFilterFunc = bool (*)(const BMLoop *, const BMLoop *, void *user_data)

Definition at line 551 of file bmesh_class.hh.

◆ BMVertFilterFunc

using BMVertFilterFunc = bool (*)(const BMVert *, void *user_data)

Definition at line 547 of file bmesh_class.hh.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

BMHeader.htype (char)

Enumerator
BM_VERT 
BM_EDGE 
BM_LOOP 
BM_FACE 

Definition at line 425 of file bmesh_class.hh.

◆ anonymous enum

anonymous enum

BMesh.spacearr_dirty

Enumerator
BM_SPACEARR_DIRTY 
BM_SPACEARR_DIRTY_ALL 
BM_SPACEARR_BMO_SET 

Definition at line 457 of file bmesh_class.hh.

◆ anonymous enum

anonymous enum

BMHeader.hflag (char)

Enumerator
BM_ELEM_SELECT 
BM_ELEM_HIDDEN 
BM_ELEM_SEAM 
BM_ELEM_SMOOTH 

Used for faces and edges, note from the user POV, this is a sharp edge when disabled.

BM_ELEM_TAG 

Internal flag, used for ensuring correct normals during multi-resolution interpolation, and any other time when temp tagging is handy. always assume dirty & clear before use.

BM_ELEM_SELECT_UV 

Used for BMLoop for loop-vertex selection & BMFace when the face is selected. The BMLoop also stores edge selection: BM_ELEM_SELECT_UV_EDGE.

BM_ELEM_TAG_ALT 

Spare tag, assumed dirty, use define in each function to name based on use.

BM_ELEM_INTERNAL_TAG 

For low level internal API tagging, since tools may want to tag verts and not have functions clobber them. Leave cleared!

Definition at line 509 of file bmesh_class.hh.

Function Documentation

◆ BLI_STATIC_ASSERT()

BLI_STATIC_ASSERT ( (sizeof(BMHeader)<=16) ,
"BMHeader size has grown!"  )

◆ bpy_bm_generic_invalidate()

void bpy_bm_generic_invalidate ( struct BPy_BMGeneric * self)
extern