Blender V4.3
bmesh_class.hh File Reference
#include "BLI_assert.h"

Go to the source code of this file.

Classes

struct  BMHeader
 
struct  BMVert
 
struct  BMVert_OFlag
 
struct  BMDiskLink
 
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)   CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPES_CONST)
 
#define BM_CHECK_TYPE_ELEM_NONCONST(ele)   CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_ELEM_NONCONST)
 
#define BM_CHECK_TYPE_ELEM(ele)    CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_ELEM_NONCONST, _BM_GENERIC_TYPE_ELEM_CONST)
 
#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)   CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_VERT_CONST)
 
#define BM_CHECK_TYPE_VERT_NONCONST(ele)   CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_ELEM_NONCONST)
 
#define BM_CHECK_TYPE_VERT(ele)    CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_VERT_NONCONST, _BM_GENERIC_TYPE_VERT_CONST)
 
#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)   CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_EDGE_CONST)
 
#define BM_CHECK_TYPE_EDGE_NONCONST(ele)   CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_ELEM_NONCONST)
 
#define BM_CHECK_TYPE_EDGE(ele)    CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_EDGE_NONCONST, _BM_GENERIC_TYPE_EDGE_CONST)
 
#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)   CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_FACE_CONST)
 
#define BM_CHECK_TYPE_FACE_NONCONST(ele)   CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_ELEM_NONCONST)
 
#define BM_CHECK_TYPE_FACE(ele)    CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_FACE_NONCONST, _BM_GENERIC_TYPE_FACE_CONST)
 
#define BM_CHECK_TYPE_ELEM_ASSIGN(ele)   (BM_CHECK_TYPE_ELEM(ele)), *((void **)&ele)
 
#define BM_ELEM_CD_SET_INT(ele, offset, f)
 
#define BM_ELEM_CD_GET_INT(ele, offset)    (BLI_assert(offset != -1), *((int *)((char *)(ele)->head.data + (offset))))
 
#define BM_ELEM_CD_SET_BOOL(ele, offset, f)
 
#define BM_ELEM_CD_GET_BOOL(ele, offset)    (BLI_assert(offset != -1), *((bool *)((char *)(ele)->head.data + (offset))))
 
#define BM_ELEM_CD_GET_BOOL_P(ele, offset)    (BLI_assert(offset != -1), (bool *)((char *)(ele)->head.data + (offset)))
 
#define BM_ELEM_CD_GET_VOID_P(ele, offset)    (BLI_assert(offset != -1), (void *)((char *)(ele)->head.data + (offset)))
 
#define BM_ELEM_CD_SET_FLOAT(ele, offset, f)
 
#define BM_ELEM_CD_GET_FLOAT(ele, offset)    (BLI_assert(offset != -1), *((float *)((char *)(ele)->head.data + (offset))))
 
#define BM_ELEM_CD_GET_FLOAT_P(ele, offset)    (BLI_assert(offset != -1), (float *)((char *)(ele)->head.data + (offset)))
 
#define BM_ELEM_CD_GET_FLOAT2_P(ele, offset)    (BLI_assert(offset != -1), (float(*)[2])((char *)(ele)->head.data + (offset)))
 
#define BM_ELEM_CD_GET_FLOAT3_P(ele, offset)    (BLI_assert(offset != -1), (float(*)[3])((char *)(ele)->head.data + (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)    (BLI_assert(offset != -1), (uchar)(BM_ELEM_CD_GET_FLOAT(ele, offset) * 255.0f))
 
#define BM_FACE_FIRST_LOOP(p)   ((p)->l_first)
 
#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

typedef struct BMHeader BMHeader
 
typedef struct BMVert BMVert
 
typedef struct BMVert_OFlag BMVert_OFlag
 
typedef struct BMDiskLink BMDiskLink
 
typedef struct BMEdge BMEdge
 
typedef struct BMEdge_OFlag BMEdge_OFlag
 
typedef struct BMLoop BMLoop
 
typedef struct BMElemF BMElemF
 
typedef struct BMElem BMElem
 
typedef struct BMFace BMFace
 
typedef struct BMFace_OFlag BMFace_OFlag
 
typedef struct BMFlagLayer BMFlagLayer
 
typedef struct BMesh BMesh
 
typedef struct BMLoopNorEditData BMLoopNorEditData
 
typedef struct BMLoopNorEditDataArray BMLoopNorEditDataArray
 
typedef bool(* BMElemFilterFunc) (const BMElem *, void *user_data)
 
typedef bool(* BMVertFilterFunc) (const BMVert *, void *user_data)
 
typedef bool(* BMEdgeFilterFunc) (const BMEdge *, void *user_data)
 
typedef bool(* BMFaceFilterFunc) (const BMFace *, void *user_data)
 
typedef bool(* BMLoopFilterFunc) (const BMLoop *, void *user_data)
 
typedef bool(* BMLoopPairFilterFunc) (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_DRAW = (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 450 of file bmesh_class.hh.

◆ _BM_GENERIC_TYPE_EDGE_NONCONST

#define _BM_GENERIC_TYPE_EDGE_NONCONST   BMEdge *, BMEdge_OFlag *

Definition at line 449 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 429 of file bmesh_class.hh.

◆ _BM_GENERIC_TYPE_ELEM_NONCONST

#define _BM_GENERIC_TYPE_ELEM_NONCONST
Value:

Definition at line 425 of file bmesh_class.hh.

◆ _BM_GENERIC_TYPE_FACE_CONST

#define _BM_GENERIC_TYPE_FACE_CONST   const BMFace *, const BMFace_OFlag *

Definition at line 457 of file bmesh_class.hh.

◆ _BM_GENERIC_TYPE_FACE_NONCONST

#define _BM_GENERIC_TYPE_FACE_NONCONST   BMFace *, BMFace_OFlag *

Definition at line 456 of file bmesh_class.hh.

◆ _BM_GENERIC_TYPE_VERT_CONST

#define _BM_GENERIC_TYPE_VERT_CONST   const BMVert *, const BMVert_OFlag *

Definition at line 443 of file bmesh_class.hh.

◆ _BM_GENERIC_TYPE_VERT_NONCONST

#define _BM_GENERIC_TYPE_VERT_NONCONST   BMVert *, BMVert_OFlag *

Definition at line 442 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

Definition at line 453 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_EDGE_CONST

#define BM_CHECK_TYPE_EDGE_CONST ( ele)    CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_EDGE_CONST)

Definition at line 451 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_EDGE_NONCONST

#define BM_CHECK_TYPE_EDGE_NONCONST ( ele)    CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_ELEM_NONCONST)

Definition at line 452 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_ELEM

Definition at line 438 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_ELEM_ASSIGN

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

Definition at line 466 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_ELEM_CONST

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

Definition at line 434 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_ELEM_NONCONST

#define BM_CHECK_TYPE_ELEM_NONCONST ( ele)    CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_ELEM_NONCONST)

Definition at line 436 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_FACE

Definition at line 460 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_FACE_CONST

#define BM_CHECK_TYPE_FACE_CONST ( ele)    CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_FACE_CONST)

Definition at line 458 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_FACE_NONCONST

#define BM_CHECK_TYPE_FACE_NONCONST ( ele)    CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_ELEM_NONCONST)

Definition at line 459 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_VERT

Definition at line 446 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_VERT_CONST

#define BM_CHECK_TYPE_VERT_CONST ( ele)    CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_VERT_CONST)

Definition at line 444 of file bmesh_class.hh.

◆ BM_CHECK_TYPE_VERT_NONCONST

#define BM_CHECK_TYPE_VERT_NONCONST ( ele)    CHECK_TYPE_ANY(ele, _BM_GENERIC_TYPE_ELEM_NONCONST)

Definition at line 445 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 655 of file bmesh_class.hh.

Referenced by bevel_rebuild_existing_polygons().

◆ 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 649 of file bmesh_class.hh.

Referenced by solidify_add_thickness().

◆ 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 634 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(), bmo_dissolve_verts_exec(), bmo_extrude_face_region_exec(), 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_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 639 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 )    (BLI_assert(offset != -1), (bool *)((char *)(ele)->head.data + (offset)))

Definition at line 538 of file bmesh_class.hh.

Referenced by BPy_BMLoopUV_CreatePyObject().

◆ BM_ELEM_CD_GET_FLOAT

◆ BM_ELEM_CD_GET_FLOAT2_P

◆ BM_ELEM_CD_GET_FLOAT3_P

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

Definition at line 599 of file bmesh_class.hh.

◆ BM_ELEM_CD_GET_FLOAT_AS_UCHAR

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

Definition at line 623 of file bmesh_class.hh.

◆ BM_ELEM_CD_GET_FLOAT_P

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

Definition at line 593 of file bmesh_class.hh.

Referenced by UV_ClipboardBuffer::append(), bev_merge_edge_uvs(), bev_merge_uvs(), BM_edge_uv_share_vert_check(), BM_face_calc_area_uv_signed(), bm_face_reverse_uvs(), BM_face_uv_calc_center_median(), BM_face_uv_minmax(), bm_loop_calc_uv_angle_from_dir(), 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(), 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(), createTransUVs(), 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(), UVGroups::init(), isect_face_dst(), island_uv_transform(), loop_uv_match(), 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(), transform_mesh_uv_edge_slide_data_create(), transform_mesh_uv_vert_slide_data_create(), uv_aspect(), uv_box_select_exec(), uv_circle_select_exec(), 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(), 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_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 )    (BLI_assert(offset != -1), (void *)((char *)(ele)->head.data + (offset)))

Definition at line 550 of file bmesh_class.hh.

Referenced by alter_co(), 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(), createTransEdge(), createTransMeshVertCData(), curve_deform_coords_impl(), deformVerts_do(), ED_mesh_active_dvert_get_em(), blender::ed::object::ED_mesh_defvert_mirror_update_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::draw::mesh_render_data_edge_flag(), blender::draw::mesh_render_data_face_flag(), mesh_uv_reset_bmface(), normals_split(), object_defgroup_remove_edit_mode(), 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

◆ 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 604 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 613 of file bmesh_class.hh.

◆ BM_ELEM_CD_SET_INT

◆ BM_FACE_FIRST_LOOP

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

Definition at line 631 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_edge_diagonal(), BM_face_calc_tangent_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(), 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_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_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(), BM_mesh_select_mode_clean_ex(), bm_mesh_select_mode_flush_edge_to_face_iter_fn(), BM_mesh_separate_faces(), BM_mesh_validate(), 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_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(), mesh_customdatacorrect_face_substitute_set(), 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_seams_from_islands_exec(), 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

Definition at line 659 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 660 of file bmesh_class.hh.

Referenced by bmesh_elem_check().

◆ BM_THREAD_LIMIT

Typedef Documentation

◆ BMDiskLink

typedef struct BMDiskLink BMDiskLink

◆ BMEdge

typedef struct BMEdge BMEdge

◆ BMEdge_OFlag

typedef struct BMEdge_OFlag BMEdge_OFlag

◆ BMEdgeFilterFunc

typedef bool(* BMEdgeFilterFunc) (const BMEdge *, void *user_data)

Definition at line 501 of file bmesh_class.hh.

◆ BMElem

typedef struct BMElem BMElem

◆ BMElemF

typedef struct BMElemF BMElemF

◆ BMElemFilterFunc

typedef bool(* BMElemFilterFunc) (const BMElem *, void *user_data)

Definition at line 499 of file bmesh_class.hh.

◆ BMesh

typedef struct BMesh BMesh

◆ BMFace

typedef struct BMFace BMFace

◆ BMFace_OFlag

typedef struct BMFace_OFlag BMFace_OFlag

◆ BMFaceFilterFunc

typedef bool(* BMFaceFilterFunc) (const BMFace *, void *user_data)

Definition at line 502 of file bmesh_class.hh.

◆ BMFlagLayer

typedef struct BMFlagLayer BMFlagLayer

◆ BMHeader

typedef struct BMHeader BMHeader

BMHeader

All mesh elements begin with a BMHeader. This structure hold several types of data

1: The type of the element (vert, edge, loop or face) 2: Persistent "header" flags/markings (smooth, seam, select, hidden, etc) note that this is different from the "tool" flags. 3: Unique ID in the BMesh. 4: some elements for internal record keeping.

◆ BMLoop

typedef struct BMLoop BMLoop

◆ BMLoopFilterFunc

typedef bool(* BMLoopFilterFunc) (const BMLoop *, void *user_data)

Definition at line 503 of file bmesh_class.hh.

◆ BMLoopNorEditData

typedef struct BMLoopNorEditData BMLoopNorEditData

◆ BMLoopNorEditDataArray

typedef struct BMLoopNorEditDataArray BMLoopNorEditDataArray

◆ BMLoopPairFilterFunc

typedef bool(* BMLoopPairFilterFunc) (const BMLoop *, const BMLoop *, void *user_data)

Definition at line 504 of file bmesh_class.hh.

◆ BMVert

typedef struct BMVert BMVert

◆ BMVert_OFlag

typedef struct BMVert_OFlag BMVert_OFlag

◆ BMVertFilterFunc

typedef bool(* BMVertFilterFunc) (const BMVert *, void *user_data)

Definition at line 500 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 386 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 418 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_DRAW 
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 469 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