Blender V4.5
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_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.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_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 "DEG_depsgraph.hh"
#include "DEG_depsgraph_query.hh"
#include "BLO_read_write.hh"

Go to the source code of this file.

Classes

class  VArray< T >

Namespaces

namespace  blender
namespace  blender::bke

Macros

#define DNA_DEPRECATED_ALLOW
#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 rename_seam_layer_to_old_name (const ListBase vertex_groups, const Span< CustomDataLayer > vert_layers, MutableSpan< CustomDataLayer > edge_layers, const Span< CustomDataLayer > face_layers, const Span< CustomDataLayer > corner_layers)
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 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::transform_positions (MutableSpan< float3 > positions, const float4x4 &matrix)
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, eCustomDataType data_type)
void blender::bke::mesh_ensure_required_data_layers (Mesh &mesh)
void blender::bke::mesh_remove_invalid_attribute_strings (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().

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

References ELEM.

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

References BKE_mesh_runtime_clear_cache(), and mesh_clear_geometry().

Referenced by BM_mesh_bm_to_me(), ED_mesh_join_objects_exec(), 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 703 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 1699 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 1081 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 1087 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 1221 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_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 577 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 1666 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 1653 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 862 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::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::io::fbx::import_meshes(), 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 1202 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 )

Definition at line 1148 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 690 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 667 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()

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

◆ mesh_free_data()

◆ mesh_init_data()

◆ mesh_tessface_clear_intern()

void mesh_tessface_clear_intern ( Mesh * mesh,
int free_customdata )
static

◆ rename_seam_layer_to_old_name()

void rename_seam_layer_to_old_name ( const ListBase vertex_groups,
const Span< CustomDataLayer > vert_layers,
MutableSpan< CustomDataLayer > edge_layers,
const Span< CustomDataLayer > face_layers,
const Span< CustomDataLayer > corner_layers )
static

◆ use_bmesh_material_indices()

bool use_bmesh_material_indices ( const Mesh & mesh)
static

Definition at line 1417 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:44
#define BLT_I18NCONTEXT_ID_MESH
@ INDEX_ID_ME
Definition DNA_ID.h:1234
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 FILTER_ID_MA
#define FILTER_ID_ME
#define FILTER_ID_KE
#define FILTER_ID_IM
#define N_(msgid)

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