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
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2007-12-06 00:50:23 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2007-12-06 00:50:23 +0300
commit26b8892c9c6733e2716df4aa84d02e3ff5331735 (patch)
tree0d552b20e3678176c5b0a6a804d33b3c6de4be80 /source/blender/blenkernel
parentb0c01a414b0915ae73a704e4c676ab985be82a04 (diff)
Bugfix for mysteriously disappearing left eyeball. Bounding boxes
used for clipping were being stored in the mesh, but modifiers can result in two objects with the same mesh having a different bounding box. Solution is to store bounding box in the object.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_mesh.h2
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c12
-rw-r--r--source/blender/blenkernel/intern/mesh.c10
-rw-r--r--source/blender/blenkernel/intern/object.c4
4 files changed, 20 insertions, 8 deletions
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 1bba980c47b..556ba19d7d7 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -75,7 +75,7 @@ int update_realtime_texture(struct MTFace *tface, double time);
void mesh_delete_material_index(struct Mesh *me, int index);
void mesh_set_smooth_flag(struct Object *meshOb, int enableSmooth);
-struct BoundBox *mesh_get_bb(struct Mesh *me);
+struct BoundBox *mesh_get_bb(struct Object *ob);
void mesh_get_texspace(struct Mesh *me, float *loc_r, float *rot_r, float *size_r);
/* if old, it converts mface->edcode to edge drawflags */
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index e2e7b9dbd02..5af88633bad 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -2422,6 +2422,10 @@ static void clear_mesh_caches(Object *ob)
Mesh *me= ob->data;
/* also serves as signal to remake texspace */
+ if (ob->bb) {
+ MEM_freeN(ob->bb);
+ ob->bb = NULL;
+ }
if (me->bb) {
MEM_freeN(me->bb);
me->bb = NULL;
@@ -2477,7 +2481,9 @@ static void mesh_build_data(Object *ob, CustomDataMask dataMask)
ob->derivedFinal->getMinMax(ob->derivedFinal, min, max);
- boundbox_set_from_min_max(mesh_get_bb(ob->data), min, max);
+ if(!ob->bb)
+ ob->bb= MEM_mallocN(sizeof(BoundBox), "bb");
+ boundbox_set_from_min_max(ob->bb, min, max);
ob->derivedFinal->needsFree = 0;
ob->derivedDeform->needsFree = 0;
@@ -2513,7 +2519,9 @@ static void editmesh_build_data(CustomDataMask dataMask)
em->derivedFinal->getMinMax(em->derivedFinal, min, max);
- boundbox_set_from_min_max(mesh_get_bb(G.obedit->data), min, max);
+ if(!G.obedit->bb)
+ G.obedit->bb= MEM_mallocN(sizeof(BoundBox), "bb");
+ boundbox_set_from_min_max(G.obedit->bb, min, max);
em->derivedFinal->needsFree = 0;
em->derivedCage->needsFree = 0;
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 746cc80d638..f57daae811f 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -454,11 +454,15 @@ void tex_space_mesh(Mesh *me)
}
}
-BoundBox *mesh_get_bb(Mesh *me)
+BoundBox *mesh_get_bb(Object *ob)
{
- if (!me->bb) {
+ Mesh *me= ob->data;
+
+ if(ob->bb)
+ return ob->bb;
+
+ if (!me->bb)
tex_space_mesh(me);
- }
return me->bb;
}
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index b94e47492b2..15c4943f6fb 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -2025,7 +2025,7 @@ BoundBox *object_get_boundbox(Object *ob)
BoundBox *bb= NULL;
if(ob->type==OB_MESH) {
- bb = mesh_get_bb(ob->data);
+ bb = mesh_get_bb(ob);
}
else if ELEM3(ob->type, OB_CURVE, OB_SURF, OB_FONT) {
bb= ( (Curve *)ob->data )->bb;
@@ -2087,7 +2087,7 @@ void minmax_object(Object *ob, float *min, float *max)
me= get_mesh(ob);
if(me) {
- bb = *mesh_get_bb(me);
+ bb = *mesh_get_bb(ob);
for(a=0; a<8; a++) {
Mat4MulVecfl(ob->obmat, bb.vec[a]);