Blender V5.0
bmesh_interp.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
10
11#include "BLI_string_ref.hh"
12
13#include "bmesh_class.hh"
14
15struct LinkNode;
16struct MemArena;
17
18namespace blender::bke {
19enum class AttrDomain : int8_t;
20enum class AttrType : int16_t;
21} // namespace blender::bke
22
24 BMLoop *l_dst,
25 const BMFace *f_src,
26 const float f_dst_center[3],
27 const float f_src_center[3],
28 int cd_loop_mdisp_offset);
32void BM_loop_interp_multires(BMesh *bm, BMLoop *l_dst, const BMFace *f_src);
33
35 BMFace *f_dst,
36 const BMFace *f_src,
37 const float f_dst_center[3],
38 const float f_src_center[3],
39 int cd_loop_mdisp_offset);
40void BM_face_interp_multires(BMesh *bm, BMFace *f_dst, const BMFace *f_src);
41
42void BM_vert_interp_from_face(BMesh *bm, BMVert *v_dst, const BMFace *f_src);
43
52 BMesh *bm, const BMVert *v_src_1, const BMVert *v_src_2, BMVert *v_dst, float fac);
61 BMesh *bm, const BMEdge *e_src_1, const BMEdge *e_src_2, BMEdge *e_dst, float fac);
69 BMesh *bm, const BMVert *v_src_1, const BMVert *v_src_2, BMVert *v, BMEdge *e, float fac);
70void BM_data_layer_add(BMesh *bm, CustomData *data, int type);
74 const CustomData *data,
75 int type,
77void BM_data_layer_free(BMesh *bm, CustomData *data, int type);
78
81
84
89void BM_data_layer_free_n(BMesh *bm, CustomData *data, int type, int n);
90void BM_data_layer_copy(BMesh *bm, CustomData *data, int type, int src_n, int dst_n);
91
92/* See #BM_data_layer_lookup. */
94 const int offset = -1;
97 operator bool() const
98 {
99 return offset != -1;
100 }
101};
102
109
110float BM_elem_float_data_get(CustomData *cd, void *element, int type);
111void BM_elem_float_data_set(CustomData *cd, void *element, int type, float val);
112
123 BMFace *f_dst,
124 const BMFace *f_src,
125 bool do_vertex,
126 const void **blocks,
127 const void **blocks_v,
128 float (*cos_2d)[2],
129 float axis_mat[3][3]);
130void BM_face_interp_from_face(BMesh *bm, BMFace *f_dst, const BMFace *f_src, bool do_vertex);
137 BMesh *bm, BMLoop *l_dst, const BMFace *f_src, bool do_vertex, bool do_multires);
138
144
146 BMesh *bm, BMVert *v, int layer_n, const float *loop_weights, MemArena *arena);
150void BM_vert_loop_groups_data_layer_merge(BMesh *bm, LinkNode *groups, int layer_n);
156 LinkNode *groups,
157 int layer_n,
158 const float *loop_weights);
void BM_face_interp_multires(BMesh *bm, BMFace *f_dst, const BMFace *f_src)
BMDataLayerLookup BM_data_layer_lookup(const BMesh &bm, const blender::StringRef name)
void BM_data_layer_free_n(BMesh *bm, CustomData *data, int type, int n)
void BM_data_layer_free(BMesh *bm, CustomData *data, int type)
float BM_elem_float_data_get(CustomData *cd, void *element, int type)
LinkNode * BM_vert_loop_groups_data_layer_create(BMesh *bm, BMVert *v, int layer_n, const float *loop_weights, MemArena *arena)
void BM_face_interp_multires_ex(BMesh *bm, BMFace *f_dst, const BMFace *f_src, const float f_dst_center[3], const float f_src_center[3], int cd_loop_mdisp_offset)
void BM_vert_interp_from_face(BMesh *bm, BMVert *v_dst, const BMFace *f_src)
void BM_data_layer_add_named(BMesh *bm, CustomData *data, int type, blender::StringRef name)
bool BM_data_layer_free_named(BMesh *bm, CustomData *data, blender::StringRef name)
bool BM_data_layer_has_named(const BMesh *bm, const CustomData *data, int type, blender::StringRef name)
void BM_face_interp_from_face(BMesh *bm, BMFace *f_dst, const BMFace *f_src, bool do_vertex)
void BM_data_layer_copy(BMesh *bm, CustomData *data, int type, int src_n, int dst_n)
void BM_loop_interp_multires_ex(BMesh *bm, BMLoop *l_dst, const BMFace *f_src, const float f_dst_center[3], const float f_src_center[3], int cd_loop_mdisp_offset)
void BM_loop_interp_multires(BMesh *bm, BMLoop *l_dst, const BMFace *f_src)
void BM_data_layer_add(BMesh *bm, CustomData *data, int type)
void BM_data_interp_face_vert_edge(BMesh *bm, const BMVert *v_src_1, const BMVert *v_src_2, BMVert *v, BMEdge *e, float fac)
Data Face-Vert Edge Interpolate.
void BM_uv_map_attr_pin_ensure_for_all_layers(BMesh *bm)
void BM_face_multires_bounds_smooth(BMesh *bm, BMFace *f)
bool BM_uv_map_attr_pin_exists(const BMesh *bm, blender::StringRef uv_map_name)
void BM_loop_interp_from_face(BMesh *bm, BMLoop *l_dst, const BMFace *f_src, bool do_vertex, bool do_multires)
void BM_uv_map_attr_pin_ensure_named(BMesh *bm, blender::StringRef uv_map_name)
void BM_data_layer_ensure_named(BMesh *bm, CustomData *data, int type, blender::StringRef name)
void BM_data_interp_from_verts(BMesh *bm, const BMVert *v_src_1, const BMVert *v_src_2, BMVert *v_dst, float fac)
Data, Interpolate From Verts.
void BM_face_interp_from_face_ex(BMesh *bm, BMFace *f_dst, const BMFace *f_src, bool do_vertex, const void **blocks, const void **blocks_v, float(*cos_2d)[2], float axis_mat[3][3])
Data Interpolate From Face.
void BM_elem_float_data_set(CustomData *cd, void *element, int type, float val)
void BM_vert_loop_groups_data_layer_merge_weights(BMesh *bm, LinkNode *groups, int layer_n, const float *loop_weights)
void BM_vert_loop_groups_data_layer_merge(BMesh *bm, LinkNode *groups, int layer_n)
void BM_data_interp_from_edges(BMesh *bm, const BMEdge *e_src_1, const BMEdge *e_src_2, BMEdge *e_dst, float fac)
Data, Interpolate From Edges.
BMesh const char void * data
BMesh * bm
ATTR_WARN_UNUSED_RESULT const void * element
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
const char * name
blender::bke::AttrType type
blender::bke::AttrDomain domain