[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46603] trunk/blender/source/blender/ editors/object/object_transform.c: fix geometry to origin in mesh editmode - was broken since bmesh merge.

Campbell Barton ideasman42 at gmail.com
Sun May 13 13:14:43 CEST 2012


Revision: 46603
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46603
Author:   campbellbarton
Date:     2012-05-13 11:14:43 +0000 (Sun, 13 May 2012)
Log Message:
-----------
fix geometry to origin in mesh editmode - was broken since bmesh merge.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_transform.c

Modified: trunk/blender/source/blender/editors/object/object_transform.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_transform.c	2012-05-13 11:05:52 UTC (rev 46602)
+++ trunk/blender/source/blender/editors/object/object_transform.c	2012-05-13 11:14:43 UTC (rev 46603)
@@ -653,7 +653,7 @@
 	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 @@
 	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 @@
 				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 @@
 						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);




More information about the Bf-blender-cvs mailing list