From 3047b96eaa962fe45d2333f5ea4be809e02787cd Mon Sep 17 00:00:00 2001 From: Philipp Oeser Date: Mon, 17 Aug 2015 16:59:32 +0200 Subject: 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 --- source/blender/blenkernel/BKE_lattice.h | 1 + source/blender/blenkernel/intern/lattice.c | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) (limited to 'source/blender/blenkernel') diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h index e91d0e0ed87..677d8e34229 100644 --- a/source/blender/blenkernel/BKE_lattice.h +++ b/source/blender/blenkernel/BKE_lattice.h @@ -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]); diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c index d3f666e2109..009e1d20328 100644 --- a/source/blender/blenkernel/intern/lattice.c +++ b/source/blender/blenkernel/intern/lattice.c @@ -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; -- cgit v1.2.3