Blender V5.0
mesh.cc File Reference
#include <optional>
#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_array_utils.hh"
#include "BLI_bounds.hh"
#include "BLI_hash.h"
#include "BLI_implicit_sharing.hh"
#include "BLI_index_range.hh"
#include "BLI_listbase.h"
#include "BLI_math_matrix.hh"
#include "BLI_math_vector.h"
#include "BLI_math_vector.hh"
#include "BLI_memory_counter.hh"
#include "BLI_resource_scope.hh"
#include "BLI_set.hh"
#include "BLI_span.hh"
#include "BLI_string.h"
#include "BLI_task.hh"
#include "BLI_time.h"
#include "BLI_utildefines.h"
#include "BLI_vector.hh"
#include "BLI_virtual_array.hh"
#include "BLT_translation.hh"
#include "BKE_anim_data.hh"
#include "BKE_anonymous_attribute_id.hh"
#include "BKE_attribute.hh"
#include "BKE_attribute_legacy_convert.hh"
#include "BKE_attribute_math.hh"
#include "BKE_attribute_storage.hh"
#include "BKE_attribute_storage_blend_write.hh"
#include "BKE_bake_data_block_id.hh"
#include "BKE_bpath.hh"
#include "BKE_deform.hh"
#include "BKE_editmesh.hh"
#include "BKE_editmesh_cache.hh"
#include "BKE_global.hh"
#include "BKE_idtype.hh"
#include "BKE_key.hh"
#include "BKE_lib_id.hh"
#include "BKE_lib_query.hh"
#include "BKE_main.hh"
#include "BKE_material.hh"
#include "BKE_mesh.hh"
#include "BKE_mesh_legacy_convert.hh"
#include "BKE_mesh_runtime.hh"
#include "BKE_mesh_wrapper.hh"
#include "BKE_modifier.hh"
#include "BKE_multires.hh"
#include "BKE_object.hh"
#include "BKE_paint_bvh.hh"
#include "DEG_depsgraph.hh"
#include "DEG_depsgraph_query.hh"
#include "BLO_read_write.hh"

Go to the source code of this file.

Classes

struct  blender::bke::NonContiguousGroup
class  VArray< T >

Namespaces

namespace  blender
namespace  blender::bke

Macros

#define DNA_DEPRECATED_ALLOW
#define STACK_FIXED_DEPTH   100
#define MAT_NR_REMAP(n)

Typedefs

using float3
using int2

Functions

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, std::optional< Library * > owner_library, 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_foreach_path (ID *id, BPathForeachPathData *bpath_data)
static void mesh_foreach_working_space_color (ID *id, const IDTypeForeachColorFunctionCallback &fn)
static void mesh_blend_write (BlendWriter *writer, ID *id, const void *id_address)
static void mesh_blend_read_data (BlendDataReader *reader, ID *id)
bool BKE_mesh_attribute_required (const StringRef name)
void BKE_mesh_ensure_skin_customdata (Mesh *mesh)
bool BKE_mesh_has_custom_loop_normals (Mesh *mesh)
static bool blender::bke::meta_data_matches (const std::optional< bke::AttributeMetaData > meta_data, const AttrDomainMask domains, const eCustomDataMask types)
static Bounds< float3blender::bke::merge_bounds (const Bounds< float3 > &a, const Bounds< float3 > &b)
static Bounds< float3blender::bke::negative_bounds ()
static void blender::bke::partition_faces_recursively (const Span< float3 > face_centers, MutableSpan< int > face_indices, Vector< NonContiguousGroup > &groups, int node_index, int depth, const std::optional< Bounds< float3 > > &bounds_precalc, const Span< int > material_indices, int target_group_size)
static void blender::bke::build_vertex_groups_for_leaves (const int verts_num, const OffsetIndices< int > faces, const Span< int > corner_verts, Vector< NonContiguousGroup > &groups)
static Vector< NonContiguousGroupblender::bke::compute_local_mesh_groups (Mesh &mesh)
static void mesh_clear_geometry (Mesh &mesh)
static void clear_attribute_names (Mesh &mesh)
void BKE_mesh_clear_geometry (Mesh *mesh)
void BKE_mesh_clear_geometry_and_metadata (Mesh *mesh)
MeshBKE_mesh_add (Main *bmain, const char *name)
void BKE_mesh_face_offsets_ensure_alloc (Mesh *mesh)
MeshBKE_mesh_new_nomain (const int verts_num, const int edges_num, const int faces_num, const int corners_num)
static void copy_attribute_names (const Mesh &mesh_src, Mesh &mesh_dst)
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, const int verts_num, const int edges_num, const int tessface_num, const int faces_num, const int corners_num, const CustomData_MeshMasks mask)
MeshBKE_mesh_new_nomain_from_template (const Mesh *me_src, const int verts_num, const int edges_num, const int faces_num, const int corners_num)
MeshBKE_mesh_copy_for_eval (const Mesh &source)
BMeshBKE_mesh_to_bmesh_ex (const Mesh *mesh, const BMeshCreateParams *create_params, const BMeshFromMeshParams *convert_params)
BMeshBKE_mesh_to_bmesh (Mesh *mesh, const int active_shapekey, const bool add_key_index, const BMeshCreateParams *params)
MeshBKE_mesh_from_bmesh_nomain (BMesh *bm, const 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)
void BKE_mesh_texspace_calc (Mesh *mesh)
void BKE_mesh_texspace_ensure (Mesh *mesh)
void BKE_mesh_texspace_get (Mesh *mesh, float r_texspace_location[3], float r_texspace_size[3])
void BKE_mesh_texspace_get_reference (Mesh *mesh, char **r_texspace_flag, float **r_texspace_location, float **r_texspace_size)
blender::Array< float3BKE_mesh_orco_verts_get (const Object *ob)
void BKE_mesh_orco_verts_transform (Mesh *mesh, MutableSpan< float3 > orco, const bool invert)
void BKE_mesh_orco_verts_transform (Mesh *mesh, float(*orco)[3], int totvert, bool 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 *mesh)
void BKE_mesh_material_index_remove (Mesh *mesh, short index)
bool BKE_mesh_material_index_used (Mesh *mesh, short index)
void BKE_mesh_material_index_clear (Mesh *mesh)
void BKE_mesh_material_remap (Mesh *mesh, const uint *remap, uint remap_len)
static bool use_bmesh_material_indices (const Mesh &mesh)
static void blender::bke::translate_positions (MutableSpan< float3 > positions, const float3 &translation)
void BKE_mesh_tessface_clear (Mesh *mesh)
void BKE_mesh_mselect_clear (Mesh *mesh)
void BKE_mesh_mselect_validate (Mesh *mesh)
int BKE_mesh_mselect_find (const Mesh *mesh, int index, int type)
int BKE_mesh_mselect_active_get (const Mesh *mesh, int type)
void BKE_mesh_mselect_active_set (Mesh *mesh, int index, int type)
void BKE_mesh_count_selected_items (const Mesh *mesh, int r_count[3])
void BKE_mesh_eval_geometry (Depsgraph *depsgraph, Mesh *mesh)
Topology Queries
void blender::bke::mesh_ensure_default_color_attribute_on_add (Mesh &mesh, StringRef id, AttrDomain domain, bke::AttrType data_type)
void blender::bke::mesh_ensure_required_data_layers (Mesh &mesh)
void blender::bke::mesh_remove_invalid_attribute_strings (Mesh &mesh)
void blender::bke::mesh_apply_spatial_organization (Mesh &mesh)
Meshblender::bke::mesh_new_no_attributes (int verts_num, int edges_num, int faces_num, int corners_num)
void blender::bke::mesh_smooth_set (Mesh &mesh, bool use_smooth, bool keep_sharp_edges=false)
void blender::bke::mesh_sharp_edges_set_from_angle (Mesh &mesh, float angle, bool keep_sharp_edges=false)
void blender::bke::mesh_translate (Mesh &mesh, const float3 &translation, bool do_shape_keys)
void blender::bke::mesh_transform (Mesh &mesh, const float4x4 &transform, bool do_shape_keys)

Variables

IDTypeInfo IDType_ID_ME

Macro Definition Documentation

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

Definition at line 14 of file blenkernel/intern/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)

Referenced by BKE_mesh_material_remap().

◆ STACK_FIXED_DEPTH

#define STACK_FIXED_DEPTH   100

Using STACK_FIXED_DEPTH to keep the implementation in line with pbvh.cc.

Definition at line 79 of file blenkernel/intern/mesh.cc.

Referenced by blender::bke::pbvh::build_nodes_recursive_grids(), blender::bke::pbvh::build_nodes_recursive_mesh(), and blender::bke::partition_faces_recursively().

Typedef Documentation

◆ float3

Definition at line 619 of file BLI_math_vector_types.hh.

◆ int2

Definition at line 601 of file BLI_math_vector_types.hh.

Function Documentation

◆ BKE_mesh_add()

◆ BKE_mesh_assign_object()

◆ BKE_mesh_attribute_required()

bool BKE_mesh_attribute_required ( const StringRef name)

Definition at line 530 of file blenkernel/intern/mesh.cc.

References ELEM, and name.

Referenced by BKE_attribute_required().

◆ BKE_mesh_clear_geometry()

void BKE_mesh_clear_geometry ( Mesh * mesh)

Remove all geometry and derived data like caches from the mesh.

Definition at line 1053 of file blenkernel/intern/mesh.cc.

References BKE_mesh_runtime_clear_cache(), and mesh_clear_geometry().

Referenced by BM_mesh_bm_to_me(), and blender::ed::sculpt_paint::undo::restore_geometry_data().

◆ BKE_mesh_clear_geometry_and_metadata()

void BKE_mesh_clear_geometry_and_metadata ( Mesh * mesh)

Same as BKE_mesh_clear_geometry, but also clears attribute meta-data like active attribute names and vertex group names. Used when the geometry is entirely replaced.

Definition at line 1059 of file blenkernel/intern/mesh.cc.

References BKE_mesh_runtime_clear_cache(), clear_attribute_names(), and mesh_clear_geometry().

Referenced by BKE_mesh_nomain_to_mesh().

◆ BKE_mesh_copy_for_eval()

◆ BKE_mesh_copy_parameters()

◆ BKE_mesh_copy_parameters_for_eval()

◆ BKE_mesh_count_selected_items()

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

Definition at line 2046 of file blenkernel/intern/mesh.cc.

References bm.

◆ BKE_mesh_ensure_default_orig_index_customdata()

void BKE_mesh_ensure_default_orig_index_customdata ( 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 1437 of file blenkernel/intern/mesh.cc.

References BKE_mesh_ensure_default_orig_index_customdata_no_check(), BLI_assert, and ME_WRAPPER_TYPE_MDATA.

Referenced by blender::bke::create_orco_mesh(), and subdivide_edit_mesh().

◆ BKE_mesh_ensure_default_orig_index_customdata_no_check()

void BKE_mesh_ensure_default_orig_index_customdata_no_check ( 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 1443 of file blenkernel/intern/mesh.cc.

References ensure_orig_index_layer().

Referenced by BKE_mesh_ensure_default_orig_index_customdata(), and BKE_mesh_wrapper_ensure_mdata().

◆ BKE_mesh_ensure_skin_customdata()

◆ BKE_mesh_eval_geometry()

◆ BKE_mesh_face_offsets_ensure_alloc()

◆ BKE_mesh_from_bmesh_for_eval_nomain()

◆ BKE_mesh_from_bmesh_nomain()

◆ BKE_mesh_from_object()

Mesh * BKE_mesh_from_object ( Object * ob)

Definition at line 1577 of file blenkernel/intern/mesh.cc.

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

Referenced by blender::bke::build_pbvh_from_ccg(), do_paintface_box_select(), ED_object_texture_paint_mode_enter_ex(), ED_object_texture_paint_mode_exit_ex(), ED_paint_proj_mesh_data_check(), ED_wpaint_ensure_data(), blender::ed::sculpt_paint::boundary::ensure_boundary_info(), blender::ed::sculpt_paint::fill_active_color(), blender::ed::sculpt_paint::vwpaint::mode_enter_generic(), blender::ed::sculpt_paint::vwpaint::mode_exit_generic(), multires_force_external_reload(), multiresModifier_del_levels(), blender::ed::sculpt_paint::object_sculpt_mode_enter(), blender::ed::sculpt_paint::object_sculpt_mode_exit(), paint_proj_new_stroke(), paint_select_less_exec(), paint_select_more_exec(), paintface_deselect_all_visible(), paintface_flush_flags(), paintface_hide(), paintface_minmax(), paintface_mouse_select(), paintface_reveal(), paintface_select_linked(), paintface_select_loop(), paintvert_deselect_all_visible(), paintvert_flush_flags(), paintvert_hide(), paintvert_reveal(), paintvert_select_less_exec(), paintvert_select_linked(), paintvert_select_linked_vertices(), paintvert_select_more_exec(), paintvert_select_ungrouped(), blender::ed::object::quadriflow_remesh_exec(), vertex_color_brightness_contrast_exec(), vertex_color_hsv_exec(), vertex_color_invert_exec(), vertex_color_levels_exec(), vertex_color_set_exec(), vertex_color_smooth(), vertex_paint_from_weight(), vertex_weight_paint_mode_poll(), blender::ed::object::vgroup_selected_get(), vpaint_mode_toggle_exec(), vpaint_stroke_test_start(), weight_sample_group_invoke(), 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 ( Mesh * mesh)

High-level custom normals functions.

Definition at line 568 of file blenkernel/intern/mesh.cc.

References CD_PROP_INT16_2D, and CustomData_has_layer_named().

Referenced by mesh_customdata_custom_splitnormals_add_exec().

◆ BKE_mesh_material_index_clear()

void BKE_mesh_material_index_clear ( Mesh * mesh)

◆ BKE_mesh_material_index_remove()

◆ BKE_mesh_material_index_used()

◆ BKE_mesh_material_remap()

◆ BKE_mesh_mselect_active_get()

int BKE_mesh_mselect_active_get ( const Mesh * mesh,
int type )
Returns
The index of the active element.

Definition at line 2013 of file blenkernel/intern/mesh.cc.

References BLI_assert, ELEM, ME_ESEL, ME_FSEL, and ME_VSEL.

Referenced by ED_mesh_active_dvert_get_ob().

◆ BKE_mesh_mselect_active_set()

void BKE_mesh_mselect_active_set ( Mesh * mesh,
int index,
int type )

◆ BKE_mesh_mselect_clear()

void BKE_mesh_mselect_clear ( Mesh * mesh)

◆ BKE_mesh_mselect_find()

int BKE_mesh_mselect_find ( const Mesh * mesh,
int index,
int type )
Returns
the index within me->mselect, or -1

Definition at line 2000 of file blenkernel/intern/mesh.cc.

References BLI_assert, ELEM, i, ME_ESEL, ME_FSEL, and ME_VSEL.

Referenced by BKE_mesh_mselect_active_set().

◆ BKE_mesh_mselect_validate()

◆ BKE_mesh_new_nomain()

Mesh * BKE_mesh_new_nomain ( const int verts_num,
const int edges_num,
const int faces_num,
const int corners_num )

Definition at line 1218 of file blenkernel/intern/mesh.cc.

References BKE_idtype_idcode_to_name(), BKE_libblock_alloc(), BKE_libblock_init_empty(), BKE_mesh_face_offsets_ensure_alloc(), ID_ME, LIB_ID_CREATE_LOCALIZE, and blender::bke::mesh_ensure_required_data_layers().

Referenced by BKE_mball_polygonize(), BKE_modifier_deform_verts(), blender::ed::object::convert_curves_to_mesh(), blender::ed::object::convert_grease_pencil_to_mesh(), blender::ed::object::convert_mesh_to_mesh(), blender::io::ply::convert_ply_to_mesh(), blender::ed::object::convert_psys_to_mesh(), blender::nodes::node_geo_mesh_primitive_circle_cc::create_circle_mesh(), blender::geometry::create_cuboid_mesh(), blender::geometry::create_cylinder_or_cone_mesh(), create_empty_mesh(), blender::geometry::create_grid_mesh(), blender::geometry::create_line_mesh(), blender::io::obj::MeshFromGeometry::create_mesh(), blender::bke::tests::ArmatureDeformTestBase::create_test_mesh(), blender::geometry::create_uv_sphere_mesh(), blender::geometry::create_vertex_mesh(), curve_calc_modifiers_post(), blender::bke::curve_to_mesh_sweep(), 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::geometry::extract_mesh_edges(), blender::geometry::extract_mesh_faces(), blender::geometry::extract_mesh_vertices(), blender::ed::sculpt_paint::trim::generate_geometry(), blender::nodes::node_geo_points_to_vertices_cc::geometry_set_points_to_vertices(), get_quick_mesh(), hair_create_input_mesh(), blender::io::fbx::import_meshes(), blender::ed::mesh::join_objects_exec(), blender::bke::mesh_new_no_attributes(), mesh_nurbs_displist_to_mesh(), blender::bke::modifier_modify_mesh_and_geometry_set(), blender::modify_mesh(), blender::io::stl::read_stl_binary(), blender::ed::geometry::store_result_geometry(), blender::io::stl::STLMeshHelper::to_mesh(), and blender::bke::bake::try_load_mesh().

◆ BKE_mesh_new_nomain_from_template()

◆ BKE_mesh_new_nomain_from_template_ex()

◆ BKE_mesh_orco_ensure()

void BKE_mesh_orco_ensure ( Object * ob,
Mesh * mesh )

◆ BKE_mesh_orco_verts_get()

blender::Array< float3 > BKE_mesh_orco_verts_get ( const Object * ob)

◆ BKE_mesh_orco_verts_transform() [1/2]

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

Definition at line 1558 of file blenkernel/intern/mesh.cc.

References BKE_mesh_orco_verts_transform(), and invert().

◆ BKE_mesh_orco_verts_transform() [2/2]

void BKE_mesh_orco_verts_transform ( Mesh * mesh,
MutableSpan< float3 > orco,
const bool invert )

◆ BKE_mesh_tessface_clear()

◆ BKE_mesh_texspace_calc()

◆ BKE_mesh_texspace_ensure()

◆ BKE_mesh_texspace_get()

◆ BKE_mesh_texspace_get_reference()

void BKE_mesh_texspace_get_reference ( Mesh * mesh,
char ** r_texspace_flag,
float ** r_texspace_location,
float ** r_texspace_size )

Definition at line 1504 of file blenkernel/intern/mesh.cc.

References BKE_mesh_texspace_ensure().

Referenced by BKE_object_obdata_texspace_get().

◆ BKE_mesh_to_bmesh()

◆ BKE_mesh_to_bmesh_ex()

◆ clear_attribute_names()

void clear_attribute_names ( Mesh & mesh)
static

Definition at line 1046 of file blenkernel/intern/mesh.cc.

References BLI_freelistN(), and MEM_SAFE_FREE.

Referenced by BKE_mesh_clear_geometry_and_metadata().

◆ copy_attribute_names()

void copy_attribute_names ( const Mesh & mesh_src,
Mesh & mesh_dst )
static

◆ ensure_orig_index_layer()

void ensure_orig_index_layer ( CustomData & data,
const int size )
static

◆ mesh_blend_read_data()

◆ mesh_blend_write()

◆ mesh_clear_geometry()

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 object's mode, which crashes when called in edit-mode. See: #90972.

Definition at line 1023 of file blenkernel/intern/mesh.cc.

References CustomData_free(), blender::implicit_sharing::free_shared_data(), and MEM_SAFE_FREE.

Referenced by BKE_mesh_clear_geometry(), and BKE_mesh_clear_geometry_and_metadata().

◆ mesh_copy_data()

◆ mesh_foreach_id()

void mesh_foreach_id ( ID * id,
LibraryForeachIDData * data )
static

◆ mesh_foreach_path()

void mesh_foreach_path ( ID * id,
BPathForeachPathData * bpath_data )
static

◆ mesh_foreach_working_space_color()

◆ mesh_free_data()

◆ mesh_init_data()

◆ mesh_tessface_clear_intern()

void mesh_tessface_clear_intern ( Mesh * mesh,
int free_customdata )
static

◆ use_bmesh_material_indices()

bool use_bmesh_material_indices ( const Mesh & mesh)
static

Definition at line 1773 of file blenkernel/intern/mesh.cc.

References ME_WRAPPER_TYPE_BMESH.

Variable Documentation

◆ IDType_ID_ME

IDTypeInfo IDType_ID_ME
Initial value:
= {
Mesh::id_type,
sizeof(Mesh),
"Mesh",
N_("meshes"),
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
}
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
Definition BKE_idtype.hh:47
#define BLT_I18NCONTEXT_ID_MESH
#define FILTER_ID_MA
Definition DNA_ID.h:1208
#define FILTER_ID_ME
Definition DNA_ID.h:1211
@ INDEX_ID_ME
Definition DNA_ID.h:1325
#define FILTER_ID_KE
Definition DNA_ID.h:1232
#define FILTER_ID_IM
Definition DNA_ID.h:1204
static void mesh_blend_write(BlendWriter *writer, ID *id, const void *id_address)
static void mesh_foreach_path(ID *id, BPathForeachPathData *bpath_data)
static void mesh_foreach_working_space_color(ID *id, const IDTypeForeachColorFunctionCallback &fn)
static void mesh_free_data(ID *id)
static void mesh_blend_read_data(BlendDataReader *reader, ID *id)
static void mesh_init_data(ID *id)
static void mesh_foreach_id(ID *id, LibraryForeachIDData *data)
static void mesh_copy_data(Main *bmain, std::optional< Library * > owner_library, ID *id_dst, const ID *id_src, const int flag)
#define N_(msgid)

Definition at line 499 of file blenkernel/intern/mesh.cc.