Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-05-13 15:14:43 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-05-13 15:14:43 +0400
commitf9642926303ec89679e61076ca9e4b9f0be3afe9 (patch)
tree8834da5e8743e9572ece0f33b9c3b94b00691a94 /source/blender/editors
parent305d341ec2c2c5c6485ad6cd719e9472e4bb460d (diff)
fix geometry to origin in mesh editmode - was broken since bmesh merge.
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/object/object_transform.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c
index 9c58717ec53..16f62f56505 100644
--- a/source/blender/editors/object/object_transform.c
+++ b/source/blender/editors/object/object_transform.c
@@ -653,7 +653,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
Scene *scene = CTX_data_scene(C);
Object *obedit = CTX_data_edit_object(C);
Object *tob;
- float cursor[3], cent[3], cent_neg[3], centn[3], min[3], max[3];
+ float cursor[3], cent[3], cent_neg[3], centn[3];
int centermode = RNA_enum_get(op->ptr, "type");
int around = RNA_enum_get(op->ptr, "center"); /* initialized from v3d->around */
@@ -675,14 +675,11 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
zero_v3(cent);
if (obedit) {
- INIT_MINMAX(min, max);
-
if (obedit->type == OB_MESH) {
Mesh *me = obedit->data;
BMEditMesh *em = me->edit_btmesh;
BMVert *eve;
BMIter iter;
- int total = 0;
if (centermode == ORIGIN_TO_CURSOR) {
copy_v3_v3(cent, cursor);
@@ -690,16 +687,19 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
mul_m4_v3(obedit->imat, cent);
}
else {
- BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
- if (around == V3D_CENTROID) {
- total++;
- add_v3_v3(cent, eve->co);
- mul_v3_fl(cent, 1.0f / (float)total);
+ if (around == V3D_CENTROID) {
+ const float total_div = 1.0f / (float)em->bm->totvert;
+ BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
+ madd_v3_v3fl(cent, eve->co, total_div);
}
- else {
+ }
+ else {
+ float min[3], max[3];
+ INIT_MINMAX(min, max);
+ BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
minmax_v3v3_v3(min, max, eve->co);
- mid_v3_v3v3(cent, min, max);
}
+ mid_v3_v3v3(cent, min, max);
}
}
@@ -746,8 +746,11 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
tot_lib_error++;
}
else {
- if (centermode == ORIGIN_TO_CURSOR) { /* done */ }
+ if (centermode == ORIGIN_TO_CURSOR) {
+ /* done */
+ }
else {
+ float min[3], max[3];
/* only bounds support */
INIT_MINMAX(min, max);
BKE_object_minmax_dupli(scene, ob, min, max);