object-mode lattice bounds were not taken into account when calculating min/max.

effected view-selected, center-origin & local view.
This commit is contained in:
Campbell Barton 2011-06-06 07:29:57 +00:00
parent e55833a094
commit e8bc3fe0e3

@ -2387,24 +2387,42 @@ void object_set_dimensions(Object *ob, const float *value)
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:
@ -2416,25 +2434,27 @@ void minmax_object(Object *ob, float *min, float *max)
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 @@ void minmax_object(Object *ob, float *min, float *max)
copy_v3_v3(vec, ob->obmat[3]);
sub_v3_v3(vec, ob->size);
DO_MINMAX(vec, min, max);
break;
}
}