Blender  V2.93
Classes | Macros | Typedefs | Enumerations | Functions | Variables
mesh.c File Reference
#include "MEM_guardedalloc.h"
#include "DNA_defaults.h"
#include "DNA_key_types.h"
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meshdata_types.h"
#include "DNA_object_types.h"
#include "BLI_bitmap.h"
#include "BLI_edgehash.h"
#include "BLI_endian_switch.h"
#include "BLI_ghash.h"
#include "BLI_hash.h"
#include "BLI_linklist.h"
#include "BLI_math.h"
#include "BLI_memarena.h"
#include "BLI_string.h"
#include "BLI_utildefines.h"
#include "BLT_translation.h"
#include "BKE_anim_data.h"
#include "BKE_deform.h"
#include "BKE_editmesh.h"
#include "BKE_global.h"
#include "BKE_idtype.h"
#include "BKE_key.h"
#include "BKE_lib_id.h"
#include "BKE_lib_query.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_mesh.h"
#include "BKE_mesh_runtime.h"
#include "BKE_mesh_wrapper.h"
#include "BKE_modifier.h"
#include "BKE_multires.h"
#include "BKE_object.h"
#include "PIL_time.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "BLO_read_write.h"

Go to the source code of this file.

Classes

struct  SplitFaceNewVert
 
struct  SplitFaceNewEdge
 

Macros

#define DNA_DEPRECATED_ALLOW
 
#define CD_LAYERS_FREE(id)
 
#define MAT_NR_REMAP(n)
 

Typedefs

typedef struct SplitFaceNewVert SplitFaceNewVert
 
typedef struct SplitFaceNewEdge SplitFaceNewEdge
 

Enumerations

enum  {
  MESHCMP_DVERT_WEIGHTMISMATCH = 1 , MESHCMP_DVERT_GROUPMISMATCH , MESHCMP_DVERT_TOTGROUPMISMATCH , MESHCMP_LOOPCOLMISMATCH ,
  MESHCMP_LOOPUVMISMATCH , MESHCMP_LOOPMISMATCH , MESHCMP_POLYVERTMISMATCH , MESHCMP_POLYMISMATCH ,
  MESHCMP_EDGEUNKNOWN , MESHCMP_VERTCOMISMATCH , MESHCMP_CDLAYERS_MISMATCH
}
 

Functions

static void mesh_clear_geometry (Mesh *mesh)
 
static void mesh_tessface_clear_intern (Mesh *mesh, int free_customdata)
 
static void mesh_init_data (ID *id)
 
static void mesh_copy_data (Main *bmain, ID *id_dst, const ID *id_src, const int flag)
 
static void mesh_free_data (ID *id)
 
static void mesh_foreach_id (ID *id, LibraryForeachIDData *data)
 
static void mesh_blend_write (BlendWriter *writer, ID *id, const void *id_address)
 
static void mesh_blend_read_data (BlendDataReader *reader, ID *id)
 
static void mesh_blend_read_lib (BlendLibReader *reader, ID *id)
 
static void mesh_read_expand (BlendExpander *expander, ID *id)
 
static const char * cmpcode_to_str (int code)
 
static int customdata_compare (CustomData *c1, CustomData *c2, Mesh *m1, Mesh *m2, const float thresh)
 
const char * BKE_mesh_cmp (Mesh *me1, Mesh *me2, float thresh)
 
static void mesh_ensure_tessellation_customdata (Mesh *me)
 
void BKE_mesh_ensure_skin_customdata (Mesh *me)
 
bool BKE_mesh_ensure_facemap_customdata (struct Mesh *me)
 
bool BKE_mesh_clear_facemap_customdata (struct Mesh *me)
 
static void mesh_update_linked_customdata (Mesh *me, const bool do_ensure_tess_cd)
 
void BKE_mesh_update_customdata_pointers (Mesh *me, const bool do_ensure_tess_cd)
 
bool BKE_mesh_has_custom_loop_normals (Mesh *me)
 
void BKE_mesh_free_data (Mesh *me)
 
void BKE_mesh_clear_geometry (Mesh *mesh)
 
MeshBKE_mesh_add (Main *bmain, const char *name)
 
static void mesh_ensure_cdlayers_primary (Mesh *mesh, bool do_tessface)
 
MeshBKE_mesh_new_nomain (int verts_len, int edges_len, int tessface_len, int loops_len, int polys_len)
 
void BKE_mesh_copy_settings (Mesh *me_dst, const Mesh *me_src)
 
MeshBKE_mesh_new_nomain_from_template_ex (const Mesh *me_src, int verts_len, int edges_len, int tessface_len, int loops_len, int polys_len, CustomData_MeshMasks mask)
 
MeshBKE_mesh_new_nomain_from_template (const Mesh *me_src, int verts_len, int edges_len, int tessface_len, int loops_len, int polys_len)
 
void BKE_mesh_eval_delete (struct Mesh *mesh_eval)
 
MeshBKE_mesh_copy_for_eval (struct Mesh *source, bool reference)
 
BMeshBKE_mesh_to_bmesh_ex (const Mesh *me, const struct BMeshCreateParams *create_params, const struct BMeshFromMeshParams *convert_params)
 
BMeshBKE_mesh_to_bmesh (Mesh *me, Object *ob, const bool add_key_index, const struct BMeshCreateParams *params)
 
MeshBKE_mesh_from_bmesh_nomain (BMesh *bm, const struct BMeshToMeshParams *params, const Mesh *me_settings)
 
MeshBKE_mesh_from_bmesh_for_eval_nomain (BMesh *bm, const CustomData_MeshMasks *cd_mask_extra, const Mesh *me_settings)
 
BoundBoxBKE_mesh_boundbox_get (Object *ob)
 
void BKE_mesh_texspace_calc (Mesh *me)
 
void BKE_mesh_texspace_ensure (Mesh *me)
 
void BKE_mesh_texspace_get (Mesh *me, float r_loc[3], float r_size[3])
 
void BKE_mesh_texspace_get_reference (Mesh *me, short **r_texflag, float **r_loc, float **r_size)
 
void BKE_mesh_texspace_copy_from_object (Mesh *me, Object *ob)
 
float(* BKE_mesh_orco_verts_get (Object *ob))[3]
 
void BKE_mesh_orco_verts_transform (Mesh *me, float(*orco)[3], int totvert, int invert)
 
int test_index_face (MFace *mface, CustomData *fdata, int mfindex, int nr)
 
MeshBKE_mesh_from_object (Object *ob)
 
void BKE_mesh_assign_object (Main *bmain, Object *ob, Mesh *me)
 
void BKE_mesh_material_index_remove (Mesh *me, short index)
 
bool BKE_mesh_material_index_used (Mesh *me, short index)
 
void BKE_mesh_material_index_clear (Mesh *me)
 
void BKE_mesh_material_remap (Mesh *me, const unsigned int *remap, unsigned int remap_len)
 
void BKE_mesh_smooth_flag_set (Mesh *me, const bool use_smooth)
 
int poly_find_loop_from_vert (const MPoly *poly, const MLoop *loopstart, uint vert)
 
int poly_get_adj_loops_from_vert (const MPoly *poly, const MLoop *mloop, unsigned int vert, unsigned int r_adj[2])
 
int BKE_mesh_edge_other_vert (const MEdge *e, int v)
 
void BKE_mesh_looptri_get_real_edges (const Mesh *mesh, const MLoopTri *looptri, int r_edges[3])
 
bool BKE_mesh_minmax (const Mesh *me, float r_min[3], float r_max[3])
 
void BKE_mesh_transform (Mesh *me, const float mat[4][4], bool do_keys)
 
void BKE_mesh_translate (Mesh *me, const float offset[3], const bool do_keys)
 
void BKE_mesh_tessface_calc (Mesh *mesh)
 
void BKE_mesh_tessface_ensure (Mesh *mesh)
 
void BKE_mesh_tessface_clear (Mesh *mesh)
 
void BKE_mesh_do_versions_cd_flag_init (Mesh *mesh)
 
void BKE_mesh_mselect_clear (Mesh *me)
 
void BKE_mesh_mselect_validate (Mesh *me)
 
int BKE_mesh_mselect_find (Mesh *me, int index, int type)
 
int BKE_mesh_mselect_active_get (Mesh *me, int type)
 
void BKE_mesh_mselect_active_set (Mesh *me, int index, int type)
 
void BKE_mesh_count_selected_items (const Mesh *mesh, int r_count[3])
 
void BKE_mesh_vert_coords_get (const Mesh *mesh, float(*vert_coords)[3])
 
float(* BKE_mesh_vert_coords_alloc (const Mesh *mesh, int *r_vert_len))[3]
 
void BKE_mesh_vert_coords_apply (Mesh *mesh, const float(*vert_coords)[3])
 
void BKE_mesh_vert_coords_apply_with_mat4 (Mesh *mesh, const float(*vert_coords)[3], const float mat[4][4])
 
void BKE_mesh_vert_normals_apply (Mesh *mesh, const short(*vert_normals)[3])
 
void BKE_mesh_calc_normals_split_ex (Mesh *mesh, MLoopNorSpaceArray *r_lnors_spacearr)
 
void BKE_mesh_calc_normals_split (Mesh *mesh)
 
static int split_faces_prepare_new_verts (const Mesh *mesh, MLoopNorSpaceArray *lnors_spacearr, SplitFaceNewVert **new_verts, MemArena *memarena)
 
static int split_faces_prepare_new_edges (const Mesh *mesh, SplitFaceNewEdge **new_edges, MemArena *memarena)
 
static void split_faces_split_new_verts (Mesh *mesh, SplitFaceNewVert *new_verts, const int num_new_verts)
 
static void split_faces_split_new_edges (Mesh *mesh, SplitFaceNewEdge *new_edges, const int num_new_edges)
 
void BKE_mesh_split_faces (Mesh *mesh, bool free_loop_normals)
 
void BKE_mesh_eval_geometry (Depsgraph *depsgraph, Mesh *mesh)
 

Variables

IDTypeInfo IDType_ID_ME
 

Macro Definition Documentation

◆ CD_LAYERS_FREE

#define CD_LAYERS_FREE (   id)
Value:
if (id && id != id##_buff) { \
MEM_freeN(id); \
} \
((void)0)

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

Definition at line 27 of file mesh.c.

◆ MAT_NR_REMAP

#define MAT_NR_REMAP (   n)
Value:
if (n < remap_len_short) { \
BLI_assert(n >= 0 && remap[n] < remap_len_short); \
n = remap[n]; \
} \
((void)0)

Typedef Documentation

◆ SplitFaceNewEdge

◆ SplitFaceNewVert

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
MESHCMP_DVERT_WEIGHTMISMATCH 
MESHCMP_DVERT_GROUPMISMATCH 
MESHCMP_DVERT_TOTGROUPMISMATCH 
MESHCMP_LOOPCOLMISMATCH 
MESHCMP_LOOPUVMISMATCH 
MESHCMP_LOOPMISMATCH 
MESHCMP_POLYVERTMISMATCH 
MESHCMP_POLYMISMATCH 
MESHCMP_EDGEUNKNOWN 
MESHCMP_VERTCOMISMATCH 
MESHCMP_CDLAYERS_MISMATCH 

Definition at line 372 of file mesh.c.

Function Documentation

◆ BKE_mesh_add()

Mesh* BKE_mesh_add ( Main bmain,
const char *  name 
)

◆ BKE_mesh_assign_object()

void BKE_mesh_assign_object ( Main bmain,
Object ob,
Mesh me 
)

◆ BKE_mesh_boundbox_get()

BoundBox* BKE_mesh_boundbox_get ( Object ob)

◆ BKE_mesh_calc_normals_split()

void BKE_mesh_calc_normals_split ( Mesh mesh)

◆ BKE_mesh_calc_normals_split_ex()

void BKE_mesh_calc_normals_split_ex ( Mesh mesh,
MLoopNorSpaceArray r_lnors_spacearr 
)

Compute 'split' (aka loop, or per face corner's) normals.

Parameters
r_lnors_spacearrAllows to get computed loop normal space array. That data, among other things, contains 'smooth fan' info, useful e.g. to split geometry along sharp edges...

Definition at line 1797 of file mesh.c.

References BKE_mesh_calc_normals_poly(), BKE_mesh_normals_loop_split(), CD_CALLOC, CD_CUSTOMLOOPNORMAL, Mesh_Runtime::cd_dirty_vert, CD_FLAG_TEMPORARY, CD_MASK_NORMAL, CD_NORMAL, CustomData_add_layer(), CustomData_get_layer(), CustomData_has_layer(), CustomData_set_layer_flag(), Mesh::flag, float(), Mesh::ldata, M_PI, ME_AUTOSMOOTH, Mesh::medge, MEM_freeN, MEM_malloc_arrayN, mesh, Mesh::mloop, Mesh::mpoly, Mesh::mvert, NULL, Mesh::runtime, Mesh::smoothresh, Mesh::totedge, Mesh::totloop, Mesh::totpoly, and Mesh::totvert.

Referenced by BKE_mesh_calc_normals_split(), and BKE_mesh_split_faces().

◆ BKE_mesh_clear_facemap_customdata()

bool BKE_mesh_clear_facemap_customdata ( struct Mesh me)

◆ BKE_mesh_clear_geometry()

void BKE_mesh_clear_geometry ( Mesh mesh)

◆ BKE_mesh_cmp()

const char* BKE_mesh_cmp ( Mesh me1,
Mesh me2,
float  thresh 
)

Used for unit testing; compares two meshes, checking only differences we care about. should be usable with leaf's testing framework I get RNA work done, will use hackish testing code for now.

Definition at line 598 of file mesh.c.

References Freestyle::c, cmpcode_to_str(), customdata_compare(), Mesh::ldata, NULL, Mesh::totedge, Mesh::totloop, Mesh::totpoly, and Mesh::totvert.

◆ BKE_mesh_copy_for_eval()

Mesh* BKE_mesh_copy_for_eval ( struct Mesh source,
bool  reference 
)

◆ BKE_mesh_copy_settings()

void BKE_mesh_copy_settings ( Mesh me_dst,
const Mesh me_src 
)

◆ BKE_mesh_count_selected_items()

void BKE_mesh_count_selected_items ( const Mesh mesh,
int  r_count[3] 
)

◆ BKE_mesh_do_versions_cd_flag_init()

void BKE_mesh_do_versions_cd_flag_init ( Mesh mesh)

◆ BKE_mesh_edge_other_vert()

int BKE_mesh_edge_other_vert ( const MEdge e,
int  v 
)

Return the index of the edge vert that is not equal to v. If neither edge vertex is equal to v, returns -1.

Definition at line 1446 of file mesh.c.

References e, and v.

◆ BKE_mesh_ensure_facemap_customdata()

bool BKE_mesh_ensure_facemap_customdata ( struct Mesh me)

◆ BKE_mesh_ensure_skin_customdata()

void BKE_mesh_ensure_skin_customdata ( Mesh me)

◆ BKE_mesh_eval_delete()

void BKE_mesh_eval_delete ( struct Mesh mesh_eval)

◆ BKE_mesh_eval_geometry()

void BKE_mesh_eval_geometry ( Depsgraph depsgraph,
Mesh mesh 
)

◆ BKE_mesh_free_data()

void BKE_mesh_free_data ( Mesh me)

Free (or release) any data used by this mesh (does not free the mesh itself).

Definition at line 796 of file mesh.c.

References Mesh::id, and mesh_free_data().

Referenced by BKE_mesh_eval_delete(), and undomesh_free_data().

◆ BKE_mesh_from_bmesh_for_eval_nomain()

Mesh* BKE_mesh_from_bmesh_for_eval_nomain ( BMesh bm,
const CustomData_MeshMasks cd_mask_extra,
const Mesh me_settings 
)

◆ BKE_mesh_from_bmesh_nomain()

Mesh* BKE_mesh_from_bmesh_nomain ( BMesh bm,
const struct BMeshToMeshParams params,
const Mesh me_settings 
)

◆ BKE_mesh_from_object()

Mesh* BKE_mesh_from_object ( Object ob)

◆ BKE_mesh_has_custom_loop_normals()

bool BKE_mesh_has_custom_loop_normals ( Mesh me)

◆ BKE_mesh_looptri_get_real_edges()

void BKE_mesh_looptri_get_real_edges ( const Mesh mesh,
const MLoopTri looptri,
int  r_edges[3] 
)

Sets each output array element to the edge index if it is a real edge, or -1.

Definition at line 1461 of file mesh.c.

References e, MLoop::e, Mesh::medge, mesh, Mesh::mloop, MLoopTri::tri, and MLoop::v.

◆ BKE_mesh_material_index_clear()

void BKE_mesh_material_index_clear ( Mesh me)

Definition at line 1347 of file mesh.c.

References MPoly::mat_nr, MFace::mat_nr, Mesh::mface, and Mesh::mpoly.

Referenced by material_data_index_clear_id().

◆ BKE_mesh_material_index_remove()

void BKE_mesh_material_index_remove ( Mesh me,
short  index 
)

Definition at line 1307 of file mesh.c.

References MPoly::mat_nr, MFace::mat_nr, Mesh::mface, and Mesh::mpoly.

Referenced by material_data_index_remove_id().

◆ BKE_mesh_material_index_used()

bool BKE_mesh_material_index_used ( Mesh me,
short  index 
)

Definition at line 1326 of file mesh.c.

References MPoly::mat_nr, MFace::mat_nr, Mesh::mface, and Mesh::mpoly.

Referenced by BKE_object_material_slot_used().

◆ BKE_mesh_material_remap()

void BKE_mesh_material_remap ( Mesh me,
const unsigned int *  remap,
unsigned int  remap_len 
)

◆ BKE_mesh_minmax()

bool BKE_mesh_minmax ( const Mesh me,
float  r_min[3],
float  r_max[3] 
)

Definition at line 1474 of file mesh.c.

References MVert::co, minmax_v3v3_v3(), Mesh::mvert, and Mesh::totvert.

◆ BKE_mesh_mselect_active_get()

int BKE_mesh_mselect_active_get ( Mesh me,
int  type 
)

Return The index of the active element.

Definition at line 1693 of file mesh.c.

References BLI_assert, ELEM, MSelect::index, ME_ESEL, ME_FSEL, ME_VSEL, Mesh::mselect, Mesh::totselect, type, and MSelect::type.

Referenced by ED_mesh_active_dvert_get_ob().

◆ BKE_mesh_mselect_active_set()

void BKE_mesh_mselect_active_set ( Mesh me,
int  index,
int  type 
)

◆ BKE_mesh_mselect_clear()

void BKE_mesh_mselect_clear ( Mesh me)

◆ BKE_mesh_mselect_find()

int BKE_mesh_mselect_find ( Mesh me,
int  index,
int  type 
)

Return the index within me->mselect, or -1

Definition at line 1677 of file mesh.c.

References BLI_assert, ELEM, MSelect::index, ME_ESEL, ME_FSEL, ME_VSEL, Mesh::mselect, Mesh::totselect, type, and MSelect::type.

Referenced by BKE_mesh_mselect_active_set().

◆ BKE_mesh_mselect_validate()

void BKE_mesh_mselect_validate ( Mesh me)

◆ BKE_mesh_new_nomain()

Mesh* BKE_mesh_new_nomain ( int  verts_len,
int  edges_len,
int  tessface_len,
int  loops_len,
int  polys_len 
)

◆ BKE_mesh_new_nomain_from_template()

Mesh* BKE_mesh_new_nomain_from_template ( const Mesh me_src,
int  verts_len,
int  edges_len,
int  tessface_len,
int  loops_len,
int  polys_len 
)

Definition at line 975 of file mesh.c.

References BKE_mesh_new_nomain_from_template_ex(), and CD_MASK_EVERYTHING.

◆ BKE_mesh_new_nomain_from_template_ex()

Mesh* BKE_mesh_new_nomain_from_template_ex ( const Mesh me_src,
int  verts_len,
int  edges_len,
int  tessface_len,
int  loops_len,
int  polys_len,
CustomData_MeshMasks  mask 
)

◆ BKE_mesh_orco_verts_get()

float(* BKE_mesh_orco_verts_get ( Object ob) )[3]

◆ BKE_mesh_orco_verts_transform()

void BKE_mesh_orco_verts_transform ( Mesh me,
float(*)  orco[3],
int  totvert,
int  invert 
)

◆ BKE_mesh_smooth_flag_set()

void BKE_mesh_smooth_flag_set ( Mesh me,
const bool  use_smooth 
)

◆ BKE_mesh_split_faces()

void BKE_mesh_split_faces ( Mesh mesh,
bool  free_loop_normals 
)

◆ BKE_mesh_tessface_calc()

void BKE_mesh_tessface_calc ( Mesh mesh)

◆ BKE_mesh_tessface_clear()

void BKE_mesh_tessface_clear ( Mesh mesh)

◆ BKE_mesh_tessface_ensure()

void BKE_mesh_tessface_ensure ( Mesh mesh)

◆ BKE_mesh_texspace_calc()

void BKE_mesh_texspace_calc ( Mesh me)

◆ BKE_mesh_texspace_copy_from_object()

void BKE_mesh_texspace_copy_from_object ( Mesh me,
Object ob 
)

◆ BKE_mesh_texspace_ensure()

void BKE_mesh_texspace_ensure ( Mesh me)

◆ BKE_mesh_texspace_get()

void BKE_mesh_texspace_get ( Mesh me,
float  r_loc[3],
float  r_size[3] 
)

Definition at line 1123 of file mesh.c.

References BKE_mesh_texspace_ensure(), copy_v3_v3(), Mesh::loc, and Mesh::size.

Referenced by BKE_mesh_orco_verts_transform().

◆ BKE_mesh_texspace_get_reference()

void BKE_mesh_texspace_get_reference ( Mesh me,
short **  r_texflag,
float **  r_loc,
float **  r_size 
)

◆ BKE_mesh_to_bmesh()

BMesh* BKE_mesh_to_bmesh ( Mesh me,
Object ob,
const bool  add_key_index,
const struct BMeshCreateParams params 
)

Definition at line 1019 of file mesh.c.

References BKE_mesh_to_bmesh_ex(), params, and Object::shapenr.

Referenced by EDBM_mesh_make().

◆ BKE_mesh_to_bmesh_ex()

BMesh* BKE_mesh_to_bmesh_ex ( const Mesh me,
const struct BMeshCreateParams create_params,
const struct BMeshFromMeshParams convert_params 
)

Definition at line 1007 of file mesh.c.

References bm, BM_mesh_bm_from_me(), BM_mesh_create(), and BMALLOC_TEMPLATE_FROM_ME.

Referenced by BKE_mesh_to_bmesh().

◆ BKE_mesh_transform()

void BKE_mesh_transform ( Mesh me,
const float  mat[4][4],
bool  do_keys 
)

◆ BKE_mesh_translate()

void BKE_mesh_translate ( Mesh me,
const float  offset[3],
const bool  do_keys 
)

◆ BKE_mesh_update_customdata_pointers()

void BKE_mesh_update_customdata_pointers ( Mesh me,
const bool  do_ensure_tess_cd 
)

◆ BKE_mesh_vert_coords_alloc()

float(* BKE_mesh_vert_coords_alloc ( const Mesh mesh,
int *  r_vert_len 
) )[3]

Definition at line 1745 of file mesh.c.

References BKE_mesh_vert_coords_get(), float(), MEM_mallocN, mesh, and Mesh::totvert.

◆ BKE_mesh_vert_coords_apply()

void BKE_mesh_vert_coords_apply ( Mesh mesh,
const float(*)  vert_coords[3] 
)

◆ BKE_mesh_vert_coords_apply_with_mat4()

void BKE_mesh_vert_coords_apply_with_mat4 ( Mesh mesh,
const float(*)  vert_coords[3],
const float  mat[4][4] 
)

◆ BKE_mesh_vert_coords_get()

void BKE_mesh_vert_coords_get ( const Mesh mesh,
float(*)  vert_coords[3] 
)

Definition at line 1737 of file mesh.c.

References copy_v3_v3(), mesh, Mesh::mvert, and Mesh::totvert.

Referenced by BKE_mesh_vert_coords_alloc().

◆ BKE_mesh_vert_normals_apply()

void BKE_mesh_vert_normals_apply ( Mesh mesh,
const short(*)  vert_normals[3] 
)

◆ cmpcode_to_str()

static const char* cmpcode_to_str ( int  code)
static

◆ customdata_compare()

static int customdata_compare ( CustomData c1,
CustomData c2,
Mesh m1,
Mesh m2,
const float  thresh 
)
static

◆ mesh_blend_read_data()

static void mesh_blend_read_data ( BlendDataReader reader,
ID id 
)
static

◆ mesh_blend_read_lib()

static void mesh_blend_read_lib ( BlendLibReader reader,
ID id 
)
static

Definition at line 315 of file mesh.c.

References BLO_read_id_address, Mesh::id, Mesh::key, ID::lib, Mesh::mat, Mesh::texcomesh, and Mesh::totcol.

◆ mesh_blend_write()

static void mesh_blend_write ( BlendWriter writer,
ID id,
const void *  id_address 
)
static

◆ mesh_clear_geometry()

static void mesh_clear_geometry ( Mesh mesh)
static

◆ mesh_copy_data()

static void mesh_copy_data ( Main bmain,
ID id_dst,
const ID id_src,
const int  flag 
)
static

◆ mesh_ensure_cdlayers_primary()

static void mesh_ensure_cdlayers_primary ( Mesh mesh,
bool  do_tessface 
)
static

◆ mesh_ensure_tessellation_customdata()

static void mesh_ensure_tessellation_customdata ( Mesh me)
static

◆ mesh_foreach_id()

static void mesh_foreach_id ( ID id,
LibraryForeachIDData data 
)
static

◆ mesh_free_data()

static void mesh_free_data ( ID id)
static

Definition at line 154 of file mesh.c.

References BKE_mesh_runtime_clear_cache(), Mesh::mat, MEM_SAFE_FREE, mesh, and mesh_clear_geometry().

Referenced by BKE_mesh_free_data().

◆ mesh_init_data()

static void mesh_init_data ( ID id)
static

◆ mesh_read_expand()

static void mesh_read_expand ( BlendExpander expander,
ID id 
)
static

Definition at line 333 of file mesh.c.

References Freestyle::a, BLO_expand, Mesh::key, Mesh::mat, Mesh::texcomesh, and Mesh::totcol.

◆ mesh_tessface_clear_intern()

static void mesh_tessface_clear_intern ( Mesh mesh,
int  free_customdata 
)
static

◆ mesh_update_linked_customdata()

static void mesh_update_linked_customdata ( Mesh me,
const bool  do_ensure_tess_cd 
)
static

◆ poly_find_loop_from_vert()

int poly_find_loop_from_vert ( const MPoly poly,
const MLoop loopstart,
uint  vert 
)

Find the index of the loop in 'poly' which references vertex, returns -1 if not found

Definition at line 1410 of file mesh.c.

References MPoly::totloop, and MLoop::v.

Referenced by poly_get_adj_loops_from_vert().

◆ poly_get_adj_loops_from_vert()

int poly_get_adj_loops_from_vert ( const MPoly poly,
const MLoop mloop,
unsigned int  vert,
unsigned int  r_adj[2] 
)

Fill r_adj with the loop indices in poly adjacent to the vertex. Returns the index of the loop matching vertex, or -1 if the vertex is not in poly

Definition at line 1426 of file mesh.c.

References MPoly::loopstart, ME_POLY_LOOP_NEXT, ME_POLY_LOOP_PREV, and poly_find_loop_from_vert().

◆ split_faces_prepare_new_edges()

static int split_faces_prepare_new_edges ( const Mesh mesh,
SplitFaceNewEdge **  new_edges,
MemArena memarena 
)
static

◆ split_faces_prepare_new_verts()

static int split_faces_prepare_new_verts ( const Mesh mesh,
MLoopNorSpaceArray lnors_spacearr,
SplitFaceNewVert **  new_verts,
MemArena memarena 
)
static

◆ split_faces_split_new_edges()

static void split_faces_split_new_edges ( Mesh mesh,
SplitFaceNewEdge new_edges,
const int  num_new_edges 
)
static

◆ split_faces_split_new_verts()

static void split_faces_split_new_verts ( Mesh mesh,
SplitFaceNewVert new_verts,
const int  num_new_verts 
)
static

◆ test_index_face()

int test_index_face ( MFace mface,
CustomData fdata,
int  mfindex,
int  nr 
)

Variable Documentation

◆ IDType_ID_ME

IDTypeInfo IDType_ID_ME
Initial value:
= {
.id_code = ID_ME,
.id_filter = FILTER_ID_ME,
.main_listbase_index = INDEX_ID_ME,
.struct_size = sizeof(Mesh),
.name = "Mesh",
.name_plural = "meshes",
.translation_context = BLT_I18NCONTEXT_ID_MESH,
.flags = 0,
.copy_data = mesh_copy_data,
.free_data = mesh_free_data,
.make_local = NULL,
.foreach_id = mesh_foreach_id,
.foreach_cache = NULL,
.owner_get = NULL,
.blend_write = mesh_blend_write,
.blend_read_data = mesh_blend_read_data,
.blend_read_lib = mesh_blend_read_lib,
.blend_read_expand = mesh_read_expand,
.blend_read_undo_preserve = NULL,
.lib_override_apply_post = NULL,
}
#define BLT_I18NCONTEXT_ID_MESH
#define FILTER_ID_ME
Definition: DNA_ID.h:719
@ INDEX_ID_ME
Definition: DNA_ID.h:827
@ ID_ME
Definition: DNA_ID_enums.h:60
struct Mesh Mesh
static void init_data(ModifierData *md)
static void mesh_read_expand(BlendExpander *expander, ID *id)
Definition: mesh.c:333
static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address)
Definition: mesh.c:173
static void mesh_blend_read_lib(BlendLibReader *reader, ID *id)
Definition: mesh.c:315
static void mesh_free_data(ID *id)
Definition: mesh.c:154
static void mesh_blend_read_data(BlendDataReader *reader, ID *id)
Definition: mesh.c:266
static void mesh_init_data(ID *id)
Definition: mesh.c:76
static void mesh_foreach_id(ID *id, LibraryForeachIDData *data)
Definition: mesh.c:163
static void mesh_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int flag)
Definition: mesh.c:95

Definition at line 344 of file mesh.c.

Referenced by blender::bke::tests::test_lattice_deform_free(), and blender::bke::tests::test_lattice_deform_init().