code cleanup: use vector math function minmax_v3v3_v3() and other minor vector function edits.

This commit is contained in:
Campbell Barton 2012-05-13 11:05:52 +00:00
parent 13bbf1cc7b
commit 305d341ec2
36 changed files with 186 additions and 198 deletions

@ -2541,14 +2541,14 @@ int get_selected_defgroups(Object *ob, char *dg_selection, int defbase_tot)
}
/************** Bounding box ********************/
static int minmax_armature(Object *ob, float min[3], float max[3])
static int minmax_armature(Object *ob, float r_min[3], float r_max[3])
{
bPoseChannel *pchan;
/* For now, we assume BKE_pose_where_is has already been called (hence we have valid data in pachan). */
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
DO_MINMAX(pchan->pose_head, min, max);
DO_MINMAX(pchan->pose_tail, min, max);
minmax_v3v3_v3(r_min, r_max, pchan->pose_head);
minmax_v3v3_v3(r_min, r_max, pchan->pose_tail);
}
return (ob->pose->chanbase.first != NULL);

@ -177,7 +177,7 @@ static void cdDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3])
if (dm->numVertData) {
for (i = 0; i < dm->numVertData; i++) {
DO_MINMAX(cddm->mvert[i].co, min_r, max_r);
minmax_v3v3_v3(min_r, max_r, cddm->mvert[i].co);
}
}
else {

@ -393,7 +393,7 @@ void BKE_curve_texspace_calc(Curve *cu)
if (tot) doit = 1;
fp = dl->verts;
while (tot--) {
DO_MINMAX(fp, min, max);
minmax_v3v3_v3(min, max, fp);
fp += 3;
}
dl = dl->next;
@ -598,9 +598,9 @@ void BKE_nurb_minmax(Nurb *nu, float min[3], float max[3])
a = nu->pntsu;
bezt = nu->bezt;
while (a--) {
DO_MINMAX(bezt->vec[0], min, max);
DO_MINMAX(bezt->vec[1], min, max);
DO_MINMAX(bezt->vec[2], min, max);
minmax_v3v3_v3(min, max, bezt->vec[0]);
minmax_v3v3_v3(min, max, bezt->vec[1]);
minmax_v3v3_v3(min, max, bezt->vec[2]);
bezt++;
}
}
@ -608,7 +608,7 @@ void BKE_nurb_minmax(Nurb *nu, float min[3], float max[3])
a = nu->pntsu * nu->pntsv;
bp = nu->bp;
while (a--) {
DO_MINMAX(bp->vec, min, max);
minmax_v3v3_v3(min, max, bp->vec);
bp++;
}
}

@ -1606,19 +1606,13 @@ static void boundbox_displist(Object *ob)
if (cu->bb == NULL) cu->bb = MEM_callocN(sizeof(BoundBox), "boundbox");
bb = cu->bb;
dl = ob->disp.first;
while (dl) {
if (dl->type == DL_INDEX3) tot = dl->nr;
else tot = dl->nr * dl->parts;
for (dl = ob->disp.first; dl; dl = dl->next) {
tot = (dl->type == DL_INDEX3) ? dl->nr : dl->nr * dl->parts;
vert = dl->verts;
for (a = 0; a < tot; a++, vert += 3) {
doit = 1;
DO_MINMAX(vert, min, max);
minmax_v3v3_v3(min, max, vert);
}
dl = dl->next;
doit = (tot != 0);
}
if (!doit) {

@ -1229,12 +1229,12 @@ static void emDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3])
if (bmdm->tc->bm->totvert) {
if (bmdm->vertexCos) {
BM_ITER_MESH_INDEX (eve, &iter, bmdm->tc->bm, BM_VERTS_OF_MESH, i) {
DO_MINMAX(bmdm->vertexCos[i], min_r, max_r);
minmax_v3v3_v3(min_r, max_r, bmdm->vertexCos[i]);
}
}
else {
BM_ITER_MESH (eve, &iter, bmdm->tc->bm, BM_VERTS_OF_MESH) {
DO_MINMAX(eve->co, min_r, max_r);
minmax_v3v3_v3(min_r, max_r, eve->co);
}
}
}

@ -701,7 +701,7 @@ void curve_deform_verts(Scene *scene, Object *cuOb, Object *target,
if (defvert_find_weight(dvert, index) > 0.0f) {
mul_m4_v3(cd.curvespace, vertexCos[a]);
DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax);
minmax_v3v3_v3(cd.dmin, cd.dmax, vertexCos[a]);
}
}
@ -736,7 +736,7 @@ void curve_deform_verts(Scene *scene, Object *cuOb, Object *target,
for (a = 0; a < numVerts; a++) {
mul_m4_v3(cd.curvespace, vertexCos[a]);
DO_MINMAX(vertexCos[a], cd.dmin, cd.dmax);
minmax_v3v3_v3(cd.dmin, cd.dmax, vertexCos[a]);
}
for (a = 0; a < numVerts; a++) {

@ -368,7 +368,7 @@ void BKE_mball_texspace_calc(Object *ob)
data = dl->verts;
while (tot--) {
/* Also weird... but longer. From utildefines. */
DO_MINMAX(data, min, max);
minmax_v3v3_v3(min, max, data);
data += 3;
}
dl = dl->next;
@ -2397,7 +2397,7 @@ int BKE_mball_minmax(MetaBall *mb, float min[3], float max[3])
INIT_MINMAX(min, max);
for (ml = mb->elems.first; ml; ml = ml->next) {
DO_MINMAX(&ml->x, min, max);
minmax_v3v3_v3(min, max, &ml->x);
}
return (mb->elems.first != NULL);

@ -3017,7 +3017,7 @@ int BKE_mesh_minmax(Mesh *me, float r_min[3], float r_max[3])
int i = me->totvert;
MVert *mvert;
for (mvert = me->mvert; i--; mvert++) {
DO_MINMAX(mvert->co, r_min, r_max);
minmax_v3v3_v3(r_min, r_max, mvert->co);
}
return (me->totvert != 0);

@ -2259,7 +2259,7 @@ void BKE_object_minmax(Object *ob, float min_r[3], float max_r[3])
for (a = 0; a < 8; a++) {
mul_m4_v3(ob->obmat, bb.vec[a]);
DO_MINMAX(bb.vec[a], min_r, max_r);
minmax_v3v3_v3(min_r, max_r, bb.vec[a]);
}
change = TRUE;
}
@ -2274,7 +2274,7 @@ void BKE_object_minmax(Object *ob, float min_r[3], float max_r[3])
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_r, max_r);
minmax_v3v3_v3(min_r, max_r, vec);
}
}
}
@ -2286,9 +2286,9 @@ void BKE_object_minmax(Object *ob, float min_r[3], float max_r[3])
bPoseChannel *pchan;
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
mul_v3_m4v3(vec, ob->obmat, pchan->pose_head);
DO_MINMAX(vec, min_r, max_r);
minmax_v3v3_v3(min_r, max_r, vec);
mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail);
DO_MINMAX(vec, min_r, max_r);
minmax_v3v3_v3(min_r, max_r, vec);
}
change = TRUE;
}
@ -2302,7 +2302,7 @@ void BKE_object_minmax(Object *ob, float min_r[3], float max_r[3])
for (a = 0; a < 8; a++) {
mul_m4_v3(ob->obmat, bb.vec[a]);
DO_MINMAX(bb.vec[a], min_r, max_r);
minmax_v3v3_v3(min_r, max_r, bb.vec[a]);
}
change = TRUE;
}
@ -2311,15 +2311,15 @@ void BKE_object_minmax(Object *ob, float min_r[3], float max_r[3])
}
if (change == FALSE) {
DO_MINMAX(ob->obmat[3], min_r, max_r);
minmax_v3v3_v3(min_r, max_r, ob->obmat[3]);
copy_v3_v3(vec, ob->obmat[3]);
add_v3_v3(vec, ob->size);
DO_MINMAX(vec, min_r, max_r);
minmax_v3v3_v3(min_r, max_r, vec);
copy_v3_v3(vec, ob->obmat[3]);
sub_v3_v3(vec, ob->size);
DO_MINMAX(vec, min_r, max_r);
minmax_v3v3_v3(min_r, max_r, vec);
}
}
@ -2343,7 +2343,7 @@ int BKE_object_minmax_dupli(Scene *scene, Object *ob, float r_min[3], float r_ma
for (i = 0; i < 8; i++) {
float vec[3];
mul_v3_m4v3(vec, dob->mat, bb->vec[i]);
DO_MINMAX(vec, r_min, r_max);
minmax_v3v3_v3(r_min, r_max, vec);
}
ok = 1;

@ -414,9 +414,7 @@ static void set_subsurf_uv(CCGSubSurf *ss, DerivedMesh *dm, DerivedMesh *result,
/* make a map from original faces to CCGFaces */
faceMap = MEM_mallocN(totface * sizeof(*faceMap), "facemapuv");
fi = ccgSubSurf_getFaceIterator(uvss);
for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
for (fi = ccgSubSurf_getFaceIterator(uvss); !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
faceMap[GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(f))] = f;
}
@ -664,9 +662,9 @@ static void ccgDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3])
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGSubSurf *ss = ccgdm->ss;
CCGVertIterator *vi = ccgSubSurf_getVertIterator(ss);
CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss);
CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss);
CCGVertIterator *vi;
CCGEdgeIterator *ei;
CCGFaceIterator *fi;
CCGKey key;
int i, edgeSize = ccgSubSurf_getEdgeSize(ss);
int gridSize = ccgSubSurf_getGridSize(ss);
@ -676,22 +674,24 @@ static void ccgDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3])
if (!ccgSubSurf_getNumVerts(ss))
min_r[0] = min_r[1] = min_r[2] = max_r[0] = max_r[1] = max_r[2] = 0.0;
for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
for (vi = ccgSubSurf_getVertIterator(ss); !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
float *co = ccgSubSurf_getVertData(ss, v);
minmax_v3_v3v3(co, min_r, max_r);
}
ccgVertIterator_free(vi);
for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
for (ei = ccgSubSurf_getEdgeIterator(ss); !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
CCGElem *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
for (i = 0; i < edgeSize; i++)
minmax_v3_v3v3(CCG_elem_offset_co(&key, edgeData, i), min_r, max_r);
}
ccgEdgeIterator_free(ei);
for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
for (fi = ccgSubSurf_getFaceIterator(ss); !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
@ -703,10 +703,7 @@ static void ccgDM_getMinMax(DerivedMesh *dm, float min_r[3], float max_r[3])
minmax_v3_v3v3(CCG_grid_elem_co(&key, faceGridData, x, y), min_r, max_r);
}
}
ccgFaceIterator_free(fi);
ccgEdgeIterator_free(ei);
ccgVertIterator_free(vi);
}
static int ccgDM_getNumVerts(DerivedMesh *dm)
@ -1399,8 +1396,7 @@ static void ccgdm_getVertCos(DerivedMesh *dm, float (*cos)[3])
totvert = ccgSubSurf_getNumVerts(ss);
vertMap2 = MEM_mallocN(totvert * sizeof(*vertMap2), "vertmap");
vi = ccgSubSurf_getVertIterator(ss);
for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
for (vi = ccgSubSurf_getVertIterator(ss); !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
vertMap2[GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v))] = v;
@ -1409,8 +1405,7 @@ static void ccgdm_getVertCos(DerivedMesh *dm, float (*cos)[3])
totedge = ccgSubSurf_getNumEdges(ss);
edgeMap2 = MEM_mallocN(totedge * sizeof(*edgeMap2), "edgemap");
ei = ccgSubSurf_getEdgeIterator(ss);
for (i = 0; !ccgEdgeIterator_isStopped(ei); i++, ccgEdgeIterator_next(ei)) {
for (ei = ccgSubSurf_getEdgeIterator(ss), i = 0; !ccgEdgeIterator_isStopped(ei); i++, ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
edgeMap2[GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e))] = e;
@ -1418,8 +1413,7 @@ static void ccgdm_getVertCos(DerivedMesh *dm, float (*cos)[3])
totface = ccgSubSurf_getNumFaces(ss);
faceMap2 = MEM_mallocN(totface * sizeof(*faceMap2), "facemap");
fi = ccgSubSurf_getFaceIterator(ss);
for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
for (fi = ccgSubSurf_getFaceIterator(ss); !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
faceMap2[GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(f))] = f;
@ -1473,11 +1467,11 @@ static void ccgDM_foreachMappedVert(
void *userData)
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGVertIterator *vi = ccgSubSurf_getVertIterator(ccgdm->ss);
CCGVertIterator *vi;
CCGKey key;
CCG_key_top_level(&key, ccgdm->ss);
for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
for (vi = ccgSubSurf_getVertIterator(ccgdm->ss); !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
CCGElem *vd = ccgSubSurf_getVertData(ccgdm->ss, v);
int index = ccgDM_getVertMapIndex(ccgdm->ss, v);
@ -1496,13 +1490,13 @@ static void ccgDM_foreachMappedEdge(
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGSubSurf *ss = ccgdm->ss;
CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss);
CCGEdgeIterator *ei;
CCGKey key;
int i, edgeSize = ccgSubSurf_getEdgeSize(ss);
CCG_key_top_level(&key, ss);
for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
for (ei = ccgSubSurf_getEdgeIterator(ss); !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
CCGElem *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
int index = ccgDM_getEdgeMapIndex(ss, e);
@ -1527,15 +1521,13 @@ static void ccgDM_drawVerts(DerivedMesh *dm)
CCGFaceIterator *fi;
glBegin(GL_POINTS);
vi = ccgSubSurf_getVertIterator(ss);
for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
for (vi = ccgSubSurf_getVertIterator(ss); !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
glVertex3fv(ccgSubSurf_getVertData(ss, v));
}
ccgVertIterator_free(vi);
ei = ccgSubSurf_getEdgeIterator(ss);
for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
for (ei = ccgSubSurf_getEdgeIterator(ss); !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
int x;
@ -1544,8 +1536,7 @@ static void ccgDM_drawVerts(DerivedMesh *dm)
}
ccgEdgeIterator_free(ei);
fi = ccgSubSurf_getFaceIterator(ss);
for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
for (fi = ccgSubSurf_getFaceIterator(ss); !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f);
@ -1805,25 +1796,26 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm,
doDraw = 0;
matnr = -1;
#define PASSATTRIB(dx, dy, vert) { \
if (attribs.totorco) { \
index = getFaceIndex(ss, f, S, x + dx, y + dy, edgeSize, gridSize); \
glVertexAttrib3fvARB(attribs.orco.gl_index, attribs.orco.array[index]); \
} \
for (b = 0; b < attribs.tottface; b++) { \
MTFace *tf = &attribs.tface[b].array[a]; \
glVertexAttrib2fvARB(attribs.tface[b].gl_index, tf->uv[vert]); \
} \
for (b = 0; b < attribs.totmcol; b++) { \
MCol *cp = &attribs.mcol[b].array[a * 4 + vert]; \
GLubyte col[4]; \
col[0] = cp->b; col[1] = cp->g; col[2] = cp->r; col[3] = cp->a; \
glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, col); \
} \
if (attribs.tottang) { \
float *tang = attribs.tang.array[a * 4 + vert]; \
glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \
} \
#define PASSATTRIB(dx, dy, vert) { \
if (attribs.totorco) { \
index = getFaceIndex(ss, f, S, x + dx, y + dy, edgeSize, gridSize); \
glVertexAttrib3fvARB(attribs.orco.gl_index, \
attribs.orco.array[index]); \
} \
for (b = 0; b < attribs.tottface; b++) { \
MTFace *tf = &attribs.tface[b].array[a]; \
glVertexAttrib2fvARB(attribs.tface[b].gl_index, tf->uv[vert]); \
} \
for (b = 0; b < attribs.totmcol; b++) { \
MCol *cp = &attribs.mcol[b].array[a * 4 + vert]; \
GLubyte col[4]; \
col[0] = cp->b; col[1] = cp->g; col[2] = cp->r; col[3] = cp->a; \
glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, col); \
} \
if (attribs.tottang) { \
float *tang = attribs.tang.array[a * 4 + vert]; \
glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \
} \
}
totface = ccgSubSurf_getNumFaces(ss);
@ -1934,7 +1926,9 @@ static void ccgDM_drawFacesGLSL(DerivedMesh *dm, DMSetMaterial setMaterial)
}
/* Only used by non-editmesh types */
static void ccgDM_drawMappedFacesMat(DerivedMesh *dm, void (*setMaterial)(void *userData, int, void *attribs), int (*setFace)(void *userData, int index), void *userData)
static void ccgDM_drawMappedFacesMat(DerivedMesh *dm,
void (*setMaterial)(void *userData, int, void *attribs),
int (*setFace)(void *userData, int index), void *userData)
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGSubSurf *ss = ccgdm->ss;
@ -1952,31 +1946,32 @@ static void ccgDM_drawMappedFacesMat(DerivedMesh *dm, void (*setMaterial)(void *
matnr = -1;
#define PASSATTRIB(dx, dy, vert) { \
if (attribs.totorco) { \
index = getFaceIndex(ss, f, S, x + dx, y + dy, edgeSize, gridSize); \
if (attribs.orco.gl_texco) \
glTexCoord3fv(attribs.orco.array[index]); \
else \
glVertexAttrib3fvARB(attribs.orco.gl_index, attribs.orco.array[index]); \
} \
for (b = 0; b < attribs.tottface; b++) { \
MTFace *tf = &attribs.tface[b].array[a]; \
if (attribs.tface[b].gl_texco) \
glTexCoord2fv(tf->uv[vert]); \
else \
glVertexAttrib2fvARB(attribs.tface[b].gl_index, tf->uv[vert]); \
} \
for (b = 0; b < attribs.totmcol; b++) { \
MCol *cp = &attribs.mcol[b].array[a * 4 + vert]; \
GLubyte col[4]; \
col[0] = cp->b; col[1] = cp->g; col[2] = cp->r; col[3] = cp->a; \
glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, col); \
} \
if (attribs.tottang) { \
float *tang = attribs.tang.array[a * 4 + vert]; \
glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \
} \
#define PASSATTRIB(dx, dy, vert) { \
if (attribs.totorco) { \
index = getFaceIndex(ss, f, S, x + dx, y + dy, edgeSize, gridSize); \
if (attribs.orco.gl_texco) \
glTexCoord3fv(attribs.orco.array[index]); \
else \
glVertexAttrib3fvARB(attribs.orco.gl_index, \
attribs.orco.array[index]); \
} \
for (b = 0; b < attribs.tottface; b++) { \
MTFace *tf = &attribs.tface[b].array[a]; \
if (attribs.tface[b].gl_texco) \
glTexCoord2fv(tf->uv[vert]); \
else \
glVertexAttrib2fvARB(attribs.tface[b].gl_index, tf->uv[vert]); \
} \
for (b = 0; b < attribs.totmcol; b++) { \
MCol *cp = &attribs.mcol[b].array[a * 4 + vert]; \
GLubyte col[4]; \
col[0] = cp->b; col[1] = cp->g; col[2] = cp->r; col[3] = cp->a; \
glVertexAttrib4ubvARB(attribs.mcol[b].gl_index, col); \
} \
if (attribs.tottang) { \
float *tang = attribs.tang.array[a * 4 + vert]; \
glVertexAttrib4fvARB(attribs.tang.gl_index, tang); \
} \
}
totface = ccgSubSurf_getNumFaces(ss);
@ -2422,14 +2417,14 @@ static void ccgDM_drawMappedEdges(DerivedMesh *dm,
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGSubSurf *ss = ccgdm->ss;
CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss);
CCGEdgeIterator *ei;
CCGKey key;
int i, useAging, edgeSize = ccgSubSurf_getEdgeSize(ss);
CCG_key_top_level(&key, ss);
ccgSubSurf_getUseAgeCounts(ss, &useAging, NULL, NULL, NULL);
for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
for (ei = ccgSubSurf_getEdgeIterator(ss); !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
CCGElem *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
int index = ccgDM_getEdgeMapIndex(ss, e);
@ -2460,13 +2455,13 @@ static void ccgDM_drawMappedEdgesInterp(DerivedMesh *dm,
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGSubSurf *ss = ccgdm->ss;
CCGKey key;
CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss);
CCGEdgeIterator *ei;
int i, useAging, edgeSize = ccgSubSurf_getEdgeSize(ss);
CCG_key_top_level(&key, ss);
ccgSubSurf_getUseAgeCounts(ss, &useAging, NULL, NULL, NULL);
for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
for (ei = ccgSubSurf_getEdgeIterator(ss); !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
CCGElem *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
int index = ccgDM_getEdgeMapIndex(ss, e);
@ -2498,11 +2493,11 @@ static void ccgDM_foreachMappedFaceCenter(
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *) dm;
CCGSubSurf *ss = ccgdm->ss;
CCGKey key;
CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss);
CCGFaceIterator *fi;
CCG_key_top_level(&key, ss);
for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
for (fi = ccgSubSurf_getFaceIterator(ss); !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
int index = ccgDM_getFaceMapIndex(ss, f);
@ -3168,8 +3163,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
totvert = ccgSubSurf_getNumVerts(ss);
ccgdm->vertMap = MEM_mallocN(totvert * sizeof(*ccgdm->vertMap), "vertMap");
vi = ccgSubSurf_getVertIterator(ss);
for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
for (vi = ccgSubSurf_getVertIterator(ss); !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
ccgdm->vertMap[GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v))].vert = v;
@ -3178,8 +3172,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
totedge = ccgSubSurf_getNumEdges(ss);
ccgdm->edgeMap = MEM_mallocN(totedge * sizeof(*ccgdm->edgeMap), "edgeMap");
ei = ccgSubSurf_getEdgeIterator(ss);
for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
for (ei = ccgSubSurf_getEdgeIterator(ss); !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
ccgdm->edgeMap[GET_INT_FROM_POINTER(ccgSubSurf_getEdgeEdgeHandle(e))].edge = e;
@ -3187,8 +3180,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
totface = ccgSubSurf_getNumFaces(ss);
ccgdm->faceMap = MEM_mallocN(totface * sizeof(*ccgdm->faceMap), "faceMap");
fi = ccgSubSurf_getFaceIterator(ss);
for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
for (fi = ccgSubSurf_getFaceIterator(ss); !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
CCGFace *f = ccgFaceIterator_getCurrent(fi);
ccgdm->faceMap[GET_INT_FROM_POINTER(ccgSubSurf_getFaceFaceHandle(f))].face = f;
@ -3237,7 +3229,7 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
has_edge_origindex = CustomData_has_layer(&ccgdm->dm.edgeData, CD_ORIGINDEX);
loopindex = loopindex2 = 0; //current loop index
loopindex = loopindex2 = 0; /* current loop index */
for (index = 0; index < totface; index++) {
CCGFace *f = ccgdm->faceMap[index].face;
int numVerts = ccgSubSurf_getFaceNumVerts(f);
@ -3587,8 +3579,7 @@ void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3])
ss_sync_from_derivedmesh(ss, dm, NULL, 0);
vi = ccgSubSurf_getVertIterator(ss);
for (; !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
for (vi = ccgSubSurf_getVertIterator(ss); !ccgVertIterator_isStopped(vi); ccgVertIterator_next(vi)) {
CCGVert *v = ccgVertIterator_getCurrent(vi);
int idx = GET_INT_FROM_POINTER(ccgSubSurf_getVertVertHandle(v));
int N = ccgSubSurf_getVertNumEdges(v);
@ -3596,8 +3587,8 @@ void subsurf_calculate_limit_positions(Mesh *me, float (*positions_r)[3])
float *co;
int i;
edge_sum[0] = edge_sum[1] = edge_sum[2] = 0.0;
face_sum[0] = face_sum[1] = face_sum[2] = 0.0;
zero_v3(edge_sum);
zero_v3(face_sum);
for (i = 0; i < N; i++) {
CCGEdge *e = ccgSubSurf_getVertEdge(v, i);

@ -118,6 +118,8 @@ MINLINE void negate_v3_v3(float r[3], const float a[3]);
MINLINE void negate_v4(float r[4]);
MINLINE void negate_v4_v4(float r[4], const float a[3]);
MINLINE void negate_v3_short(short r[3]);
MINLINE float dot_v2v2(const float a[2], const float b[2]);
MINLINE float dot_v3v3(const float a[3], const float b[3]);

@ -2323,7 +2323,7 @@ void box_minmax_bounds_m4(float min[3], float max[3], float boundbox[2][3], floa
vec[2] = (a & 4) ? boundbox[0][2] : boundbox[1][2];
mul_m4_v3(mat, vec);
DO_MINMAX(vec, mn, mx);
minmax_v3v3_v3(mn, mx, vec);
}
copy_v3_v3(min, mn);

@ -458,6 +458,14 @@ MINLINE void negate_v4_v4(float r[4], const float a[4])
r[3] = -a[3];
}
/* could add more... */
MINLINE void negate_v3_short(short r[3])
{
r[0] = -r[0];
r[1] = -r[1];
r[2] = -r[2];
}
MINLINE float dot_v2v2(const float a[2], const float b[2])
{
return a[0] * b[0] + a[1] * b[1];

@ -1090,11 +1090,8 @@ static void pbvh_update_normals(PBVH *bvh, PBVHNode **nodes,
copy_v3_v3(no, vnor[v]);
normalize_v3(no);
mvert->no[0] = (short)(no[0] * 32767.0f);
mvert->no[1] = (short)(no[1] * 32767.0f);
mvert->no[2] = (short)(no[2] * 32767.0f);
normal_float_to_short_v3(mvert->no, no);
mvert->flag &= ~ME_VERT_PBVH_UPDATE;
}
}

@ -213,7 +213,7 @@ void BM_face_calc_center_bounds(BMFace *f, float r_cent[3])
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
do {
DO_MINMAX(l_iter->v->co, min, max);
minmax_v3v3_v3(min, max, l_iter->v->co);
} while ((l_iter = l_iter->next) != l_first);
mid_v3_v3v3(r_cent, min, max);

@ -396,8 +396,8 @@ void bmo_collapse_exec(BMesh *bm, BMOperator *op)
BLI_array_grow_one(edges);
edges[tot] = e;
DO_MINMAX(e->v1->co, min, max);
DO_MINMAX(e->v2->co, min, max);
minmax_v3v3_v3(min, max, e->v1->co);
minmax_v3v3_v3(min, max, e->v2->co);
}
add_v3_v3v3(min, min, max);

@ -569,8 +569,8 @@ void docenter_armature(Scene *scene, Object *ob, float cursor[3], int centermode
float min[3], max[3];
INIT_MINMAX(min, max);
for (ebone = arm->edbo->first; ebone; ebone = ebone->next) {
DO_MINMAX(ebone->head, min, max);
DO_MINMAX(ebone->tail, min, max);
minmax_v3v3_v3(min, max, ebone->head);
minmax_v3v3_v3(min, max, ebone->tail);
}
mid_v3_v3v3(cent, min, max);
}

@ -451,11 +451,11 @@ static void heat_ray_tree_create(LaplacianSystem *sys)
float bb[6];
INIT_MINMAX(bb, bb + 3);
DO_MINMAX(verts[mf->v1], bb, bb + 3);
DO_MINMAX(verts[mf->v2], bb, bb + 3);
DO_MINMAX(verts[mf->v3], bb, bb + 3);
minmax_v3v3_v3(bb, bb + 3, verts[mf->v1]);
minmax_v3v3_v3(bb, bb + 3, verts[mf->v2]);
minmax_v3v3_v3(bb, bb + 3, verts[mf->v3]);
if (mf->v4) {
DO_MINMAX(verts[mf->v4], bb, bb + 3);
minmax_v3v3_v3(bb, bb + 3, verts[mf->v4]);
}
BLI_bvhtree_insert(sys->heat.bvhtree, a, bb, 2);
@ -1753,7 +1753,7 @@ static void harmonic_coordinates_bind(Scene *UNUSED(scene), MeshDeformModifierDa
INIT_MINMAX(mdb->min, mdb->max);
for (a = 0; a < mdb->totcagevert; a++)
DO_MINMAX(mdb->cagecos[a], mdb->min, mdb->max);
minmax_v3v3_v3(mdb->min, mdb->max, mdb->cagecos[a]);
/* allocate memory */
mdb->size = (2 << (mmd->gridsize - 1)) + 2;

@ -427,7 +427,7 @@ int paintface_minmax(Object *ob, float r_min[3], float r_max[3])
copy_v3_v3(vec, (mvert[ml->v].co));
mul_m3_v3(bmat, vec);
add_v3_v3v3(vec, vec, ob->obmat[3]);
DO_MINMAX(vec, r_min, r_max);
minmax_v3v3_v3(r_min, r_max, vec);
}
ok = TRUE;

@ -734,7 +734,7 @@ static int edbm_dupli_extrude_cursor_invoke(bContext *C, wmOperator *op, wmEvent
BM_ITER_MESH (v1, &iter, vc.em->bm, BM_VERTS_OF_MESH) {
if (BM_elem_flag_test(v1, BM_ELEM_SELECT)) {
DO_MINMAX(v1->co, min, max);
minmax_v3v3_v3(min, max, v1->co);
done = 1;
}
}

@ -806,7 +806,7 @@ intptr_t mesh_octree_table(Object *ob, BMEditMesh *em, const float co[3], char m
BMVert *eve;
BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
DO_MINMAX(eve->co, min, max);
minmax_v3v3_v3(min, max, eve->co);
}
}
else {
@ -814,19 +814,17 @@ intptr_t mesh_octree_table(Object *ob, BMEditMesh *em, const float co[3], char m
int a;
for (a = 0, mvert = me->mvert; a < me->totvert; a++, mvert++)
DO_MINMAX(mvert->co, min, max);
minmax_v3v3_v3(min, max, mvert->co);
}
/* for quick unit coordinate calculus */
copy_v3_v3(MeshOctree.offs, min);
MeshOctree.offs[0] -= MOC_THRESH; /* we offset it 1 threshold unit extra */
MeshOctree.offs[1] -= MOC_THRESH;
MeshOctree.offs[2] -= MOC_THRESH;
/* we offset it 1 threshold unit extra */
add_v3_fl(MeshOctree.offs, -MOC_THRESH);
sub_v3_v3v3(MeshOctree.div, max, min);
MeshOctree.div[0] += 2 * MOC_THRESH; /* and divide with 2 threshold unit more extra (try 8x8 unit grid on paint) */
MeshOctree.div[1] += 2 * MOC_THRESH;
MeshOctree.div[2] += 2 * MOC_THRESH;
/* and divide with 2 threshold unit more extra (try 8x8 unit grid on paint) */
add_v3_fl(MeshOctree.div, 2.0f * MOC_THRESH);
mul_v3_fl(MeshOctree.div, 1.0f / MOC_RES);
if (MeshOctree.div[0] == 0.0f) MeshOctree.div[0] = 1.0f;

@ -697,7 +697,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
mul_v3_fl(cent, 1.0f / (float)total);
}
else {
DO_MINMAX(eve->co, min, max);
minmax_v3v3_v3(min, max, eve->co);
mid_v3_v3v3(cent, min, max);
}
}

@ -3100,8 +3100,8 @@ static int particle_intersect_dm(Scene *scene, Object *ob, DerivedMesh *dm,
if (pa_minmax==0) {
INIT_MINMAX(p_min, p_max);
DO_MINMAX(co1, p_min, p_max);
DO_MINMAX(co2, p_min, p_max);
minmax_v3v3_v3(p_min, p_max, co1);
minmax_v3v3_v3(p_min, p_max, co2);
}
else {
copy_v3_v3(p_min, pa_minmax);

@ -2189,9 +2189,9 @@ static int viewselected_exec(bContext *C, wmOperator *UNUSED(op))
bPoseChannel *pchan_tx = pchan->custom_tx ? pchan->custom_tx : pchan;
ok = 1;
mul_v3_m4v3(vec, ob->obmat, pchan_tx->pose_head);
DO_MINMAX(vec, min, max);
minmax_v3v3_v3(min, max, vec);
mul_v3_m4v3(vec, ob->obmat, pchan_tx->pose_tail);
DO_MINMAX(vec, min, max);
minmax_v3v3_v3(min, max, vec);
}
}
}

@ -501,7 +501,7 @@ static void make_trans_verts(Object *obedit, float min[3], float max[3], int mod
if (tv->flag & SELECT) {
add_v3_v3(centroid, tv->oldloc);
total += 1.0f;
DO_MINMAX(tv->oldloc, min, max);
minmax_v3v3_v3(min, max, tv->oldloc);
}
}
if (total != 0.0f) {
@ -856,7 +856,7 @@ static void bundle_midpoint(Scene *scene, Object *ob, float vec[3])
if ((track->flag & TRACK_HAS_BUNDLE) && TRACK_SELECTED(track)) {
ok = 1;
mul_v3_m4v3(pos, obmat, track->bundle_pos);
DO_MINMAX(pos, min, max);
minmax_v3v3_v3(min, max, pos);
}
track = track->next;
@ -898,7 +898,7 @@ static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op))
mul_m3_v3(bmat, vec);
add_v3_v3(vec, obedit->obmat[3]);
add_v3_v3(centroid, vec);
DO_MINMAX(vec, min, max);
minmax_v3v3_v3(min, max, vec);
}
if (v3d->around == V3D_CENTROID) {
@ -923,7 +923,7 @@ static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op))
copy_v3_v3(vec, pchan->pose_head);
mul_m4_v3(obact->obmat, vec);
add_v3_v3(centroid, vec);
DO_MINMAX(vec, min, max);
minmax_v3v3_v3(min, max, vec);
count++;
}
}
@ -943,7 +943,7 @@ static int snap_curs_to_sel(bContext *C, wmOperator *UNUSED(op))
}
add_v3_v3(centroid, vec);
DO_MINMAX(vec, min, max);
minmax_v3v3_v3(min, max, vec);
count++;
}
CTX_DATA_END;
@ -1082,7 +1082,7 @@ int ED_view3d_minmax_verts(Object *obedit, float min[3], float max[3])
mul_m3_v3(bmat, vec);
add_v3_v3(vec, obedit->obmat[3]);
add_v3_v3(centroid, vec);
DO_MINMAX(vec, min, max);
minmax_v3v3_v3(min, max, vec);
}
MEM_freeN(transvmain);

@ -114,7 +114,7 @@ static void calc_tw_center(Scene *scene, float *co)
float *min= scene->twmin;
float *max= scene->twmax;
DO_MINMAX(co, min, max);
minmax_v3v3_v3(min, max, co);
add_v3_v3(twcent, co);
}

@ -870,13 +870,12 @@ static void uv_map_transform_center(Scene *scene, View3D *v3d, float *result,
switch (around) {
case V3D_CENTER: /* bounding box center */
min[0] = min[1] = min[2] = 1e20f;
max[0] = max[1] = max[2] = -1e20f;
INIT_MINMAX(min, max);
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
BM_ITER_ELEM (l, &liter, efa, BM_LOOPS_OF_FACE) {
DO_MINMAX(l->v->co, min, max);
minmax_v3v3_v3(min, max, l->v->co);
}
}
}
@ -886,9 +885,7 @@ static void uv_map_transform_center(Scene *scene, View3D *v3d, float *result,
case V3D_CURSOR: /*cursor center*/
cursx = give_cursor(scene, v3d);
/* shift to objects world */
result[0] = cursx[0] - ob->obmat[3][0];
result[1] = cursx[1] - ob->obmat[3][1];
result[2] = cursx[2] - ob->obmat[3][2];
sub_v3_v3v3(result, cursx, ob->obmat[3]);
break;
case V3D_LOCAL: /*object center*/

@ -367,16 +367,16 @@ static void cuboid_do(
float vec[3];
/* let the center of the ctrl_ob be part of the bound box: */
DO_MINMAX(center, min, max);
minmax_v3v3_v3(min, max, center);
for (i = 0; i < numVerts; i++) {
sub_v3_v3v3(vec, vertexCos[i], center);
DO_MINMAX(vec, min, max);
minmax_v3v3_v3(min, max, vec);
}
}
else {
for (i = 0; i < numVerts; i++) {
DO_MINMAX(vertexCos[i], min, max);
minmax_v3v3_v3(min, max, vertexCos[i]);
}
}

@ -558,9 +558,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
/* flip vertex normals for copied verts */
mv = mvert + numVerts;
for (i = 0; i < numVerts; i++, mv++) {
mv->no[0] = -mv->no[0];
mv->no[1] = -mv->no[1];
mv->no[2] = -mv->no[2];
negate_v3_short(mv->no);
}
if (smd->flag & MOD_SOLIDIFY_RIM) {
@ -692,7 +690,8 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
}
#ifdef SOLIDIFY_SIDE_NORMALS
normal_quad_v3(nor, mvert[ml[j - 4].v].co,
normal_quad_v3(nor,
mvert[ml[j - 4].v].co,
mvert[ml[j - 3].v].co,
mvert[ml[j - 2].v].co,
mvert[ml[j - 1].v].co);

@ -4331,7 +4331,7 @@ static void finalize_render_object(Render *re, ObjectRen *obr, int timeoffset)
if ((a & 255)==0) ver= obr->vertnodes[a>>8].vert;
else ver++;
DO_MINMAX(ver->co, min, max);
minmax_v3v3_v3(min, max, ver->co);
}
if (obr->strandbuf) {
@ -4357,8 +4357,8 @@ static void finalize_render_object(Render *re, ObjectRen *obr, int timeoffset)
copy_v3_v3(sbound->boundbox[0], smin);
copy_v3_v3(sbound->boundbox[1], smax);
DO_MINMAX(smin, min, max);
DO_MINMAX(smax, min, max);
minmax_v3v3_v3(min, max, smin);
minmax_v3v3_v3(min, max, smax);
}
}

@ -402,7 +402,7 @@ static int occ_find_bbox_axis(OcclusionTree *tree, int begin, int end, float *mi
INIT_MINMAX(min, max);
for (a = begin; a < end; a++) {
DO_MINMAX(tree->co[a], min, max);
minmax_v3v3_v3(min, max, tree->co[a]);
}
for (a=0; a<3; a++) {

@ -2234,8 +2234,8 @@ static void ray_shadow_qmc(ShadeInput *shi, LampRen *lar, const float lampco[3],
QMC_initPixel(qsa, shi->thread);
INIT_MINMAX(min, max);
for (i=0; i<totjitco; i++) {
DO_MINMAX(jitco[i], min, max);
for (i = 0; i < totjitco; i++) {
minmax_v3v3_v3(min, max, jitco[i]);
}
RE_rayobject_hint_bb(R.raytree, &bb_hint, min, max);

@ -762,8 +762,8 @@ ScatterTree *scatter_tree_new(ScatterSettings *ss[3], float scale, float error,
points[i].area= fabsf(area[i])/(tree->scale*tree->scale);
points[i].back= (area[i] < 0.0f);
mul_v3_fl(points[i].co, 1.0f/tree->scale);
DO_MINMAX(points[i].co, tree->min, tree->max);
mul_v3_fl(points[i].co, 1.0f / tree->scale);
minmax_v3v3_v3(tree->min, tree->max, points[i].co);
refpoints[i]= points + i;
}

@ -1063,18 +1063,19 @@ void free_strand_surface(Render *re)
void strand_minmax(StrandRen *strand, float min[3], float max[3], const float width)
{
StrandVert *svert;
float vec[3], width2= 2.0f*width;
const float width2 = width * 2.0f;
float vec[3];
int a;
for (a=0, svert=strand->vert; a<strand->totvert; a++, svert++) {
copy_v3_v3(vec, svert->co);
DO_MINMAX(vec, min, max);
minmax_v3v3_v3(min, max, vec);
if (width!=0.0f) {
vec[0]+= width; vec[1]+= width; vec[2]+= width;
DO_MINMAX(vec, min, max);
vec[0]-= width2; vec[1]-= width2; vec[2]-= width2;
DO_MINMAX(vec, min, max);
add_v3_fl(vec, width);
minmax_v3v3_v3(min, max, vec);
add_v3_fl(vec, -width2);
minmax_v3v3_v3(min, max, vec);
}
}
}

@ -150,7 +150,7 @@ void global_bounds_obi(Render *re, ObjectInstanceRen *obi, float *bbmin, float *
/* convert to global space */
mul_m4_v3(re->viewinv, co);
DO_MINMAX(co, vp->bbmin, vp->bbmax);
minmax_v3v3_v3(vp->bbmin, vp->bbmax, co);
}
copy_v3_v3(bbmin, vp->bbmin);

@ -1375,16 +1375,17 @@ static float my_boundbox_mesh(Mesh *me, float *loc, float *size)
if (!size) size= msize;
mvert= me->mvert;
for (a=0; a<me->totvert; a++, mvert++) {
co= mvert->co;
for (a = 0; a<me->totvert; a++, mvert++) {
co = mvert->co;
/* bounds */
DO_MINMAX(co, min, max);
minmax_v3v3_v3(min, max, co);
/* radius */
vert_radius= co[0]*co[0] + co[1]*co[1] + co[2]*co[2];
vert_radius = len_squared_v3(co);
if (vert_radius > radius)
radius= vert_radius;
radius = vert_radius;
}
if (me->totvert) {
@ -1432,8 +1433,8 @@ static void my_tex_space_mesh(Mesh *me)
INIT_MINMAX(min, max);
fp= (float *)kb->data;
for (a=0; a<kb->totelem; a++, fp+=3) {
DO_MINMAX(fp, min, max);
for (a=0; a<kb->totelem; a++, fp += 3) {
minmax_v3v3_v3(min, max, fp);
}
if (kb->totelem) {
loc[0]= (min[0]+max[0])/2.0f; loc[1]= (min[1]+max[1])/2.0f; loc[2]= (min[2]+max[2])/2.0f;