[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