Blender  V3.3
Classes | Functions
bmesh_mesh_normals.h File Reference
#include "bmesh_class.h"

Go to the source code of this file.

Classes

struct  BMeshNormalsUpdate_Params
 

Functions

void BM_mesh_normals_update_ex (BMesh *bm, const struct BMeshNormalsUpdate_Params *param)
 BMesh Compute Normals. More...
 
void BM_mesh_normals_update (BMesh *bm)
 
void BM_mesh_normals_update_with_partial_ex (BMesh *bm, const struct BMPartialUpdate *bmpinfo, const struct BMeshNormalsUpdate_Params *param)
 
void BM_mesh_normals_update_with_partial (BMesh *bm, const struct BMPartialUpdate *bmpinfo)
 
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. More...
 
void BM_loops_calc_normal_vcos (BMesh *bm, const float(*vcos)[3], const float(*vnos)[3], const float(*fnos)[3], bool use_split_normals, float split_angle, float(*r_lnos)[3], struct MLoopNorSpaceArray *r_lnors_spacearr, short(*clnors_data)[2], int cd_loop_clnors_offset, bool do_rebuild)
 BMesh Compute Loop Normals from/to external data. More...
 
bool BM_loop_check_cyclic_smooth_fan (BMLoop *l_curr)
 
void BM_lnorspacearr_store (BMesh *bm, float(*r_lnors)[3])
 
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)
 
struct BMLoopNorEditDataArray * BM_loop_normal_editdata_array_init (BMesh *bm, bool do_all_loops_of_vert)
 
void BM_loop_normal_editdata_array_free (struct BMLoopNorEditDataArray *lnors_ed_arr)
 
bool BM_custom_loop_normals_to_vector_layer (struct BMesh *bm)
 
void BM_custom_loop_normals_from_vector_layer (struct 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()

void BM_custom_loop_normals_from_vector_layer ( struct BMesh *  bm,
bool  add_sharp_edges 
)

◆ BM_custom_loop_normals_to_vector_layer()

bool BM_custom_loop_normals_to_vector_layer ( struct BMesh *  bm)

◆ 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 409 of file bmesh_mesh_normals.c.

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

Referenced by bevel_harden_normals(), BKE_editmesh_lnorspace_update(), and mesh_customdata_custom_splitnormals_add_exec().

◆ 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 1920 of file bmesh_mesh_normals.c.

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(), float(), BMesh::ldata, BMesh::lnor_spacearr, MLoopNorSpaceArray::lspacearr, M_PI, MEM_callocN, MEM_freeN, MLNOR_SPACEARR_BMLOOP_PTR, NULL, 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()

void BM_lnorspace_invalidate ( BMesh *  bm,
bool  do_invalidate_all 
)

◆ BM_lnorspace_rebuild()

void BM_lnorspace_rebuild ( BMesh *  bm,
bool  preserve_clnor 
)

◆ BM_lnorspace_update()

void BM_lnorspace_update ( BMesh *  bm)

◆ BM_lnorspacearr_store()

void BM_lnorspacearr_store ( BMesh *  bm,
float(*)  r_lnors[3] 
)

◆ 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 425 of file bmesh_mesh_normals.c.

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()

void BM_loop_normal_editdata_array_free ( struct BMLoopNorEditDataArray *  lnors_ed_arr)

◆ BM_loop_normal_editdata_array_init()

struct BMLoopNorEditDataArray* BM_loop_normal_editdata_array_init ( BMesh *  bm,
bool  do_all_loops_of_vert 
)

◆ BM_loops_calc_normal_vcos()

void BM_loops_calc_normal_vcos ( BMesh *  bm,
const float(*)  vcos[3],
const float(*)  vnos[3],
const float(*)  fnos[3],
bool  use_split_normals,
float  split_angle,
float(*)  r_lnos[3],
struct 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).

Definition at line 1683 of file bmesh_mesh_normals.c.

References BLI_assert, bm, bm_mesh_loops_calc_normals(), bm_mesh_loops_calc_normals_no_autosmooth(), and cosf.

Referenced by BM_lnorspace_err(), BM_lnorspace_rebuild(), BM_lnorspacearr_store(), and mesh_render_data_update_normals().

◆ BM_mesh_normals_update()

void BM_mesh_normals_update ( BMesh *  bm)

◆ BM_mesh_normals_update_ex()

void BM_mesh_normals_update_ex ( BMesh *  bm,
const struct BMeshNormalsUpdate_Params *  param 
)

◆ BM_mesh_normals_update_with_partial()

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

◆ BM_mesh_normals_update_with_partial_ex()

void BM_mesh_normals_update_with_partial_ex ( BMesh *  bm,
const struct BMPartialUpdate *  bmpinfo,
const struct BMeshNormalsUpdate_Params *  param 
)

A version of BM_mesh_normals_update that updates a subset of geometry, used to avoid the overhead of updating everything.

◆ BM_normals_loops_edges_tag()

void BM_normals_loops_edges_tag ( BMesh *  bm,
bool  do_edges 
)

◆ BM_verts_calc_normal_vcos()

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.

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

Definition at line 323 of file bmesh_mesh_normals.c.

References bm, and bm_mesh_verts_calc_normals().

Referenced by BKE_editmesh_cache_ensure_vert_normals().