Blender V4.3
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_bounds.hh"
#include "BLI_endian_switch.h"
#include "BLI_ghash.h"
#include "BLI_hash.h"
#include "BLI_implicit_sharing.hh"
#include "BLI_index_range.hh"
#include "BLI_linklist.h"
#include "BLI_listbase.h"
#include "BLI_math_matrix.h"
#include "BLI_math_vector.hh"
#include "BLI_memarena.h"
#include "BLI_memory_counter.hh"
#include "BLI_ordered_edge.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_attribute.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.h"
#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 "DEG_depsgraph.hh"
#include "DEG_depsgraph_query.hh"
#include "BLO_read_write.hh"

Go to the source code of this file.

Namespaces

namespace  blender
 
namespace  blender::bke
 

Macros

#define DNA_DEPRECATED_ALLOW
 
#define MAT_NR_REMAP(n)
 

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)
 
void BKE_mesh_free_editmesh (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)
 
bool BKE_mesh_attribute_required (const char *name)
 
void BKE_mesh_ensure_skin_customdata (Mesh *mesh)
 
bool BKE_mesh_has_custom_loop_normals (Mesh *mesh)
 
void blender::bke::mesh_ensure_default_color_attribute_on_add (Mesh &mesh, StringRef id, AttrDomain domain, eCustomDataType data_type)
 
void blender::bke::mesh_ensure_required_data_layers (Mesh &mesh)
 
void BKE_mesh_free_data_for_undo (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)
 
Meshblender::bke::mesh_new_no_attributes (int verts_num, int edges_num, int faces_num, 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, Object *ob, 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)
 
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 BKE_mesh_transform (Mesh *mesh, const float mat[4][4], bool do_keys)
 
static void translate_positions (MutableSpan< float3 > positions, const float3 &translation)
 
void BKE_mesh_translate (Mesh *mesh, const float offset[3], const bool do_keys)
 
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)
 

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

Function Documentation

◆ BKE_mesh_add()

◆ BKE_mesh_assign_object()

◆ BKE_mesh_attribute_required()

bool BKE_mesh_attribute_required ( const char * name)

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

References ELEM.

Referenced by BKE_attribute_required().

◆ BKE_mesh_clear_geometry()

void BKE_mesh_clear_geometry ( Mesh * mesh)

◆ 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 555 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(), and mesh_free_data().

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

◆ 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 921 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 927 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_free_data_for_undo()

void BKE_mesh_free_data_for_undo ( Mesh * mesh)

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 503 of file blenkernel/intern/mesh.cc.

References mesh_free_data().

Referenced by undomesh_free_data().

◆ BKE_mesh_free_editmesh()

void BKE_mesh_free_editmesh ( Mesh * mesh)

◆ 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 1061 of file blenkernel/intern/mesh.cc.

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

Referenced by blender::ed::sculpt_paint::trim::apply_trim(), blender::bke::build_pbvh_from_ccg(), do_paintface_box_select(), ED_mesh_join_objects_exec(), 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 459 of file blenkernel/intern/mesh.cc.

References CD_CUSTOMLOOPNORMAL, and CustomData_has_layer().

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

bool BKE_mesh_material_index_used ( Mesh * mesh,
short index )

◆ BKE_mesh_material_remap()

void BKE_mesh_material_remap ( Mesh * mesh,
const uint * remap,
uint remap_len )

◆ 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 1410 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 1397 of file blenkernel/intern/mesh.cc.

References BLI_assert, ELEM, 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 704 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, mesh, and blender::bke::mesh_ensure_required_data_layers().

Referenced by BKE_mball_polygonize(), blender::io::ply::convert_ply_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::geometry::create_uv_sphere_mesh(), blender::geometry::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::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::bke::mesh_new_no_attributes(), mesh_nurbs_displist_to_mesh(), blender::bke::modifier_modify_mesh_and_geometry_set(), blender::modify_mesh(), blender::ed::object::object_convert_exec(), blender::io::stl::read_stl_binary(), 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 1042 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()

void BKE_mesh_texspace_get ( Mesh * mesh,
float r_texspace_location[3],
float r_texspace_size[3] )

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

◆ BKE_mesh_to_bmesh()

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

◆ BKE_mesh_to_bmesh_ex()

◆ BKE_mesh_transform()

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

◆ BKE_mesh_translate()

◆ clear_attribute_names()

static void clear_attribute_names ( Mesh & mesh)
static

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

References BLI_freelistN(), and MEM_SAFE_FREE.

Referenced by BKE_mesh_clear_geometry_and_metadata().

◆ copy_attribute_names()

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

◆ ensure_orig_index_layer()

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

◆ mesh_blend_read_data()

◆ mesh_blend_write()

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

Definition at line 520 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()

◆ mesh_foreach_path()

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

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

References BKE_bpath_foreach_path_fixed_process().

◆ mesh_free_data()

static void mesh_free_data ( ID * id)
static

◆ mesh_init_data()

◆ mesh_tessface_clear_intern()

static void mesh_tessface_clear_intern ( Mesh * mesh,
int free_customdata )
static

◆ translate_positions()

Variable Documentation

◆ IDType_ID_ME

IDTypeInfo IDType_ID_ME
Initial value:
= {
sizeof(Mesh),
"Mesh",
N_("meshes"),
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
}
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
Definition BKE_idtype.hh:39
#define BLT_I18NCONTEXT_ID_MESH
#define FILTER_ID_MA
Definition DNA_ID.h:1175
#define FILTER_ID_ME
Definition DNA_ID.h:1178
@ INDEX_ID_ME
Definition DNA_ID.h:1293
#define FILTER_ID_KE
Definition DNA_ID.h:1199
#define FILTER_ID_IM
Definition DNA_ID.h:1171
@ ID_ME
struct Mesh Mesh
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_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 391 of file blenkernel/intern/mesh.cc.