diff options
-rw-r--r-- | source/blender/blenkernel/BKE_mesh.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/DerivedMesh.c | 12 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 10 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 4 | ||||
-rw-r--r-- | source/blender/python/api2_2x/Object.c | 2 | ||||
-rw-r--r-- | source/blender/src/drawobject.c | 5 | ||||
-rw-r--r-- | source/blender/src/drawview.c | 2 | ||||
-rw-r--r-- | source/blender/src/meshtools.c | 2 |
8 files changed, 25 insertions, 14 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]); diff --git a/source/blender/python/api2_2x/Object.c b/source/blender/python/api2_2x/Object.c index f873c4321b3..f151653e356 100644 --- a/source/blender/python/api2_2x/Object.c +++ b/source/blender/python/api2_2x/Object.c @@ -1484,7 +1484,7 @@ static PyObject *Object_getBoundBox( BPy_Object * self ) switch ( self->object->type ) { case OB_MESH: me = self->object->data; - vec = (float*) mesh_get_bb(me)->vec; + vec = (float*) mesh_get_bb(self->object)->vec; break; case OB_CURVE: case OB_FONT: diff --git a/source/blender/src/drawobject.c b/source/blender/src/drawobject.c index c91c335c004..a73c4e71a3d 100644 --- a/source/blender/src/drawobject.c +++ b/source/blender/src/drawobject.c @@ -2430,8 +2430,7 @@ static int draw_mesh_object(Base *base, int dt, int flag) } else { /* don't create boundbox here with mesh_get_bb(), the derived system will make it, puts deformed bb's OK */ - - if(me->totface<=4 || boundbox_clip(ob->obmat, me->bb)) { + if(me->totface<=4 || boundbox_clip(ob->obmat, (ob->bb)? ob->bb: me->bb)) { if(dt==OB_SOLID) has_alpha= init_gl_materials(ob, (base->flag & OB_FROMDUPLI)==0); draw_mesh_fancy(base, dt, flag); @@ -4481,7 +4480,7 @@ static void draw_bounding_volume(Object *ob) BoundBox *bb=0; 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; diff --git a/source/blender/src/drawview.c b/source/blender/src/drawview.c index bd2fc642676..df33c7a597e 100644 --- a/source/blender/src/drawview.c +++ b/source/blender/src/drawview.c @@ -3306,7 +3306,7 @@ static int cached_dynamics(int sfra, int efra) Object *ob; ModifierData *md; ParticleSystem *psys; - int i, stack_index, cached=1; + int i, stack_index=-1, cached=1; while(base && cached) { ob = base->object; diff --git a/source/blender/src/meshtools.c b/source/blender/src/meshtools.c index 2b5ec2006c1..6dc01217b82 100644 --- a/source/blender/src/meshtools.c +++ b/source/blender/src/meshtools.c @@ -741,7 +741,7 @@ long mesh_octree_table(Object *ob, float *co, char mode) } else if(mode=='s') { /* start table */ Mesh *me= ob->data; - BoundBox *bb = mesh_get_bb(me); + BoundBox *bb = mesh_get_bb(ob); /* for quick unit coordinate calculus */ VECCOPY(offs, bb->vec[0]); |