[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12801] trunk/blender/source/blender:
Brecht Van Lommel
brechtvanlommel at pandora.be
Wed Dec 5 22:50:23 CET 2007
Revision: 12801
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12801
Author: blendix
Date: 2007-12-05 22:50:23 +0100 (Wed, 05 Dec 2007)
Log Message:
-----------
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.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_mesh.h
trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
trunk/blender/source/blender/blenkernel/intern/mesh.c
trunk/blender/source/blender/blenkernel/intern/object.c
trunk/blender/source/blender/python/api2_2x/Object.c
trunk/blender/source/blender/src/drawobject.c
trunk/blender/source/blender/src/drawview.c
trunk/blender/source/blender/src/meshtools.c
Modified: trunk/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_mesh.h 2007-12-05 21:46:34 UTC (rev 12800)
+++ trunk/blender/source/blender/blenkernel/BKE_mesh.h 2007-12-05 21:50:23 UTC (rev 12801)
@@ -75,7 +75,7 @@
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 */
Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c 2007-12-05 21:46:34 UTC (rev 12800)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c 2007-12-05 21:50:23 UTC (rev 12801)
@@ -2422,6 +2422,10 @@
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 @@
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 @@
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;
Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c 2007-12-05 21:46:34 UTC (rev 12800)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c 2007-12-05 21:50:23 UTC (rev 12801)
@@ -454,11 +454,15 @@
}
}
-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;
}
Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c 2007-12-05 21:46:34 UTC (rev 12800)
+++ trunk/blender/source/blender/blenkernel/intern/object.c 2007-12-05 21:50:23 UTC (rev 12801)
@@ -2025,7 +2025,7 @@
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 @@
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]);
Modified: trunk/blender/source/blender/python/api2_2x/Object.c
===================================================================
--- trunk/blender/source/blender/python/api2_2x/Object.c 2007-12-05 21:46:34 UTC (rev 12800)
+++ trunk/blender/source/blender/python/api2_2x/Object.c 2007-12-05 21:50:23 UTC (rev 12801)
@@ -1484,7 +1484,7 @@
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:
Modified: trunk/blender/source/blender/src/drawobject.c
===================================================================
--- trunk/blender/source/blender/src/drawobject.c 2007-12-05 21:46:34 UTC (rev 12800)
+++ trunk/blender/source/blender/src/drawobject.c 2007-12-05 21:50:23 UTC (rev 12801)
@@ -2430,8 +2430,7 @@
}
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 @@
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;
Modified: trunk/blender/source/blender/src/drawview.c
===================================================================
--- trunk/blender/source/blender/src/drawview.c 2007-12-05 21:46:34 UTC (rev 12800)
+++ trunk/blender/source/blender/src/drawview.c 2007-12-05 21:50:23 UTC (rev 12801)
@@ -3306,7 +3306,7 @@
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;
Modified: trunk/blender/source/blender/src/meshtools.c
===================================================================
--- trunk/blender/source/blender/src/meshtools.c 2007-12-05 21:46:34 UTC (rev 12800)
+++ trunk/blender/source/blender/src/meshtools.c 2007-12-05 21:50:23 UTC (rev 12801)
@@ -741,7 +741,7 @@
}
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]);
More information about the Bf-blender-cvs
mailing list