diff options
Diffstat (limited to 'source/blender/blenkernel/intern/mesh.c')
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 374365cc58a..81214f3bb9c 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -576,6 +576,7 @@ void BKE_mesh_copy_data(Main *bmain, Mesh *me_dst, const Mesh *me_src, const int /* This is a direct copy of a main mesh, so for now it has the same topology. */ me_dst->runtime.deformed_only = 1; } + me_dst->runtime.is_original = false; me_dst->mselect = MEM_dupallocN(me_dst->mselect); me_dst->bb = MEM_dupallocN(me_dst->bb); @@ -685,7 +686,7 @@ static Mesh *mesh_new_nomain_from_template_ex( return me_dst; } -Mesh * BKE_mesh_new_nomain_from_template( +Mesh *BKE_mesh_new_nomain_from_template( const Mesh *me_src, int verts_len, int edges_len, int tessface_len, int loops_len, int polys_len) @@ -709,7 +710,7 @@ Mesh *BKE_mesh_copy_for_eval(struct Mesh *source, bool reference) } Mesh *result; - BKE_id_copy_ex( NULL, &source->id, (ID **)&result, flags, false); + BKE_id_copy_ex(NULL, &source->id, (ID **)&result, flags, false); return result; } @@ -748,7 +749,7 @@ BMesh *BKE_mesh_to_bmesh( }); } -Mesh *BKE_bmesh_to_mesh_nomain(BMesh *bm, const struct BMeshToMeshParams *params) +Mesh *BKE_mesh_from_bmesh_nomain(BMesh *bm, const struct BMeshToMeshParams *params) { BLI_assert(params->calc_object_remap == false); Mesh *mesh = BKE_id_new_nomain(ID_ME, NULL); @@ -756,6 +757,31 @@ Mesh *BKE_bmesh_to_mesh_nomain(BMesh *bm, const struct BMeshToMeshParams *params return mesh; } +Mesh *BKE_mesh_from_bmesh_for_eval_nomain(BMesh *bm, const int64_t cd_mask_extra) +{ + Mesh *mesh = BKE_id_new_nomain(ID_ME, NULL); + BM_mesh_bm_to_me_for_eval(bm, mesh, cd_mask_extra); + return mesh; +} + +/** + * TODO(campbell): support mesh with only an edit-mesh which is lazy initialized. + */ +Mesh *BKE_mesh_from_editmesh_with_coords_thin_wrap( + BMEditMesh *em, CustomDataMask data_mask, float (*vertexCos)[3]) +{ + Mesh *me = BKE_mesh_from_bmesh_for_eval_nomain(em->bm, data_mask); + /* Use editmesh directly where possible. */ + me->runtime.is_original = true; + if (vertexCos) { + /* We will own this array in the future. */ + BKE_mesh_apply_vert_coords(me, vertexCos); + MEM_freeN(vertexCos); + me->runtime.is_original = false; + } + return me; +} + void BKE_mesh_make_local(Main *bmain, Mesh *me, const bool lib_local) { BKE_id_make_local_generic(bmain, &me->id, true, lib_local); |