[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12451] trunk/blender/source/blender:

Brecht Van Lommel brechtvanlommel at pandora.be
Thu Nov 1 13:55:47 CET 2007


Revision: 12451
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12451
Author:   blendix
Date:     2007-11-01 13:55:47 +0100 (Thu, 01 Nov 2007)

Log Message:
-----------

Hinge Bone Transform
====================

This changes the way hinge bones are transformed when their parent bones
are also selected. Before it just disabled transform for these, now they
are rotated and scaled as well, but without influencing the transform
center, which gives behaviour as if they were regular bones.

Modified Paths:
--------------
    trunk/blender/source/blender/include/transform.h
    trunk/blender/source/blender/makesdna/DNA_armature_types.h
    trunk/blender/source/blender/src/transform_conversions.c
    trunk/blender/source/blender/src/transform_generics.c

Modified: trunk/blender/source/blender/include/transform.h
===================================================================
--- trunk/blender/source/blender/include/transform.h	2007-11-01 12:40:46 UTC (rev 12450)
+++ trunk/blender/source/blender/include/transform.h	2007-11-01 12:55:47 UTC (rev 12451)
@@ -269,6 +269,7 @@
 	#define TD_VERSE_VERT		64
 #endif
 #define TD_TIMEONLY			128
+#define TD_NOCENTER			256
 
 /* transsnap->status */
 #define SNAP_ON			1

Modified: trunk/blender/source/blender/makesdna/DNA_armature_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_armature_types.h	2007-11-01 12:40:46 UTC (rev 12450)
+++ trunk/blender/source/blender/makesdna/DNA_armature_types.h	2007-11-01 12:55:47 UTC (rev 12451)
@@ -148,5 +148,7 @@
 #define		BONE_NO_DEFORM		4096
 			/* set to prevent destruction of its unkeyframed pose (after transform) */
 #define 	BONE_UNKEYED		8192
+			/* set to prevent hinge child bones from influencing the transform center */
+#define 	BONE_HINGE_CHILD_TRANSFORM 16384
 
 #endif

Modified: trunk/blender/source/blender/src/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/src/transform_conversions.c	2007-11-01 12:40:46 UTC (rev 12450)
+++ trunk/blender/source/blender/src/transform_conversions.c	2007-11-01 12:55:47 UTC (rev 12451)
@@ -529,6 +529,8 @@
 	
 	td->ob = ob;
 	td->flag= TD_SELECTED|TD_USEQUAT;
+	if(bone->flag & BONE_HINGE_CHILD_TRANSFORM)
+		td->flag |= TD_NOCENTER;
 	td->protectflag= pchan->protectflag;
 	
 	td->loc = pchan->loc;
@@ -617,7 +619,11 @@
 	Bone *bone= lb->first;
 	
 	for(;bone;bone= bone->next) {
-		bone->flag &= ~BONE_TRANSFORM;
+		if(bone->flag & BONE_HINGE)
+			bone->flag |= BONE_HINGE_CHILD_TRANSFORM;
+		else
+			bone->flag &= ~BONE_TRANSFORM;
+
 		bone_children_clear_transflag(&bone->childbase);
 	}
 }
@@ -638,6 +644,8 @@
 				bone->flag |= BONE_TRANSFORM;
 			else
 				bone->flag &= ~BONE_TRANSFORM;
+
+			bone->flag &= ~BONE_HINGE_CHILD_TRANSFORM;
 		}
 	}
 	
@@ -658,8 +666,10 @@
 			
 			if(t->mode==TFM_TRANSLATION) {
 				if( has_targetless_ik(pchan)==NULL ) {
-					if(pchan->parent && (pchan->bone->flag & BONE_CONNECTED))
-						t->mode= TFM_ROTATION;
+					if(pchan->parent && (pchan->bone->flag & BONE_CONNECTED)) {
+						if(!(pchan->bone->flag & BONE_HINGE_CHILD_TRANSFORM))
+							t->mode= TFM_ROTATION;
+					}
 					else if((pchan->protectflag & OB_LOCK_LOC)==OB_LOCK_LOC)
 						t->mode= TFM_ROTATION;
 				}

Modified: trunk/blender/source/blender/src/transform_generics.c
===================================================================
--- trunk/blender/source/blender/src/transform_generics.c	2007-11-01 12:40:46 UTC (rev 12450)
+++ trunk/blender/source/blender/src/transform_generics.c	2007-11-01 12:55:47 UTC (rev 12451)
@@ -782,7 +782,8 @@
 	
 	for(i = 0; i < t->total; i++) {
 		if (t->data[i].flag & TD_SELECTED) {
-			VecAddf(partial, partial, t->data[i].center);
+			if (!(t->data[i].flag & TD_NOCENTER))
+				VecAddf(partial, partial, t->data[i].center);
 		}
 		else {
 			/* 
@@ -807,7 +808,8 @@
 	for(i = 0; i < t->total; i++) {
 		if (i) {
 			if (t->data[i].flag & TD_SELECTED) {
-				MinMax3(min, max, t->data[i].center);
+				if (!(t->data[i].flag & TD_NOCENTER))
+					MinMax3(min, max, t->data[i].center);
 			}
 			else {
 				/* 





More information about the Bf-blender-cvs mailing list