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:
-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
-rw-r--r--source/blender/python/api2_2x/Object.c2
-rw-r--r--source/blender/src/drawobject.c5
-rw-r--r--source/blender/src/drawview.c2
-rw-r--r--source/blender/src/meshtools.c2
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]);