18 const std::optional<BMCustomDataCopyMap> &cd_vert_map,
22 if (cd_vert_map.has_value()) {
32 const std::optional<BMCustomDataCopyMap> &cd_edge_map,
39 if (cd_edge_map.has_value()) {
49 const std::optional<BMCustomDataCopyMap> cd_face_map,
50 const std::optional<BMCustomDataCopyMap> &cd_loop_map,
58 BMLoop *l_iter_src, *l_iter_dst, *l_first_src;
64 l_iter_src = l_first_src;
70 }
while ((l_iter_src = l_iter_src->
next) != l_first_src);
76 if (cd_face_map.has_value()) {
84 l_iter_src = l_first_src;
87 if (cd_loop_map.has_value()) {
93 }
while ((
void)(l_iter_dst = l_iter_dst->
next), (l_iter_src = l_iter_src->
next) != l_first_src);
107 const std::optional<BMCustomDataCopyMap> cd_vert_map =
108 (bm_src == bm_dst) ? std::nullopt :
109 std::optional<BMCustomDataCopyMap>{
111 const std::optional<BMCustomDataCopyMap> cd_edge_map =
112 (bm_src == bm_dst) ? std::nullopt :
113 std::optional<BMCustomDataCopyMap>{
115 const std::optional<BMCustomDataCopyMap> cd_face_map =
116 (bm_src == bm_dst) ? std::nullopt :
117 std::optional<BMCustomDataCopyMap>{
119 const std::optional<BMCustomDataCopyMap> cd_loop_map =
120 (bm_src == bm_dst) ? std::nullopt :
121 std::optional<BMCustomDataCopyMap>{
126 MEM_mallocN(
sizeof(*verts_dst) * verts_src_len, __func__));
127 for (
uint i = 0; i < verts_src_len; i++) {
128 BMVert *v_src = verts_src[i];
133 verts_dst[i] = v_dst;
140 MEM_mallocN(
sizeof(*edges_dst) * edges_src_len, __func__));
141 for (
uint i = 0; i < edges_src_len; i++) {
142 BMEdge *e_src = edges_src[i];
147 edges_dst[i] = e_dst;
153 for (
uint i = 0; i < faces_src_len; i++) {
154 BMFace *f_src = faces_src[i];
156 bm_dst, cd_face_map, cd_loop_map, f_src, verts_dst, edges_dst);
BMCustomDataCopyMap CustomData_bmesh_copy_map_calc(const CustomData &src, const CustomData &dst, eCustomDataMask mask_exclude=0)
#define BLI_array_alloca(arr, realsize)
Read Guarded memory(de)allocation.
#define BM_FACE_FIRST_LOOP(p)
void BM_elem_attrs_copy(BMesh *bm, const BMCustomDataCopyMap &map, const BMVert *src, BMVert *dst)
BMFace * BM_face_create(BMesh *bm, BMVert *const *verts, BMEdge *const *edges, const int len, const BMFace *f_example, const eBMCreateFlag create_flag)
BMVert * BM_vert_create(BMesh *bm, const float co[3], const BMVert *v_example, const eBMCreateFlag create_flag)
Main function for creating a new vertex.
BMEdge * BM_edge_create(BMesh *bm, BMVert *v1, BMVert *v2, const BMEdge *e_example, const eBMCreateFlag create_flag)
Main function for creating a new edge.
#define BM_elem_index_get(ele)
#define BM_elem_index_set(ele, index)
void BM_mesh_copy_arrays(BMesh *bm_src, BMesh *bm_dst, BMVert **verts_src, uint verts_src_len, BMEdge **edges_src, uint edges_src_len, BMFace **faces_src, uint faces_src_len)
static BMFace * bm_face_copy_with_arrays(BMesh *bm_dst, const std::optional< BMCustomDataCopyMap > cd_face_map, const std::optional< BMCustomDataCopyMap > &cd_loop_map, BMFace *f_src, BMVert **verts_dst, BMEdge **edges_dst)
static BMVert * bm_vert_copy(BMesh *bm_dst, const std::optional< BMCustomDataCopyMap > &cd_vert_map, BMVert *v_src)
static BMEdge * bm_edge_copy_with_arrays(BMesh *bm_dst, const std::optional< BMCustomDataCopyMap > &cd_edge_map, BMEdge *e_src, BMVert **verts_dst)
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)