45 const float (*fnos)[3],
46 const float (*vcos)[3],
49 const float (*vcos)[3],
50 const float (*vnos)[3],
51 const float (*fnos)[3],
52 const bool use_split_normals,
53 const float split_angle,
56 short (*clnors_data)[2],
57 const int cd_loop_clnors_offset,
58 const bool do_rebuild);
72 const bool do_all_loops_of_vert);
86 BMesh *
bm,
const char *location,
const char *func,
const char *msg_a,
const char *msg_b);
100 BLI_assert((index >= 0) && (index < bm->totvert));
106 BLI_assert((index >= 0) && (index < bm->totedge));
112 BLI_assert((index >= 0) && (index < bm->totface));
146 #define BMALLOC_TEMPLATE_FROM_BM(bm) \
148 (CHECK_TYPE_INLINE(bm, BMesh *), (bm)->totvert), (bm)->totedge, (bm)->totloop, (bm)->totface \
151 #define _VA_BMALLOC_TEMPLATE_FROM_ME_1(me) \
153 (CHECK_TYPE_INLINE(me, Mesh *), (me)->totvert), (me)->totedge, (me)->totloop, (me)->totpoly, \
155 #define _VA_BMALLOC_TEMPLATE_FROM_ME_2(me_a, me_b) \
157 (CHECK_TYPE_INLINE(me_a, Mesh *), \
158 CHECK_TYPE_INLINE(me_b, Mesh *), \
159 (me_a)->totvert + (me_b)->totvert), \
160 (me_a)->totedge + (me_b)->totedge, (me_a)->totloop + (me_b)->totloop, \
161 (me_a)->totpoly + (me_b)->totpoly, \
163 #define BMALLOC_TEMPLATE_FROM_ME(...) \
164 VA_NARGS_CALL_OVERLOAD(_VA_BMALLOC_TEMPLATE_FROM_ME_, __VA_ARGS__)
171 const float (*vert_coords)[3],
172 const float mat[4][4]);
typedef float(TangentPoint)[2]
ATTR_WARN_UNUSED_RESULT BMesh * bm
void BM_mesh_elem_toolflags_clear(BMesh *bm)
void BM_mesh_vert_coords_apply_with_mat4(BMesh *bm, const float(*vert_coords)[3], const float mat[4][4])
const BMAllocTemplate bm_mesh_allocsize_default
void BM_lnorspacearr_store(BMesh *bm, float(*r_lnors)[3])
BMFace * BM_face_at_index_find(BMesh *bm, const int index)
void BM_mesh_toolflags_set(BMesh *bm, bool use_toolflags)
void BM_mesh_data_free(BMesh *bm)
BMesh Free Mesh Data.
void BM_mesh_remap(BMesh *bm, const uint *vert_idx, const uint *edge_idx, const uint *face_idx)
void BM_mesh_vert_coords_apply(BMesh *bm, const float(*vert_coords)[3])
void BM_mesh_clear(BMesh *bm)
BMesh Clear Mesh.
void BM_loops_calc_normal_vcos(BMesh *bm, const float(*vcos)[3], const float(*vnos)[3], const float(*fnos)[3], const bool use_split_normals, const float split_angle, float(*r_lnos)[3], struct MLoopNorSpaceArray *r_lnors_spacearr, short(*clnors_data)[2], const int cd_loop_clnors_offset, const bool do_rebuild)
BMesh Compute Loop Normals from/to external data.
void BM_lnorspace_update(BMesh *bm)
const BMAllocTemplate bm_mesh_chunksize_default
void BM_lnorspace_invalidate(BMesh *bm, const bool do_invalidate_all)
struct BMLoopNorEditDataArray * BM_loop_normal_editdata_array_init(BMesh *bm, const bool do_all_loops_of_vert)
void BM_normals_loops_edges_tag(BMesh *bm, const bool do_edges)
void BM_custom_loop_normals_from_vector_layer(struct BMesh *bm, bool add_sharp_edges)
BMEdge * BM_edge_at_index_find_or_table(BMesh *bm, const int index)
void BM_mesh_elem_toolflags_ensure(BMesh *bm)
void BM_lnorspace_rebuild(BMesh *bm, bool preserve_clnor)
void bmesh_edit_end(BMesh *bm, const BMOpTypeFlag type_flag)
BMesh End Edit.
void BM_mesh_rebuild(BMesh *bm, const struct BMeshCreateParams *params, struct BLI_mempool *vpool, struct BLI_mempool *epool, struct BLI_mempool *lpool, struct BLI_mempool *fpool)
BMEdge * BM_edge_at_index_find(BMesh *bm, const int index)
BLI_INLINE BMFace * BM_face_at_index(BMesh *bm, const int index)
BLI_INLINE BMEdge * BM_edge_at_index(BMesh *bm, const int index)
void BM_mesh_free(BMesh *bm)
BMesh Free Mesh.
BMFace * BM_face_at_index_find_or_table(BMesh *bm, const int index)
BMVert * BM_vert_at_index_find_or_table(BMesh *bm, const int index)
void BM_mesh_normals_update(BMesh *bm)
BMesh Compute Normals.
void BM_mesh_elem_table_free(BMesh *bm, const char htype)
BMVert * BM_vert_at_index_find(BMesh *bm, const int index)
void BM_lnorspace_err(BMesh *bm)
bool BM_custom_loop_normals_to_vector_layer(struct BMesh *bm)
int BM_mesh_elem_count(BMesh *bm, const char htype)
void BM_mesh_elem_table_ensure(BMesh *bm, const char htype)
void BM_mesh_elem_table_init(BMesh *bm, const char htype)
BMesh * BM_mesh_create(const struct BMAllocTemplate *allocsize, const struct BMeshCreateParams *params)
float(* BM_mesh_vert_coords_alloc(BMesh *bm, int *r_vert_len))[3]
void BM_mesh_elem_index_ensure(BMesh *bm, const char htype)
void BM_loop_normal_editdata_array_free(struct BMLoopNorEditDataArray *lnors_ed_arr)
void BM_mesh_elem_index_validate(BMesh *bm, const char *location, const char *func, const char *msg_a, const char *msg_b)
void bmesh_edit_begin(BMesh *bm, const BMOpTypeFlag type_flag)
BMLoop * BM_loop_at_index_find(BMesh *bm, const int index)
bool BM_loop_check_cyclic_smooth_fan(BMLoop *l_curr)
bool BM_mesh_elem_table_check(BMesh *bm)
BLI_INLINE BMVert * BM_vert_at_index(BMesh *bm, const int index)
struct BMAllocTemplate BMAllocTemplate
void BM_mesh_vert_coords_get(BMesh *bm, float(*vert_coords)[3])
void BM_verts_calc_normal_vcos(BMesh *bm, const float(*fnos)[3], const float(*vcos)[3], float(*vnos)[3])
BMesh Compute Normals from/to external data.
void BM_edges_sharp_from_angle_set(BMesh *bm, const float split_angle)
void BM_mesh_elem_index_ensure_ex(BMesh *bm, const char htype, int elem_offset[4])
static int elem_offset(const SDNA *sdna, const char *type, const char *name, const SDNA_Struct *old)