diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-06-17 07:56:39 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-06-17 08:08:19 +0300 |
commit | 6db290641e0ece4d8353638036211b45c2880604 (patch) | |
tree | a671b13ad7daf53772f4e03567b5bbd5194c9b94 /source/blender/blenkernel/intern/mesh.c | |
parent | 286bd874453879e712d147708b7b508c98319056 (diff) |
Cleanup: split BKE_mesh_copy_settings into two functions
- BKE_mesh_copy_parameters_for_eval to be used for evaluated meshes only
as it doesn't handle ID user-counts.
- BKE_mesh_copy_parameters is a general function for copying parameters
between meshes.
Diffstat (limited to 'source/blender/blenkernel/intern/mesh.c')
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 0b843c3a97a..b38bbc425fc 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -900,9 +900,11 @@ Mesh *BKE_mesh_new_nomain( return mesh; } -/* Copy user editable settings that we want to preserve through the modifier stack - * or operations where a mesh with new topology is created based on another mesh. */ -void BKE_mesh_copy_settings(Mesh *me_dst, const Mesh *me_src) +/** + * Copy user editable settings that we want to preserve + * when a new mesh is based on an existing mesh. + */ +void BKE_mesh_copy_parameters(Mesh *me_dst, const Mesh *me_src) { /* Copy general settings. */ me_dst->editflag = me_src->editflag; @@ -920,6 +922,20 @@ void BKE_mesh_copy_settings(Mesh *me_dst, const Mesh *me_src) me_dst->texflag = me_src->texflag; copy_v3_v3(me_dst->loc, me_src->loc); copy_v3_v3(me_dst->size, me_src->size); +} + +/** + * A version of #BKE_mesh_copy_parameters that is intended for evaluated output + * (the modifier stack for example). + * + * \warning User counts are not handled for ID's. + */ +void BKE_mesh_copy_parameters_for_eval(Mesh *me_dst, const Mesh *me_src) +{ + /* User counts aren't handled, don't copy into a mesh from #G_MAIN. */ + BLI_assert(me_dst->id.tag & (LIB_TAG_NO_MAIN | LIB_TAG_COPIED_ON_WRITE)); + + BKE_mesh_copy_parameters(me_dst, me_src); /* Copy materials. */ if (me_dst->mat != NULL) { @@ -951,7 +967,7 @@ Mesh *BKE_mesh_new_nomain_from_template_ex(const Mesh *me_src, me_dst->totpoly = polys_len; me_dst->cd_flag = me_src->cd_flag; - BKE_mesh_copy_settings(me_dst, me_src); + BKE_mesh_copy_parameters_for_eval(me_dst, me_src); CustomData_copy(&me_src->vdata, &me_dst->vdata, mask.vmask, CD_CALLOC, verts_len); CustomData_copy(&me_src->edata, &me_dst->edata, mask.emask, CD_CALLOC, edges_len); @@ -1038,7 +1054,7 @@ Mesh *BKE_mesh_from_bmesh_nomain(BMesh *bm, BLI_assert(params->calc_object_remap == false); Mesh *mesh = BKE_id_new_nomain(ID_ME, NULL); BM_mesh_bm_to_me(NULL, bm, mesh, params); - BKE_mesh_copy_settings(mesh, me_settings); + BKE_mesh_copy_parameters_for_eval(mesh, me_settings); return mesh; } @@ -1048,7 +1064,7 @@ Mesh *BKE_mesh_from_bmesh_for_eval_nomain(BMesh *bm, { Mesh *mesh = BKE_id_new_nomain(ID_ME, NULL); BM_mesh_bm_to_me_for_eval(bm, mesh, cd_mask_extra); - BKE_mesh_copy_settings(mesh, me_settings); + BKE_mesh_copy_parameters_for_eval(mesh, me_settings); return mesh; } |