[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37240] trunk/blender/source/blender/ blenkernel/intern/object.c: object-mode lattice bounds were not taken into account when calculating min /max.

Campbell Barton ideasman42 at gmail.com
Mon Jun 6 09:29:58 CEST 2011


Revision: 37240
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37240
Author:   campbellbarton
Date:     2011-06-06 07:29:57 +0000 (Mon, 06 Jun 2011)
Log Message:
-----------
object-mode lattice bounds were not taken into account when calculating min/max.
effected view-selected, center-origin & local view.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/object.c

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2011-06-06 06:40:09 UTC (rev 37239)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2011-06-06 07:29:57 UTC (rev 37240)
@@ -2387,26 +2387,44 @@
 void minmax_object(Object *ob, float *min, float *max)
 {
 	BoundBox bb;
-	Mesh *me;
-	Curve *cu;
 	float vec[3];
 	int a;
+	short change= FALSE;
 	
 	switch(ob->type) {
-		
 	case OB_CURVE:
 	case OB_FONT:
 	case OB_SURF:
-		cu= ob->data;
-		
-		if(cu->bb==NULL) tex_space_curve(cu);
-		bb= *(cu->bb);
-		
-		for(a=0; a<8; a++) {
-			mul_m4_v3(ob->obmat, bb.vec[a]);
-			DO_MINMAX(bb.vec[a], min, max);
+		{
+			Curve *cu= ob->data;
+
+			if(cu->bb==NULL) tex_space_curve(cu);
+			bb= *(cu->bb);
+
+			for(a=0; a<8; a++) {
+				mul_m4_v3(ob->obmat, bb.vec[a]);
+				DO_MINMAX(bb.vec[a], min, max);
+			}
+			change= TRUE;
 		}
 		break;
+	case OB_LATTICE:
+		{
+			Lattice *lt= ob->data;
+			BPoint *bp= lt->def;
+			int u, v, w;
+
+			for(w=0; w<lt->pntsw; w++) {
+				for(v=0; v<lt->pntsv; v++) {
+					for(u=0; u<lt->pntsu; u++, bp++) {
+						mul_v3_m4v3(vec, ob->obmat, bp->vec);
+						DO_MINMAX(vec, min, max);
+					}
+				}
+			}
+			change= TRUE;
+		}
+		break;
 	case OB_ARMATURE:
 		if(ob->pose) {
 			bPoseChannel *pchan;
@@ -2416,25 +2434,27 @@
 				mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail);
 				DO_MINMAX(vec, min, max);
 			}
-			break;
+			change= TRUE;
 		}
-		/* no break, get_mesh will give NULL and it passes on to default */
+		break;
 	case OB_MESH:
-		me= get_mesh(ob);
-		
-		if(me) {
-			bb = *mesh_get_bb(ob);
-			
-			for(a=0; a<8; a++) {
-				mul_m4_v3(ob->obmat, bb.vec[a]);
-				DO_MINMAX(bb.vec[a], min, max);
+		{
+			Mesh *me= get_mesh(ob);
+
+			if(me) {
+				bb = *mesh_get_bb(ob);
+
+				for(a=0; a<8; a++) {
+					mul_m4_v3(ob->obmat, bb.vec[a]);
+					DO_MINMAX(bb.vec[a], min, max);
+				}
+				change= TRUE;
 			}
 		}
-		if(min[0] < max[0] ) break;
-		
-		/* else here no break!!!, mesh can be zero sized */
-		
-	default:
+		break;
+	}
+
+	if(change == FALSE) {
 		DO_MINMAX(ob->obmat[3], min, max);
 
 		copy_v3_v3(vec, ob->obmat[3]);
@@ -2444,7 +2464,6 @@
 		copy_v3_v3(vec, ob->obmat[3]);
 		sub_v3_v3(vec, ob->size);
 		DO_MINMAX(vec, min, max);
-		break;
 	}
 }
 




More information about the Bf-blender-cvs mailing list