From 6fd281c14de371d7457c6d37fc4c65a01ea289d6 Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Thu, 28 Apr 2005 18:46:35 +0000 Subject: [PATCH] Made "Centre" in mesh editmode listen to the "Around" setting, so it can now use centroid as well (instead of only bounbox-centre) It doesn't do "cursor" though... it's centering for object center, right? --- source/blender/src/editobject.c | 34 +++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/source/blender/src/editobject.c b/source/blender/src/editobject.c index f8b81a7a338..3cb46197bd2 100644 --- a/source/blender/src/editobject.c +++ b/source/blender/src/editobject.c @@ -1604,29 +1604,39 @@ void docentre(int centremode) Nurb *nu, *nu1; EditVert *eve; float cent[3], centn[3], min[3], max[3], omat[3][3]; - int a; + int a, total= 0; MVert *mvert; if(G.scene->id.lib) return; - + + cent[0]= cent[1]= cent[2]= 0.0; + if(G.obedit) { INIT_MINMAX(min, max); if(G.obedit->type==OB_MESH) { - eve= em->verts.first; - while(eve) { - DO_MINMAX(eve->co, min, max); - eve= eve->next; + for(eve= em->verts.first; eve; eve= eve->next) { + if(G.vd->around==V3D_CENTROID) { + total++; + VECADD(cent, cent, eve->co); + } + else { + DO_MINMAX(eve->co, min, max); + } } - cent[0]= (min[0]+max[0])/2.0f; - cent[1]= (min[1]+max[1])/2.0f; - cent[2]= (min[2]+max[2])/2.0f; - eve= em->verts.first; - while(eve) { + if(G.vd->around==V3D_CENTROID) { + VecMulf(cent, 1.0f/(float)total); + } + else { + cent[0]= (min[0]+max[0])/2.0f; + cent[1]= (min[1]+max[1])/2.0f; + cent[2]= (min[2]+max[2])/2.0f; + } + + for(eve= em->verts.first; eve; eve= eve->next) { VecSubf(eve->co, eve->co, cent); - eve= eve->next; } } }