Blender V4.3
bmesh_mesh_normals.hh File Reference
#include "bmesh_class.hh"

Go to the source code of this file.

Classes

struct  BMeshNormalsUpdate_Params
 

Functions

void BM_mesh_normals_update_ex (BMesh *bm, const BMeshNormalsUpdate_Params *param)
 BMesh Compute Normals.
 
void BM_mesh_normals_update (BMesh *bm)
 
void BM_mesh_normals_update_with_partial_ex (BMesh *bm, const BMPartialUpdate *bmpinfo, const BMeshNormalsUpdate_Params *param)
 
void BM_mesh_normals_update_with_partial (BMesh *bm, const BMPartialUpdate *bmpinfo)
 
void BM_verts_calc_normal_vcos (BMesh *bm, blender::Span< blender::float3 > fnos, blender::Span< blender::float3 > vcos, blender::MutableSpan< blender::float3 > vnos)
 BMesh Compute Normals from/to external data.
 
void BM_loops_calc_normal_vcos (BMesh *bm, blender::Span< blender::float3 > vcos, blender::Span< blender::float3 > vnos, blender::Span< blender::float3 > fnos, bool use_split_normals, blender::MutableSpan< blender::float3 > r_lnos, MLoopNorSpaceArray *r_lnors_spacearr, short(*clnors_data)[2], int cd_loop_clnors_offset, bool do_rebuild)
 BMesh Compute Loop Normals from/to external data.
 
bool BM_loop_check_cyclic_smooth_fan (BMLoop *l_curr)
 
void BM_lnorspacearr_store (BMesh *bm, blender::MutableSpan< blender::float3 > r_lnors)
 
void BM_lnorspace_invalidate (BMesh *bm, bool do_invalidate_all)
 
void BM_lnorspace_rebuild (BMesh *bm, bool preserve_clnor)
 
void BM_lnorspace_update (BMesh *bm)
 
void BM_normals_loops_edges_tag (BMesh *bm, bool do_edges)
 
void BM_lnorspace_err (BMesh *bm)
 
BMLoopNorEditDataArrayBM_loop_normal_editdata_array_init (BMesh *bm, bool do_all_loops_of_vert)
 
void BM_loop_normal_editdata_array_free (BMLoopNorEditDataArray *lnors_ed_arr)
 
bool BM_custom_loop_normals_to_vector_layer (BMesh *bm)
 
void BM_custom_loop_normals_from_vector_layer (BMesh *bm, bool add_sharp_edges)
 
void BM_edges_sharp_from_angle_set (BMesh *bm, float split_angle)
 

Function Documentation

◆ BM_custom_loop_normals_from_vector_layer()

◆ BM_custom_loop_normals_to_vector_layer()

◆ BM_edges_sharp_from_angle_set()

void BM_edges_sharp_from_angle_set ( BMesh * bm,
float split_angle )

Define sharp edges as needed to mimic 'autosmooth' from angle threshold.

Used when defining an empty custom loop normals data layer, to keep same shading as with auto-smooth!

Definition at line 413 of file bmesh_mesh_normals.cc.

References bm, bm_mesh_edges_sharp_tag(), cosf, and M_PI.

◆ BM_lnorspace_err()

void BM_lnorspace_err ( BMesh * bm)

Auxiliary function only used by rebuild to detect if any spaces were not marked as invalid. Reports error if any of the lnor spaces change after rebuilding, meaning that all the possible lnor spaces to be rebuilt were not correctly marked.

Definition at line 1921 of file bmesh_mesh_normals.cc.

References BKE_lnor_spacearr_free(), BKE_lnor_spacearr_init(), BLI_assert, bm, BM_loops_calc_normal_vcos(), BM_SPACEARR_DIRTY_ALL, CD_CUSTOMLOOPNORMAL, clear(), compare_ff(), compare_v3v3(), CustomData_get_offset(), BMesh::ldata, BMesh::lnor_spacearr, MLoopNorSpaceArray::lspacearr, MEM_freeN(), MLNOR_SPACEARR_BMLOOP_PTR, MLoopNorSpace::ref_alpha, MLoopNorSpace::ref_beta, BMesh::spacearr_dirty, BMesh::totloop, MLoopNorSpace::vec_lnor, MLoopNorSpace::vec_ortho, and MLoopNorSpace::vec_ref.

Referenced by BM_lnorspace_rebuild().

◆ BM_lnorspace_invalidate()

◆ BM_lnorspace_rebuild()

◆ BM_lnorspace_update()

◆ BM_lnorspacearr_store()

void BM_lnorspacearr_store ( BMesh * bm,
blender::MutableSpan< blender::float3 > r_lnors )

◆ BM_loop_check_cyclic_smooth_fan()

bool BM_loop_check_cyclic_smooth_fan ( BMLoop * l_curr)

Check whether given loop is part of an unknown-so-far cyclic smooth fan, or not. Needed because cyclic smooth fans have no obvious 'entry point', and yet we need to walk them once, and only once.

Definition at line 429 of file bmesh_mesh_normals.cc.

References BLI_assert, BM_elem_flag_enable, BM_elem_flag_test, BM_ELEM_TAG, BM_vert_step_fan_loop(), and BMLoop::e.

Referenced by bm_mesh_loops_calc_normals_for_loop(), edbm_average_normals_exec(), and normals_split().

◆ BM_loop_normal_editdata_array_free()

◆ BM_loop_normal_editdata_array_init()

◆ BM_loops_calc_normal_vcos()

void BM_loops_calc_normal_vcos ( BMesh * bm,
blender::Span< blender::float3 > vcos,
blender::Span< blender::float3 > vnos,
blender::Span< blender::float3 > fnos,
bool use_split_normals,
blender::MutableSpan< blender::float3 > r_lnos,
MLoopNorSpaceArray * r_lnors_spacearr,
short(*) clnors_data[2],
int cd_loop_clnors_offset,
bool do_rebuild )

BMesh Compute Loop Normals from/to external data.

Compute split normals, i.e. vertex normals associated with each poly (hence 'loop normals'). Useful to materialize sharp edges (or non-smooth faces) without actually modifying the geometry (splitting edges).

◆ BM_mesh_normals_update()

◆ BM_mesh_normals_update_ex()

◆ BM_mesh_normals_update_with_partial()

void BM_mesh_normals_update_with_partial ( BMesh * bm,
const BMPartialUpdate * bmpinfo )

Definition at line 314 of file bmesh_mesh_normals.cc.

References bm, BM_mesh_normals_update_with_partial_ex(), and params.

◆ BM_mesh_normals_update_with_partial_ex()

◆ BM_normals_loops_edges_tag()

◆ BM_verts_calc_normal_vcos()

void BM_verts_calc_normal_vcos ( BMesh * bm,
blender::Span< blender::float3 > fnos,
blender::Span< blender::float3 > vcos,
blender::MutableSpan< blender::float3 > vnos )

BMesh Compute Normals from/to external data.

Computes the vertex normals of a mesh into vnos, using given vertex coordinates (vcos) and polygon normals (fnos).