diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-09-23 15:36:45 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2019-09-23 17:27:03 +0300 |
commit | 5c89c689db5c68602aecb55a0a7891059021eeaf (patch) | |
tree | cbd13e57001168e00ee6b1f53b2b59381f269ca3 /source/blender/blenkernel | |
parent | 8634c4646ead98db1c6a1a76393a77f911b50cab (diff) |
Fix selection and snapping misusing texture space as boundbox
This fixes the regression from T70103 introduced by the fix for T70103.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_editmesh.h | 7 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/editmesh.c | 21 |
2 files changed, 27 insertions, 1 deletions
diff --git a/source/blender/blenkernel/BKE_editmesh.h b/source/blender/blenkernel/BKE_editmesh.h index 062968eddfc..37d84563402 100644 --- a/source/blender/blenkernel/BKE_editmesh.h +++ b/source/blender/blenkernel/BKE_editmesh.h @@ -28,8 +28,9 @@ #include "BKE_customdata.h" #include "bmesh.h" -struct BMLoop; struct BMesh; +struct BMLoop; +struct BoundBox; struct Depsgraph; struct EditMeshData; struct Mesh; @@ -59,6 +60,9 @@ typedef struct BMEditMesh { struct Mesh *mesh_eval_final, *mesh_eval_cage; + /** Cached cage bounding box for selection. */ + struct BoundBox *bb_cage; + /*derivedmesh stuff*/ CustomData_MeshMasks lastDataMask; unsigned char (*derivedVertColor)[4]; @@ -90,6 +94,7 @@ void BKE_editmesh_color_ensure(BMEditMesh *em, const char htype); float (*BKE_editmesh_vert_coords_alloc_orco(BMEditMesh *em, int *r_vert_len))[3]; void BKE_editmesh_lnorspace_update(BMEditMesh *em); void BKE_editmesh_ensure_autosmooth(BMEditMesh *em); +struct BoundBox *BKE_editmesh_cage_boundbox_get(BMEditMesh *em); /* editderivedmesh.c */ /* should really be defined in editmesh.c, but they use 'EditDerivedBMesh' */ diff --git a/source/blender/blenkernel/intern/editmesh.c b/source/blender/blenkernel/intern/editmesh.c index 866c494d354..d929c953b89 100644 --- a/source/blender/blenkernel/intern/editmesh.c +++ b/source/blender/blenkernel/intern/editmesh.c @@ -32,6 +32,8 @@ #include "BKE_editmesh.h" #include "BKE_cdderivedmesh.h" #include "BKE_library.h" +#include "BKE_mesh.h" +#include "BKE_object.h" BMEditMesh *BKE_editmesh_create(BMesh *bm, const bool do_tessellate) { @@ -51,6 +53,7 @@ BMEditMesh *BKE_editmesh_copy(BMEditMesh *em) *em_copy = *em; em_copy->mesh_eval_cage = em_copy->mesh_eval_final = NULL; + em_copy->bb_cage = NULL; em_copy->derivedVertColor = NULL; em_copy->derivedVertColorLen = 0; @@ -151,6 +154,8 @@ void BKE_editmesh_free_derivedmesh(BMEditMesh *em) BKE_id_free(NULL, em->mesh_eval_final); } em->mesh_eval_cage = em->mesh_eval_final = NULL; + + MEM_SAFE_FREE(em->bb_cage); } /*does not free the BMEditMesh struct itself*/ @@ -257,3 +262,19 @@ void BKE_editmesh_ensure_autosmooth(BMEditMesh *em) BKE_editmesh_lnorspace_update(em); } } + +BoundBox *BKE_editmesh_cage_boundbox_get(BMEditMesh *em) +{ + if (em->bb_cage == NULL) { + float min[3], max[3]; + INIT_MINMAX(min, max); + if (em->mesh_eval_cage) { + BKE_mesh_minmax(em->mesh_eval_cage, min, max); + } + + em->bb_cage = MEM_callocN(sizeof(BoundBox), "BMEditMesh.bb_cage"); + BKE_boundbox_init_from_minmax(em->bb_cage, min, max); + } + + return em->bb_cage; +} |