From 7926e8ea4c11e55c56b1d051e9ccb68dbfddb58b Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 21 Sep 2019 00:01:09 +0200 Subject: Revert "Modifiers: every modifier now copies mesh settings, fixing texture space issues" This reverts commit e7a514369fe700dcc5a1fe433c8f709ed9595ded, it introduces a bug in selection in edit mode. Fixes T70103: can't select extruded Vertex Ref T64739 --- source/blender/blenkernel/intern/mesh.c | 51 +++++++-------------------------- 1 file changed, 10 insertions(+), 41 deletions(-) (limited to 'source/blender/blenkernel/intern/mesh.c') diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 6c3c083b39a..c108ff90850 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -659,35 +659,6 @@ 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 general settings. */ - me_dst->editflag = me_src->editflag; - me_dst->flag = me_src->flag; - me_dst->smoothresh = me_src->smoothresh; - me_dst->remesh_voxel_size = me_src->remesh_voxel_size; - me_dst->remesh_mode = me_src->remesh_mode; - - /* Copy texture space. */ - me_dst->texflag = me_src->texflag; - if (me_dst->bb != NULL && me_dst->bb != me_src->bb) { - MEM_freeN(me_dst->bb); - } - me_dst->bb = MEM_dupallocN(me_src->bb); - copy_v3_v3(me_dst->loc, me_src->loc); - copy_v3_v3(me_dst->rot, me_src->rot); - copy_v3_v3(me_dst->size, me_src->size); - - /* Copy materials. */ - if (me_dst->mat != NULL && me_dst->mat != me_src->mat) { - MEM_freeN(me_dst->mat); - } - me_dst->mat = MEM_dupallocN(me_src->mat); - me_dst->totcol = me_src->totcol; -} - Mesh *BKE_mesh_new_nomain_from_template_ex(const Mesh *me_src, int verts_len, int edges_len, @@ -701,6 +672,7 @@ Mesh *BKE_mesh_new_nomain_from_template_ex(const Mesh *me_src, Mesh *me_dst = BKE_id_new_nomain(ID_ME, NULL); + me_dst->mat = MEM_dupallocN(me_src->mat); me_dst->mselect = MEM_dupallocN(me_dst->mselect); me_dst->totvert = verts_len; @@ -710,7 +682,8 @@ 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); + me_dst->editflag = me_src->editflag; + me_dst->texflag = me_src->texflag; 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); @@ -799,24 +772,18 @@ BMesh *BKE_mesh_to_bmesh(Mesh *me, }); } -Mesh *BKE_mesh_from_bmesh_nomain(BMesh *bm, - const struct BMeshToMeshParams *params, - const Mesh *me_settings) +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); BM_mesh_bm_to_me(NULL, bm, mesh, params); - BKE_mesh_copy_settings(mesh, me_settings); return mesh; } -Mesh *BKE_mesh_from_bmesh_for_eval_nomain(BMesh *bm, - const CustomData_MeshMasks *cd_mask_extra, - const Mesh *me_settings) +Mesh *BKE_mesh_from_bmesh_for_eval_nomain(BMesh *bm, const CustomData_MeshMasks *cd_mask_extra) { 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); return mesh; } @@ -825,10 +792,9 @@ Mesh *BKE_mesh_from_bmesh_for_eval_nomain(BMesh *bm, */ Mesh *BKE_mesh_from_editmesh_with_coords_thin_wrap(BMEditMesh *em, const CustomData_MeshMasks *data_mask, - float (*vertexCos)[3], - const Mesh *me_settings) + float (*vertexCos)[3]) { - Mesh *me = BKE_mesh_from_bmesh_for_eval_nomain(em->bm, data_mask, me_settings); + 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) { @@ -1983,6 +1949,9 @@ void BKE_mesh_eval_geometry(Depsgraph *depsgraph, Mesh *mesh) { DEG_debug_print_eval(depsgraph, __func__, mesh->id.name, mesh); BKE_mesh_texspace_calc(mesh); + /* Clear autospace flag in evaluated mesh, so that texspace does not get recomputed when bbox is + * (e.g. after modifiers, etc.) */ + mesh->texflag &= ~ME_AUTOSPACE; /* We are here because something did change in the mesh. This means we can not trust the existing * evaluated mesh, and we don't know what parts of the mesh did change. So we simply delete the * evaluated mesh and let objects to re-create it with updated settings. */ -- cgit v1.2.3