[Bf-blender-cvs] [482b665e021] master: Cleanup: remove bounds runtime data from scene

Campbell Barton noreply at git.blender.org
Tue Sep 26 14:20:38 CEST 2017


Commit: 482b665e021956ea9b5643e0664ba289fc101552
Author: Campbell Barton
Date:   Tue Sep 26 22:27:15 2017 +1000
Branches: master
https://developer.blender.org/rB482b665e021956ea9b5643e0664ba289fc101552

Cleanup: remove bounds runtime data from scene

===================================================================

M	source/blender/editors/transform/transform_manipulator.c
M	source/blender/makesdna/DNA_scene_types.h

===================================================================

diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index ec066ba91a4..9a362ee609f 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -107,15 +107,16 @@
 #define TW_AXIS_DOT_MIN 0.02f
 #define TW_AXIS_DOT_MAX 0.1f
 
+struct TransformBounds {
+	float center[3];		/* Center for transform widget. */
+	float min[3], max[3];	/* Boundbox of selection for transform widget. */
+};
+
 /* transform widget center calc helper for below */
-static void calc_tw_center(Scene *scene, const float co[3])
+static void calc_tw_center(struct TransformBounds *tbounds, const float co[3])
 {
-	float *twcent = scene->twcent;
-	float *min = scene->twmin;
-	float *max = scene->twmax;
-
-	minmax_v3v3_v3(min, max, co);
-	add_v3_v3(twcent, co);
+	minmax_v3v3_v3(tbounds->min, tbounds->max, co);
+	add_v3_v3(tbounds->center, co);
 }
 
 static void protectflag_to_drawflags(short protectflag, short *drawflags)
@@ -260,7 +261,7 @@ bool gimbal_axis(Object *ob, float gmat[3][3])
 
 /* centroid, boundbox, of selection */
 /* returns total items selected */
-static int calc_manipulator_stats(const bContext *C)
+static int calc_manipulator_stats(const bContext *C, struct TransformBounds *tbounds)
 {
 	ScrArea *sa = CTX_wm_area(C);
 	ARegion *ar = CTX_wm_region(C);
@@ -280,9 +281,9 @@ static int calc_manipulator_stats(const bContext *C)
 	rv3d->twdrawflag = 0xFFFF;
 
 	/* transform widget centroid/center */
-	INIT_MINMAX(scene->twmin, scene->twmax);
-	zero_v3(scene->twcent);
-	
+	INIT_MINMAX(tbounds->min, tbounds->max);
+	zero_v3(tbounds->center);
+
 	if (is_gp_edit) {
 		float diff_mat[4][4];
 		float fpt[3];
@@ -311,12 +312,12 @@ static int calc_manipulator_stats(const bContext *C)
 						for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
 							if (pt->flag & GP_SPOINT_SELECT) {
 								if (gpl->parent == NULL) {
-									calc_tw_center(scene, &pt->x);
+									calc_tw_center(tbounds, &pt->x);
 									totsel++;
 								}
 								else {
 									mul_v3_m4v3(fpt, diff_mat, &pt->x);
-									calc_tw_center(scene, fpt);
+									calc_tw_center(tbounds, fpt);
 									totsel++;
 								}
 							}
@@ -329,7 +330,7 @@ static int calc_manipulator_stats(const bContext *C)
 
 		/* selection center */
 		if (totsel) {
-			mul_v3_fl(scene->twcent, 1.0f / (float)totsel);   /* centroid! */
+			mul_v3_fl(tbounds->center, 1.0f / (float)totsel);
 		}
 	}
 	else if (obedit) {
@@ -344,7 +345,7 @@ static int calc_manipulator_stats(const bContext *C)
 			/* USE LAST SELECTE WITH ACTIVE */
 			if ((v3d->around == V3D_AROUND_ACTIVE) && BM_select_history_active_get(em->bm, &ese)) {
 				BM_editselection_center(&ese, vec);
-				calc_tw_center(scene, vec);
+				calc_tw_center(tbounds, vec);
 				totsel = 1;
 			}
 			else {
@@ -357,7 +358,7 @@ static int calc_manipulator_stats(const bContext *C)
 					if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
 						if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
 							totsel++;
-							calc_tw_center(scene, eve->co);
+							calc_tw_center(tbounds, eve->co);
 						}
 					}
 				}
@@ -370,13 +371,13 @@ static int calc_manipulator_stats(const bContext *C)
 			if ((v3d->around == V3D_AROUND_ACTIVE) && (ebo = arm->act_edbone)) {
 				/* doesn't check selection or visibility intentionally */
 				if (ebo->flag & BONE_TIPSEL) {
-					calc_tw_center(scene, ebo->tail);
+					calc_tw_center(tbounds, ebo->tail);
 					totsel++;
 				}
 				if ((ebo->flag & BONE_ROOTSEL) ||
 				    ((ebo->flag & BONE_TIPSEL) == false))  /* ensure we get at least one point */
 				{
-					calc_tw_center(scene, ebo->head);
+					calc_tw_center(tbounds, ebo->head);
 					totsel++;
 				}
 				protectflag_to_drawflags_ebone(rv3d, ebo);
@@ -385,7 +386,7 @@ static int calc_manipulator_stats(const bContext *C)
 				for (ebo = arm->edbo->first; ebo; ebo = ebo->next) {
 					if (EBONE_VISIBLE(arm, ebo)) {
 						if (ebo->flag & BONE_TIPSEL) {
-							calc_tw_center(scene, ebo->tail);
+							calc_tw_center(tbounds, ebo->tail);
 							totsel++;
 						}
 						if ((ebo->flag & BONE_ROOTSEL) &&
@@ -395,7 +396,7 @@ static int calc_manipulator_stats(const bContext *C)
 						     (ebo->parent->flag & BONE_TIPSEL) &&
 						     EBONE_VISIBLE(arm, ebo->parent)) == 0)
 						{
-							calc_tw_center(scene, ebo->head);
+							calc_tw_center(tbounds, ebo->head);
 							totsel++;
 						}
 						if (ebo->flag & BONE_SELECTED) {
@@ -410,7 +411,7 @@ static int calc_manipulator_stats(const bContext *C)
 			float center[3];
 
 			if (v3d->around == V3D_AROUND_ACTIVE && ED_curve_active_center(cu, center)) {
-				calc_tw_center(scene, center);
+				calc_tw_center(tbounds, center);
 				totsel++;
 			}
 			else {
@@ -431,21 +432,25 @@ static int calc_manipulator_stats(const bContext *C)
 							 */
 							if (cu->drawflag & CU_HIDE_HANDLES) {
 								if (bezt->f2 & SELECT) {
-									calc_tw_center(scene, bezt->vec[1]);
+									calc_tw_center(tbounds, bezt->vec[1]);
 									totsel++;
 								}
 							}
 							else if (bezt->f2 & SELECT) {
-								calc_tw_center(scene, bezt->vec[1]);
+								calc_tw_center(tbounds, bezt->vec[1]);
 								totsel++;
 							}
 							else {
 								if (bezt->f1 & SELECT) {
-									calc_tw_center(scene, bezt->vec[(v3d->around == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 0]);
+									calc_tw_center(
+									        tbounds,
+									        bezt->vec[(v3d->around == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 0]);
 									totsel++;
 								}
 								if (bezt->f3 & SELECT) {
-									calc_tw_center(scene, bezt->vec[(v3d->around == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 2]);
+									calc_tw_center(
+									        tbounds,
+									        bezt->vec[(v3d->around == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 2]);
 									totsel++;
 								}
 							}
@@ -457,7 +462,7 @@ static int calc_manipulator_stats(const bContext *C)
 						a = nu->pntsu * nu->pntsv;
 						while (a--) {
 							if (bp->f1 & SELECT) {
-								calc_tw_center(scene, bp->vec);
+								calc_tw_center(tbounds, bp->vec);
 								totsel++;
 							}
 							bp++;
@@ -472,13 +477,13 @@ static int calc_manipulator_stats(const bContext *C)
 			MetaElem *ml;
 
 			if ((v3d->around == V3D_AROUND_ACTIVE) && (ml = mb->lastelem)) {
-				calc_tw_center(scene, &ml->x);
+				calc_tw_center(tbounds, &ml->x);
 				totsel++;
 			}
 			else {
 				for (ml = mb->editelems->first; ml; ml = ml->next) {
 					if (ml->flag & SELECT) {
-						calc_tw_center(scene, &ml->x);
+						calc_tw_center(tbounds, &ml->x);
 						totsel++;
 					}
 				}
@@ -489,7 +494,7 @@ static int calc_manipulator_stats(const bContext *C)
 			BPoint *bp;
 
 			if ((v3d->around == V3D_AROUND_ACTIVE) && (bp = BKE_lattice_active_point_get(lt))) {
-				calc_tw_center(scene, bp->vec);
+				calc_tw_center(tbounds, bp->vec);
 				totsel++;
 			}
 			else {
@@ -497,7 +502,7 @@ static int calc_manipulator_stats(const bContext *C)
 				a = lt->pntsu * lt->pntsv * lt->pntsw;
 				while (a--) {
 					if (bp->f1 & SELECT) {
-						calc_tw_center(scene, bp->vec);
+						calc_tw_center(tbounds, bp->vec);
 						totsel++;
 					}
 					bp++;
@@ -507,10 +512,10 @@ static int calc_manipulator_stats(const bContext *C)
 
 		/* selection center */
 		if (totsel) {
-			mul_v3_fl(scene->twcent, 1.0f / (float)totsel);   // centroid!
-			mul_m4_v3(obedit->obmat, scene->twcent);
-			mul_m4_v3(obedit->obmat, scene->twmin);
-			mul_m4_v3(obedit->obmat, scene->twmax);
+			mul_v3_fl(tbounds->center, 1.0f / (float)totsel);
+			mul_m4_v3(obedit->obmat, tbounds->center);
+			mul_m4_v3(obedit->obmat, tbounds->min);
+			mul_m4_v3(obedit->obmat, tbounds->max);
 		}
 	}
 	else if (ob && (ob->mode & OB_MODE_POSE)) {
@@ -524,7 +529,7 @@ static int calc_manipulator_stats(const bContext *C)
 			/* doesn't check selection or visibility intentionally */
 			Bone *bone = pchan->bone;
 			if (bone) {
-				calc_tw_center(scene, pchan->pose_head);
+				calc_tw_center(tbounds, pchan->pose_head);
 				protectflag_to_drawflags_pchan(rv3d, pchan);
 				totsel = 1;
 				ok = true;
@@ -538,7 +543,7 @@ static int calc_manipulator_stats(const bContext *C)
 				for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
 					Bone *bone = pchan->bone;
 					if (bone && (bone->flag & BONE_TRANSFORM)) {
-						calc_tw_center(scene, pchan->pose_head);
+						calc_tw_center(tbounds, pchan->pose_head);
 						protectflag_to_drawflags_pchan(rv3d, pchan);
 					}
 				}
@@ -547,10 +552,10 @@ static int calc_manipulator_stats(const bContext *C)
 		}
 
 		if (ok) {
-			mul_v3_fl(scene->twcent, 1.0f / (float)totsel);   // centroid!
-			mul_m4_v3(ob->obmat, scene->twcent);
-			mul_m4_v3(ob->obmat, scene->twmin);
-			mul_m4_v3(ob->obmat, scene->twmax);
+			mul_v3_fl(tbounds->center, 1.0f / (float)totsel);
+			mul_m4_v3(ob->obmat, tbounds->center);
+			mul_m4_v3(ob->obmat, tbounds->min);
+			mul_m4_v3(ob->obmat, tbounds->max);
 		}
 	}
 	else if (ob && (ob->mode & OB_MODE_ALL_PAINT)) {
@@ -569,7 +574,7 @@ static int calc_manipulator_stats(const bContext *C)
 
 				for (k = 0, ek = point->keys; k < point->totkey; k++, ek++) {
 					if (ek->flag & PEK_SELECT) {
-						calc_tw_center(scene, (ek->flag & PEK_USE_WCO) ? ek->world_co : ek->co);
+						calc_tw_center(tbounds, (ek->flag & PEK_USE_WCO) ? ek->world_co : ek->co);
 						totsel++;
 					}
 				}
@@ -577,7 +582,7 @@ static int calc_manipulator_stats(const bContext *C)
 
 			/* selection center */
 			if (totsel)
-				mul_v3_fl(scene->twcent, 1.0f / (float)totsel);  // centroid!
+				mul_v3_fl(tbounds->center, 1.0f / (float)totsel);
 		}
 	}
 	else {
@@ -590,7 +595,7 @@ static int calc_manipulator_stats(const bContext *C)
 			if (TESTBASELIB(v3d, base)) {
 				if (ob == NULL)
 					ob = base->object;
-				calc_tw_center(scene, base->object->obmat[3]);
+				calc_tw_center(tbounds, base->object->obmat[3]);
 				protectflag_to_drawflags(base->object->protectflag, &rv3d->twdrawflag);
 				totsel++;
 			}
@@ -598,7 +603,7 @@ static int calc_manipulator_stats(const bContext *C)
 
 		/* selection center */
 		if (totsel) {
-			mul_v3_fl(scene->twcent, 1.0f / (float)totsel);   // centroid!
+			mul_v3_fl

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list