Blender  V3.3
Classes | Macros | Enumerations | Functions | Variables
mesh.cc 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_index_range.hh"
#include "BLI_linklist.h"
#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_math_vector.hh"
#include "BLI_memarena.h"
#include "BLI_string.h"
#include "BLI_task.hh"
#include "BLI_utildefines.h"
#include "BLI_vector.hh"
#include "BLT_translation.h"
#include "BKE_anim_data.h"
#include "BKE_bpath.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_legacy_convert.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 MAT_NR_REMAP(n)
 

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 , MESHCMP_ATTRIBUTE_VALUE_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)
 
void BKE_mesh_free_editmesh (struct Mesh *mesh)
 
static void mesh_free_data (ID *id)
 
static void mesh_foreach_id (ID *id, LibraryForeachIDData *data)
 
static void mesh_foreach_path (ID *id, BPathForeachPathData *bpath_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, const int total_length, 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_for_undo (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_parameters (Mesh *me_dst, const Mesh *me_src)
 
void BKE_mesh_copy_parameters_for_eval (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 (const 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)
 
static void ensure_orig_index_layer (CustomData &data, const int size)
 
void BKE_mesh_ensure_default_orig_index_customdata (Mesh *mesh)
 
void BKE_mesh_ensure_default_orig_index_customdata_no_check (Mesh *mesh)
 
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, char **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)
 
void BKE_mesh_orco_ensure (Object *ob, Mesh *mesh)
 
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 uint *remap, uint remap_len)
 
void BKE_mesh_smooth_flag_set (Mesh *me, const bool use_smooth)
 
void BKE_mesh_auto_smooth_flag_set (Mesh *me, const bool use_auto_smooth, const float auto_smooth_angle)
 
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, uint vert, uint 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_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])
 
static float(* ensure_corner_normal_layer (Mesh &mesh))[3]
 
void BKE_mesh_calc_normals_split_ex (Mesh *mesh, MLoopNorSpaceArray *r_lnors_spacearr, float(*r_corner_normals)[3])
 
void BKE_mesh_calc_normals_split (Mesh *mesh)
 
static int split_faces_prepare_new_verts (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

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

Definition at line 11 of file mesh.cc.

◆ 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)
SyclQueue void void size_t num_bytes void

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 
MESHCMP_ATTRIBUTE_VALUE_MISMATCH 

Definition at line 394 of file mesh.cc.

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

void BKE_mesh_auto_smooth_flag_set ( Mesh me,
const bool  use_auto_smooth,
const float  auto_smooth_angle 
)

Definition at line 1500 of file mesh.cc.

References Mesh::flag, ME_AUTOSMOOTH, and Mesh::smoothresh.

Referenced by shade_smooth_exec().

◆ 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 ( struct Mesh mesh,
struct MLoopNorSpaceArray r_lnors_spacearr,
float(*)  r_corner_normals[3] 
)

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 1875 of file mesh.cc.

References BKE_mesh_assert_normals_dirty_or_calculated(), BKE_mesh_normals_loop_split(), BKE_mesh_poly_normals_ensure(), BKE_mesh_vertex_normals_ensure(), CD_CUSTOMLOOPNORMAL, CustomData_get_layer(), Mesh::flag, Mesh::ldata, M_PI, ME_AUTOSMOOTH, Mesh::medge, mesh, Mesh::mloop, Mesh::mpoly, Mesh::mvert, Mesh::smoothresh, Mesh::totedge, Mesh::totloop, Mesh::totpoly, and Mesh::totvert.

Referenced by BKE_mesh_calc_normals_split(), BKE_mesh_split_faces(), and blender::nodes::node_geo_deform_curves_on_surface_cc::node_geo_exec().

◆ 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 ( struct Mesh me1,
struct 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 702 of file mesh.cc.

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

◆ BKE_mesh_copy_for_eval()

Mesh* BKE_mesh_copy_for_eval ( const Mesh source,
bool  reference 
)

◆ BKE_mesh_copy_parameters()

void BKE_mesh_copy_parameters ( Mesh me_dst,
const Mesh me_src 
)

◆ BKE_mesh_copy_parameters_for_eval()

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

Definition at line 1537 of file mesh.cc.

References e, and v.

◆ BKE_mesh_ensure_default_orig_index_customdata()

void BKE_mesh_ensure_default_orig_index_customdata ( struct Mesh mesh)

Add original index (CD_ORIGINDEX) layers if they don't already exist. This is meant to be used when creating an evaluated mesh from an original edit mode mesh, to allow mapping from the evaluated vertices to the originals.

The mesh is expected to of a ME_WRAPPER_TYPE_MDATA wrapper type. This is asserted.

Definition at line 1194 of file mesh.cc.

References BKE_mesh_ensure_default_orig_index_customdata_no_check(), BLI_assert, ME_WRAPPER_TYPE_MDATA, mesh, Mesh::runtime, and Mesh_Runtime::wrapper_type.

Referenced by create_orco_mesh(), and editbmesh_calc_modifiers().

◆ BKE_mesh_ensure_default_orig_index_customdata_no_check()

void BKE_mesh_ensure_default_orig_index_customdata_no_check ( struct Mesh mesh)

Same as BKE_mesh_ensure_default_orig_index_customdata but does not perform any checks: they must be done by the caller.

Definition at line 1200 of file mesh.cc.

References Mesh::edata, ensure_orig_index_layer(), mesh, Mesh::pdata, Mesh::totedge, Mesh::totpoly, Mesh::totvert, and Mesh::vdata.

Referenced by BKE_mesh_ensure_default_orig_index_customdata().

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

void BKE_mesh_free_data_for_undo ( struct Mesh me)

Free (or release) any data used by this mesh (does not free the mesh itself). Only use for undo, in most cases BKE_id_free(nullptr, me) should be used.

Definition at line 903 of file mesh.cc.

References Mesh::id, and mesh_free_data().

Referenced by undomesh_free_data().

◆ BKE_mesh_free_editmesh()

void BKE_mesh_free_editmesh ( struct Mesh mesh)

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

Definition at line 1365 of file mesh.cc.

References Object::data, OB_MESH, and Object::type.

Referenced by BKE_sculpt_ensure_orig_mesh_data(), build_pbvh_from_ccg(), createTransEdge(), do_paintface_box_select(), ED_mesh_join_objects_exec(), ED_object_sculptmode_enter_ex(), ED_object_sculptmode_exit_ex(), ED_object_texture_paint_mode_enter_ex(), ED_object_texture_paint_mode_exit_ex(), ED_paint_proj_mesh_data_check(), ed_vwpaintmode_enter_generic(), ed_vwpaintmode_exit_generic(), ED_wpaint_ensure_data(), multires_force_external_reload(), multiresModifier_del_levels(), paint_proj_new_stroke(), paintface_deselect_all_visible(), paintface_flush_flags(), paintface_hide(), paintface_minmax(), paintface_mouse_select(), paintface_reveal(), paintface_select_linked(), paintvert_deselect_all_visible(), paintvert_flush_flags(), paintvert_hide(), paintvert_reveal(), paintvert_select_ungrouped(), quadriflow_remesh_exec(), SCULPT_boundary_info_ensure(), sculpt_face_set_grow(), sculpt_face_set_shrink(), sculpt_gesture_apply_trim(), sculpt_gesture_init_face_set_properties(), SCULPT_mesh_symmetry_xyz_get(), vertex_color_brightness_contrast_exec(), vertex_color_hsv_exec(), vertex_color_invert_exec(), vertex_color_levels_exec(), vertex_color_set(), vertex_color_smooth(), vertex_paint_from_weight(), vertex_weight_paint_mode_poll(), vgroup_selected_get(), vpaint_mode_toggle_exec(), vpaint_stroke_test_start(), weight_paint_sample_enum_itemf(), weight_sample_invoke(), wpaint_mode_toggle_exec(), and wpaint_stroke_test_start().

◆ BKE_mesh_has_custom_loop_normals()

bool BKE_mesh_has_custom_loop_normals ( struct 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] 
)

Definition at line 1549 of file mesh.cc.

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 1441 of file mesh.cc.

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 1401 of file mesh.cc.

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 1420 of file mesh.cc.

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 uint remap,
uint  remap_len 
)

◆ BKE_mesh_minmax()

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

Definition at line 1561 of file mesh.cc.

References init, max, min, blender::threading::parallel_reduce(), result, and Mesh::totvert.

◆ BKE_mesh_mselect_active_get()

int BKE_mesh_mselect_active_get ( struct Mesh me,
int  type 
)
Returns
The index of the active element.

Definition at line 1772 of file mesh.cc.

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 ( struct Mesh me,
int  index,
int  type 
)
Returns
the index within me->mselect, or -1

Definition at line 1759 of file mesh.cc.

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 
)

Definition at line 991 of file mesh.cc.

References BKE_idtype_idcode_to_name(), BKE_libblock_alloc(), BKE_libblock_init_empty(), BKE_mesh_update_customdata_pointers(), CD_NUMTYPES, copy_vn_i(), Mesh::edata, Mesh::fdata, Mesh::id, ID_ME, Mesh::ldata, LIB_ID_CREATE_LOCALIZE, mesh, mesh_ensure_cdlayers_primary(), Mesh::pdata, Mesh::totedge, Mesh::totface, Mesh::totloop, Mesh::totpoly, Mesh::totvert, CustomData::typemap, and Mesh::vdata.

Referenced by BKE_mesh_new_nomain_from_curve_displist(), blender::nodes::node_geo_curve_fill_cc::cdt_to_mesh(), blender::nodes::node_geo_mesh_primitive_circle_cc::create_circle_mesh(), blender::geometry::create_cuboid_mesh(), blender::nodes::create_cylinder_or_cone_mesh(), create_empty_mesh(), blender::nodes::create_grid_mesh(), blender::nodes::create_line_mesh(), blender::io::obj::MeshFromGeometry::create_mesh(), blender::nodes::node_geo_mesh_primitive_uv_sphere_cc::create_uv_sphere_mesh(), blender::nodes::create_vertex_mesh(), curve_calc_modifiers_post(), blender::bke::curve_to_mesh_sweep(), do_multires_bake(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_edges(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_faces(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_points_mesh(), evaluate_surface_object(), blender::geometry::execute_realize_mesh_tasks(), blender::nodes::node_geo_points_to_vertices_cc::geometry_set_points_to_vertices(), get_quick_mesh(), hair_create_input_mesh(), modifier_modify_mesh_and_geometry_set(), modifyMesh(), multires_unsubdivide_to_basemesh(), blender::io::alembic::AbcPointsReader::read_mesh(), and sculpt_gesture_trim_geometry_generate().

◆ 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 1106 of file mesh.cc.

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

void BKE_mesh_orco_ensure ( struct Object ob,
struct Mesh mesh 
)

◆ 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 ( struct Mesh mesh,
bool  free_loop_normals 
)

◆ BKE_mesh_tessface_clear()

void BKE_mesh_tessface_clear ( 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 1275 of file mesh.cc.

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,
char **  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 
)

◆ 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 1138 of file mesh.cc.

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 
)

Definition at line 874 of file mesh.cc.

References CD_MCOL, CD_MDEFORMVERT, CD_MEDGE, CD_MFACE, CD_MLOOP, CD_MLOOPUV, CD_MPOLY, CD_MTFACE, CD_MVERT, CD_PROP_BYTE_COLOR, CustomData_get_layer(), Mesh::dvert, Mesh::edata, Mesh::fdata, Mesh::ldata, Mesh::mcol, Mesh::medge, mesh_update_linked_customdata(), Mesh::mface, Mesh::mloop, Mesh::mloopcol, Mesh::mloopuv, Mesh::mpoly, Mesh::mtface, Mesh::mvert, Mesh::pdata, and Mesh::vdata.

Referenced by add_orco_mesh(), BKE_mesh_convert_mfaces_to_mpolys(), BKE_mesh_do_versions_convert_mfaces_to_mpolys(), BKE_mesh_from_metaball(), BKE_mesh_new_nomain(), BKE_mesh_new_nomain_from_template_ex(), BKE_mesh_nomain_to_mesh(), BKE_mesh_split_faces(), BKE_mesh_tessface_calc(), BKE_mesh_transform(), BKE_mesh_translate(), BKE_sculpt_color_layer_create_if_needed(), blo_do_versions_280(), BM_mesh_bm_to_me(), BM_mesh_bm_to_me_for_eval(), blender::bke::create_attribute_providers_for_mesh(), customdata_version_242(), delete_customdata_layer(), ED_mesh_color_add(), ED_mesh_color_ensure(), ED_mesh_join_objects_exec(), ED_mesh_sculpt_color_add(), ED_mesh_sculpt_color_ensure(), ED_mesh_uv_add(), blender::nodes::node_geo_extrude_mesh_cc::expand_mesh(), Freestyle::BlenderStrokeRenderer::GenerateStrokeMesh(), blender::ed::geometry::geometry_color_attribute_remove_exec(), hair_create_input_mesh(), mesh_add_edges(), mesh_add_loops(), mesh_add_polys(), mesh_add_verts(), mesh_clear_geometry(), mesh_copy_data(), SCULPT_dynamic_topology_disable_ex(), sculpt_undo_geometry_restore_data(), um_arraystore_compact_ex(), and um_arraystore_expand().

◆ BKE_mesh_vert_coords_alloc()

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

Definition at line 1824 of file mesh.cc.

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 1816 of file mesh.cc.

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

Referenced by BKE_mesh_vert_coords_alloc().

◆ cmpcode_to_str()

static const char* cmpcode_to_str ( int  code)
static

◆ customdata_compare()

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

◆ ensure_corner_normal_layer()

static float(* ensure_corner_normal_layer ( Mesh mesh) )[3]
static

◆ ensure_orig_index_layer()

static void ensure_orig_index_layer ( CustomData data,
const int  size 
)
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 335 of file mesh.cc.

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
Note
on data that this function intentionally doesn't free:
  • Materials and shape keys are not freed here (Mesh.mat & Mesh.key). As freeing shape keys requires tagging the depsgraph for updated relations, which is expensive. Material slots should be kept in sync with the object.
  • Edit-Mesh (Mesh.edit_mesh) Since edit-mesh is tied to the objects mode, which crashes when called in edit-mode, see: T90972.

Definition at line 920 of file mesh.cc.

References Mesh::act_face, BKE_mesh_update_customdata_pointers(), CustomData_free(), Mesh::edata, Mesh::fdata, Mesh::ldata, MEM_SAFE_FREE, mesh, Mesh::mselect, Mesh::pdata, Mesh::totedge, Mesh::totface, Mesh::totloop, Mesh::totpoly, Mesh::totselect, Mesh::totvert, and Mesh::vdata.

Referenced by BKE_mesh_clear_geometry(), and mesh_free_data().

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

static void mesh_foreach_path ( ID id,
BPathForeachPathData bpath_data 
)
static

◆ mesh_free_data()

static void mesh_free_data ( ID id)
static

◆ 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 353 of file mesh.cc.

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

This ensures grouped custom-data (e.g. CD_MLOOPUV and CD_MTFACE, or CD_PROP_BYTE_COLOR and CD_MCOL) have the same relative active/render/clone/mask indices.

NOTE(@campbellbarton): that for undo mesh data we want to skip 'ensure_tess_cd' call since we don't want to store memory for MFace data when its only used for older versions of the mesh.

Definition at line 865 of file mesh.cc.

References CustomData_bmesh_update_active_layers(), Mesh::fdata, Mesh::ldata, and mesh_ensure_tessellation_customdata().

Referenced by BKE_mesh_update_customdata_pointers().

◆ poly_find_loop_from_vert()

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

Definition at line 1513 of file mesh.cc.

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,
uint  vert,
uint  r_adj[2] 
)

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

Variable Documentation

◆ IDType_ID_ME

IDTypeInfo IDType_ID_ME
Initial value:
= {
sizeof(Mesh),
"Mesh",
"meshes",
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
}
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
Definition: BKE_idtype.h:39
#define BLT_I18NCONTEXT_ID_MESH
@ INDEX_ID_ME
Definition: DNA_ID.h:1026
#define FILTER_ID_ME
Definition: DNA_ID.h:913
@ ID_ME
Definition: DNA_ID_enums.h:48
struct Mesh Mesh
static void mesh_read_expand(BlendExpander *expander, ID *id)
Definition: mesh.cc:353
static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address)
Definition: mesh.cc:213
static void mesh_foreach_path(ID *id, BPathForeachPathData *bpath_data)
Definition: mesh.cc:205
static void mesh_blend_read_lib(BlendLibReader *reader, ID *id)
Definition: mesh.cc:335
static void mesh_free_data(ID *id)
Definition: mesh.cc:182
static void mesh_blend_read_data(BlendDataReader *reader, ID *id)
Definition: mesh.cc:279
static void mesh_init_data(ID *id)
Definition: mesh.cc:70
static void mesh_foreach_id(ID *id, LibraryForeachIDData *data)
Definition: mesh.cc:195
static void mesh_copy_data(Main *bmain, ID *id_dst, const ID *id_src, const int flag)
Definition: mesh.cc:93

Definition at line 364 of file mesh.cc.

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