Lattice min_max: add a version of the func using lattice's final DispList,

and use it for bbox computing.

Revision: https://developer.blender.org/D1462
This commit is contained in:
Philipp Oeser 2015-08-17 16:59:32 +02:00 committed by Bastien Montagne
parent ad43262fdb
commit 3047b96eaa
2 changed files with 20 additions and 1 deletions

View File

@ -81,6 +81,7 @@ struct MDeformVert *BKE_lattice_deform_verts_get(struct Object *lattice);
struct BPoint *BKE_lattice_active_point_get(struct Lattice *lt);
struct BoundBox *BKE_lattice_boundbox_get(struct Object *ob);
void BKE_lattice_minmax_dl(struct Object *ob, struct Lattice *lt, float min[3], float max[3]);
void BKE_lattice_minmax(struct Lattice *lt, float min[3], float max[3]);
void BKE_lattice_center_median(struct Lattice *lt, float cent[3]);
void BKE_lattice_center_bounds(struct Lattice *lt, float cent[3]);

View File

@ -1152,7 +1152,7 @@ static void boundbox_lattice(Object *ob)
lt = ob->data;
INIT_MINMAX(min, max);
BKE_lattice_minmax(lt, min, max);
BKE_lattice_minmax_dl(ob, lt, min, max);
BKE_boundbox_init_from_minmax(bb, min, max);
}
@ -1163,6 +1163,24 @@ BoundBox *BKE_lattice_boundbox_get(Object *ob)
return ob->bb;
}
void BKE_lattice_minmax_dl(Object *ob, Lattice *lt, float min[3], float max[3])
{
DispList *dl = ob->curve_cache ? BKE_displist_find(&ob->curve_cache->disp, DL_VERTS) : NULL;
if (!dl) {
BKE_lattice_minmax(lt, min, max);
}
else {
int i, numVerts;
if (lt->editlatt) lt = lt->editlatt->latt;
numVerts = lt->pntsu * lt->pntsv * lt->pntsw;
for (i = 0; i < numVerts; i++)
minmax_v3v3_v3(min, max, &dl->verts[i * 3]);
}
}
void BKE_lattice_minmax(Lattice *lt, float min[3], float max[3])
{
int i, numVerts;