[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49986] trunk/blender: fix [#32353] 'Focus '(center) applied on a rig should only take visible bones into account

Campbell Barton ideasman42 at gmail.com
Sat Aug 18 16:27:50 CEST 2012


Revision: 49986
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49986
Author:   campbellbarton
Date:     2012-08-18 14:27:48 +0000 (Sat, 18 Aug 2012)
Log Message:
-----------
fix [#32353] 'Focus'(center) applied on a rig should only take visible bones into account

Modified Paths:
--------------
    trunk/blender/build_files/cmake/config/blender_lite.cmake
    trunk/blender/source/blender/blenkernel/BKE_object.h
    trunk/blender/source/blender/blenkernel/intern/constraint.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/editors/object/object_transform.c
    trunk/blender/source/blender/editors/physics/particle_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_view.c

Modified: trunk/blender/build_files/cmake/config/blender_lite.cmake
===================================================================
--- trunk/blender/build_files/cmake/config/blender_lite.cmake	2012-08-18 13:36:29 UTC (rev 49985)
+++ trunk/blender/build_files/cmake/config/blender_lite.cmake	2012-08-18 14:27:48 UTC (rev 49986)
@@ -18,6 +18,7 @@
 set(WITH_GAMEENGINE          OFF CACHE FORCE BOOL)
 set(WITH_COMPOSITOR          OFF CACHE FORCE BOOL)
 set(WITH_GHOST_XDND          OFF CACHE FORCE BOOL)
+set(WITH_IK_SOLVER           OFF CACHE FORCE BOOL)
 set(WITH_IK_ITASC            OFF CACHE FORCE BOOL)
 set(WITH_IMAGE_CINEON        OFF CACHE FORCE BOOL)
 set(WITH_IMAGE_DDS           OFF CACHE FORCE BOOL)

Modified: trunk/blender/source/blender/blenkernel/BKE_object.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_object.h	2012-08-18 13:36:29 UTC (rev 49985)
+++ trunk/blender/source/blender/blenkernel/BKE_object.h	2012-08-18 14:27:48 UTC (rev 49986)
@@ -109,8 +109,8 @@
 void BKE_object_dimensions_get(struct Object *ob, float vec[3]);
 void BKE_object_dimensions_set(struct Object *ob, const float *value);
 void BKE_object_boundbox_flag(struct Object *ob, int flag, int set);
-void BKE_object_minmax(struct Object *ob, float r_min[3], float r_max[3]);
-int BKE_object_minmax_dupli(struct Scene *scene, struct Object *ob, float r_min[3], float r_max[3]);
+void BKE_object_minmax(struct Object *ob, float r_min[3], float r_max[3], const short use_hidden);
+int BKE_object_minmax_dupli(struct Scene *scene, struct Object *ob, float r_min[3], float r_max[3], const short use_hidden);
 
 /* sometimes min-max isn't enough, we need to loop over each point */
 void BKE_object_foreach_display_point(struct Object *ob, float obmat[4][4],

Modified: trunk/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/constraint.c	2012-08-18 13:36:29 UTC (rev 49985)
+++ trunk/blender/source/blender/blenkernel/intern/constraint.c	2012-08-18 14:27:48 UTC (rev 49986)
@@ -3114,7 +3114,8 @@
 		copy_v3_v3(ownLoc, obmat[3]);
 		
 		INIT_MINMAX(curveMin, curveMax);
-		BKE_object_minmax(ct->tar, curveMin, curveMax);
+		/* XXX - don't think this is good calling this here - campbell */
+		BKE_object_minmax(ct->tar, curveMin, curveMax, TRUE);
 		
 		/* get targetmatrix */
 		if (cu->path && cu->path->data) {

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2012-08-18 13:36:29 UTC (rev 49985)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2012-08-18 14:27:48 UTC (rev 49986)
@@ -2234,7 +2234,7 @@
 	}
 }
 
-void BKE_object_minmax(Object *ob, float min_r[3], float max_r[3])
+void BKE_object_minmax(Object *ob, float min_r[3], float max_r[3], const short use_hidden)
 {
 	BoundBox bb;
 	float vec[3];
@@ -2284,14 +2284,23 @@
 		break;
 		case OB_ARMATURE:
 			if (ob->pose) {
+				bArmature *arm = ob->data;
 				bPoseChannel *pchan;
+
 				for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
-					mul_v3_m4v3(vec, ob->obmat, pchan->pose_head);
-					minmax_v3v3_v3(min_r, max_r, vec);
-					mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail);
-					minmax_v3v3_v3(min_r, max_r, vec);
+
+					if ((use_hidden == FALSE) && (PBONE_VISIBLE(arm, pchan->bone) == FALSE)) {
+						/* pass */
+					}
+					else {
+						mul_v3_m4v3(vec, ob->obmat, pchan->pose_head);
+						minmax_v3v3_v3(min_r, max_r, vec);
+						mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail);
+						minmax_v3v3_v3(min_r, max_r, vec);
+
+						change = TRUE;
+					}
 				}
-				change = TRUE;
 			}
 			break;
 		case OB_MESH:
@@ -2331,9 +2340,9 @@
 	}
 }
 
-int BKE_object_minmax_dupli(Scene *scene, Object *ob, float r_min[3], float r_max[3])
+int BKE_object_minmax_dupli(Scene *scene, Object *ob, float r_min[3], float r_max[3], const short use_hidden)
 {
-	int ok = 0;
+	int ok = FALSE;
 	if ((ob->transflag & OB_DUPLI) == 0) {
 		return ok;
 	}
@@ -2343,7 +2352,10 @@
 		
 		lb = object_duplilist(scene, ob);
 		for (dob = lb->first; dob; dob = dob->next) {
-			if (dob->no_draw == 0) {
+			if ((use_hidden == FALSE) && (dob->no_draw != 0)) {
+				/* pass */
+			}
+			else {
 				BoundBox *bb = BKE_object_boundbox_get(dob->ob);
 
 				if (bb) {
@@ -2354,7 +2366,7 @@
 						minmax_v3v3_v3(r_min, r_max, vec);
 					}
 
-					ok = 1;
+					ok = TRUE;
 				}
 			}
 		}

Modified: trunk/blender/source/blender/editors/object/object_transform.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_transform.c	2012-08-18 13:36:29 UTC (rev 49985)
+++ trunk/blender/source/blender/editors/object/object_transform.c	2012-08-18 14:27:48 UTC (rev 49986)
@@ -759,7 +759,7 @@
 							float min[3], max[3];
 							/* only bounds support */
 							INIT_MINMAX(min, max);
-							BKE_object_minmax_dupli(scene, ob, min, max);
+							BKE_object_minmax_dupli(scene, ob, min, max, TRUE);
 							mid_v3_v3v3(cent, min, max);
 							invert_m4_m4(ob->imat, ob->obmat);
 							mul_m4_v3(ob->imat, cent);

Modified: trunk/blender/source/blender/editors/physics/particle_edit.c
===================================================================
--- trunk/blender/source/blender/editors/physics/particle_edit.c	2012-08-18 13:36:29 UTC (rev 49985)
+++ trunk/blender/source/blender/editors/physics/particle_edit.c	2012-08-18 14:27:48 UTC (rev 49986)
@@ -4111,7 +4111,7 @@
 	}
 
 	if (!ok) {
-		BKE_object_minmax(ob, min, max);
+		BKE_object_minmax(ob, min, max, TRUE);
 		ok= 1;
 	}
   

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2012-08-18 13:36:29 UTC (rev 49985)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_edit.c	2012-08-18 14:27:48 UTC (rev 49986)
@@ -2072,7 +2072,7 @@
 				continue;
 			}
 
-			BKE_object_minmax(base->object, min, max);
+			BKE_object_minmax(base->object, min, max, FALSE);
 		}
 	}
 	if (!onedone) {
@@ -2218,8 +2218,8 @@
 				}
 
 				/* account for duplis */
-				if (BKE_object_minmax_dupli(scene, base->object, min, max) == 0)
-					BKE_object_minmax(base->object, min, max);  /* use if duplis not found */
+				if (BKE_object_minmax_dupli(scene, base->object, min, max, FALSE) == 0)
+					BKE_object_minmax(base->object, min, max, FALSE);  /* use if duplis not found */
 
 				ok = 1;
 			}

Modified: trunk/blender/source/blender/editors/space_view3d/view3d_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2012-08-18 13:36:29 UTC (rev 49985)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_view.c	2012-08-18 14:27:48 UTC (rev 49986)
@@ -1409,7 +1409,7 @@
 	}
 	else {
 		if (scene->obedit) {
-			BKE_object_minmax(scene->obedit, min, max);
+			BKE_object_minmax(scene->obedit, min, max, FALSE);
 			
 			ok = TRUE;
 		
@@ -1419,7 +1419,7 @@
 		else {
 			for (base = FIRSTBASE; base; base = base->next) {
 				if (TESTBASE(v3d, base)) {
-					BKE_object_minmax(base->object, min, max);
+					BKE_object_minmax(base->object, min, max, FALSE);
 					base->lay |= locallay;
 					base->object->lay = base->lay;
 					ok = TRUE;




More information about the Bf-blender-cvs mailing list