Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-09-23 15:36:45 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-09-23 17:27:03 +0300
commit5c89c689db5c68602aecb55a0a7891059021eeaf (patch)
treecbd13e57001168e00ee6b1f53b2b59381f269ca3 /source
parent8634c4646ead98db1c6a1a76393a77f911b50cab (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')
-rw-r--r--source/blender/blenkernel/BKE_editmesh.h7
-rw-r--r--source/blender/blenkernel/intern/editmesh.c21
-rw-r--r--source/blender/draw/engines/select/select_draw_utils.c3
-rw-r--r--source/blender/editors/transform/transform_snap_object.c2
4 files changed, 29 insertions, 4 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;
+}
diff --git a/source/blender/draw/engines/select/select_draw_utils.c b/source/blender/draw/engines/select/select_draw_utils.c
index 0203b6cbebf..f1d008c29c7 100644
--- a/source/blender/draw/engines/select/select_draw_utils.c
+++ b/source/blender/draw/engines/select/select_draw_utils.c
@@ -49,8 +49,7 @@ void select_id_object_min_max(Object *obj, float r_min[3], float r_max[3])
BoundBox *bb;
BMEditMesh *em = BKE_editmesh_from_object(obj);
if (em) {
- /* Use Object Texture Space. */
- bb = BKE_mesh_texspace_get(em->mesh_eval_cage, NULL, NULL, NULL);
+ bb = BKE_editmesh_cage_boundbox_get(em);
}
else {
bb = BKE_object_boundbox_get(obj);
diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c
index 9c2642a46c1..1601acb1c8f 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -1717,7 +1717,7 @@ static short snapCurve(SnapData *snapdata,
if (use_obedit == false) {
/* Test BoundBox */
- BoundBox *bb = BKE_curve_texspace_get(cu, NULL, NULL, NULL);
+ BoundBox *bb = BKE_curve_boundbox_get(ob);
if (bb && !snap_bound_box_check_dist(
bb->vec[0], bb->vec[6], lpmat, snapdata->win_size, snapdata->mval, dist_px_sq)) {
return 0;