[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19748] branches/blender2.5/blender/source /blender: 2.5 PoseLib/KeyingSets bugfixes:

Joshua Leung aligorith at gmail.com
Thu Apr 16 02:33:40 CEST 2009


Revision: 19748
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19748
Author:   aligorith
Date:     2009-04-16 02:33:40 +0200 (Thu, 16 Apr 2009)

Log Message:
-----------
2.5 PoseLib/KeyingSets bugfixes:

* Replaced a quicky hack needed to get PoseLib working with a proper new group-naming option for KeyingSets. Now, all builtin KeyingSets will use the name of the data (i.e. Object or PoseChannel) as the name of the group new channels are added to

* Fixed a bug with LocRotScale builtin KeyingSet, which meant that scale keyframes were not getting added.

* TAB key (toggle original pose) now works again. Previously, events were flying past too quickly. 

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c
    branches/blender2.5/blender/source/blender/editors/armature/poselib.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_anim_types.h
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_animation.c

Modified: branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c	2009-04-16 00:00:45 UTC (rev 19747)
+++ branches/blender2.5/blender/source/blender/editors/animation/keyingsets.c	2009-04-16 00:33:40 UTC (rev 19748)
@@ -703,21 +703,21 @@
 	/* Keying Set - "Location" ---------- */
 	BI_KS_DEFINE_BEGIN("Location", 0)
 		BI_KS_PATHS_BEGIN(1)
-			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_KSNAME) 
+			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM) 
 		BI_KS_PATHS_END
 	BI_KS_DEFINE_END,
 
 	/* Keying Set - "Rotation" ---------- */
 	BI_KS_DEFINE_BEGIN("Rotation", 0)
 		BI_KS_PATHS_BEGIN(1)
-			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_KSNAME) 
+			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM) 
 		BI_KS_PATHS_END
 	BI_KS_DEFINE_END,
 	
 	/* Keying Set - "Scaling" ---------- */
 	BI_KS_DEFINE_BEGIN("Scaling", 0)
 		BI_KS_PATHS_BEGIN(1)
-			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "scale", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_KSNAME) 
+			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "scale", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM) 
 		BI_KS_PATHS_END
 	BI_KS_DEFINE_END,
 	
@@ -725,17 +725,17 @@
 	/* Keying Set - "LocRot" ---------- */
 	BI_KS_DEFINE_BEGIN("LocRot", 0)
 		BI_KS_PATHS_BEGIN(2)
-			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_KSNAME), 
-			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_KSNAME) 
+			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM), 
+			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM) 
 		BI_KS_PATHS_END
 	BI_KS_DEFINE_END,
 	
 	/* Keying Set - "LocRotScale" ---------- */
 	BI_KS_DEFINE_BEGIN("LocRotScale", 0)
-		BI_KS_PATHS_BEGIN(2)
-			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_KSNAME), 
-			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_KSNAME), 
-			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "scale", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_KSNAME) 
+		BI_KS_PATHS_BEGIN(3)
+			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM), 
+			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM), 
+			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "scale", 0, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM) 
 		BI_KS_PATHS_END
 	BI_KS_DEFINE_END,
 	
@@ -743,22 +743,22 @@
 	/* Keying Set - "VisualLoc" ---------- */
 	BI_KS_DEFINE_BEGIN("VisualLoc", 0)
 		BI_KS_PATHS_BEGIN(1)
-			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_KSNAME) 
+			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM) 
 		BI_KS_PATHS_END
 	BI_KS_DEFINE_END,
 
 	/* Keying Set - "Rotation" ---------- */
 	BI_KS_DEFINE_BEGIN("VisualRot", 0)
 		BI_KS_PATHS_BEGIN(1)
-			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_KSNAME) 
+			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM) 
 		BI_KS_PATHS_END
 	BI_KS_DEFINE_END,
 	
 	/* Keying Set - "VisualLocRot" ---------- */
 	BI_KS_DEFINE_BEGIN("VisualLocRot", 0)
 		BI_KS_PATHS_BEGIN(2)
-			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_KSNAME), 
-			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_KSNAME) 
+			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "location", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM), 
+			BI_KSP_DEFINE(ID_OB, KSP_TEMPLATE_OBJECT|KSP_TEMPLATE_PCHAN, "rotation", INSERTKEY_MATRIX, KSP_FLAG_WHOLE_ARRAY, KSP_GROUP_TEMPLATE_ITEM) 
 		BI_KS_PATHS_END
 	BI_KS_DEFINE_END
 };
@@ -1110,17 +1110,15 @@
 					BLI_dynstr_free(pathds);
 				}
 				
-				/* if the group name settings have not been overriden for the entire KeyingSet,
-				 * get pointer to name of group to add channels to 
+				/* get pointer to name of group to add channels to 
+				 *	- KSP_GROUP_TEMPLATE_ITEM is handled above while constructing the paths 
 				 */
-				if ((ks->flag & KEYINGSET_GROUPNAMES_OVERRIDE)==0) {
-					if (ksp->groupmode == KSP_GROUP_NONE)
-						groupname= NULL;
-					else if (ksp->groupmode == KSP_GROUP_KSNAME)
-						groupname= ks->name;
-					else
-						groupname= ksp->group;
-				}
+				if (ksp->groupmode == KSP_GROUP_NONE)
+					groupname= NULL;
+				else if (ksp->groupmode == KSP_GROUP_KSNAME)
+					groupname= ks->name;
+				else if (ksp->groupmode == KSP_GROUP_NAMED)
+					groupname= ksp->group;
 				
 				/* init arraylen and i - arraylen should be greater than i so that
 				 * normal non-array entries get keyframed correctly

Modified: branches/blender2.5/blender/source/blender/editors/armature/poselib.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/armature/poselib.c	2009-04-16 00:00:45 UTC (rev 19747)
+++ branches/blender2.5/blender/source/blender/editors/armature/poselib.c	2009-04-16 00:33:40 UTC (rev 19748)
@@ -393,10 +393,6 @@
 	/* make sure we've got KeyingSets to use */
 	poselib_get_builtin_keyingsets();
 	
-	/* turn on group-name overrides temporarily (only here) */
-	poselib_ks_locrotscale->flag |= KEYINGSET_GROUPNAMES_OVERRIDE;
-	poselib_ks_locrotscale2->flag |= KEYINGSET_GROUPNAMES_OVERRIDE;
-	
 	/* init common-key-source for use by KeyingSets */
 	memset(&cks, 0, sizeof(bCommonKeySrc));
 	cks.id= &ob->id;
@@ -418,10 +414,6 @@
 		}
 	}
 	
-	/* turn off group-name overrides so they don't affect the KeyingSets when used elsewhere */
-	poselib_ks_locrotscale->flag &= ~KEYINGSET_GROUPNAMES_OVERRIDE;
-	poselib_ks_locrotscale2->flag &= ~KEYINGSET_GROUPNAMES_OVERRIDE;
-	
 	/* store new 'active' pose number */
 	act->active_marker= BLI_countlist(&act->markers);
 	
@@ -662,13 +654,13 @@
 /* Makes a copy of the current pose for restoration purposes - doesn't do constraints currently */
 static void poselib_backup_posecopy (tPoseLib_PreviewData *pld)
 {
-	bActionChannel *achan;
+	bActionGroup *agrp;
 	bPoseChannel *pchan;
 	
 	/* for each posechannel that has an actionchannel in */
-	for (achan= pld->act->chanbase.first; achan; achan= achan->next) {
+	for (agrp= pld->act->groups.first; agrp; agrp= agrp->next) {
 		/* try to find posechannel */
-		pchan= get_pose_channel(pld->pose, achan->name);
+		pchan= get_pose_channel(pld->pose, agrp->name);
 		
 		/* backup data if available */
 		if (pchan) {
@@ -1085,8 +1077,11 @@
 				
 			/* quicky compare to original */
 			case TABKEY:
-				pld->flag &= ~PL_PREVIEW_SHOWORIGINAL;
-				pld->redraw= PL_PREVIEW_REDRAWALL;
+				/* only respond to one event */
+				if (event->val == 0) {
+					pld->flag &= ~PL_PREVIEW_SHOWORIGINAL;
+					pld->redraw= PL_PREVIEW_REDRAWALL;
+				}
 				break;
 		}
 		
@@ -1113,8 +1108,11 @@
 			
 		/* toggle between original pose and poselib pose*/
 		case TABKEY:
-			pld->flag |= PL_PREVIEW_SHOWORIGINAL;
-			pld->redraw= PL_PREVIEW_REDRAWALL;
+			/* only respond to one event */
+			if (event->val == 0) {
+				pld->flag |= PL_PREVIEW_SHOWORIGINAL;
+				pld->redraw= PL_PREVIEW_REDRAWALL;
+			}
 			break;
 		
 		/* change to previous pose (cyclic) */
@@ -1349,7 +1347,6 @@
 		/* updates */
 		if (IS_AUTOKEY_MODE(scene, NORMAL)) {
 			//remake_action_ipos(ob->action);
-			
 		}
 		else {
 			/* need to trick depgraph, action is not allowed to execute on pose */
@@ -1440,6 +1437,28 @@
 	return OPERATOR_RUNNING_MODAL;
 }
 
+/* Repeat operator */
+static int poselib_preview_exec (bContext *C, wmOperator *op)
+{
+	tPoseLib_PreviewData *pld;
+	
+	/* check if everything is ok, and init settings for modal operator */
+	poselib_preview_init_data(C, op);
+	pld= (tPoseLib_PreviewData *)op->customdata;
+	
+	if (pld->state == PL_PREVIEW_ERROR) {
+		/* an error occurred, so free temp mem used */
+		poselib_preview_cleanup(C, op);
+		return OPERATOR_CANCELLED;
+	}
+	
+	/* apply the active pose */
+	poselib_preview_apply(C, op);
+	
+	/* cleanup */
+	return poselib_preview_exit(C, op);
+}
+
 void POSELIB_OT_browse_interactive (wmOperatorType *ot)
 {
 	/* identifiers */
@@ -1451,7 +1470,7 @@
 	ot->invoke= poselib_preview_invoke;
 	ot->modal= poselib_preview_modal;
 	ot->cancel= poselib_preview_cancel;
-	//ot->exec= poselib_preview_exec;
+	ot->exec= poselib_preview_exec;
 	ot->poll= ED_operator_posemode;
 	
 	/* flags */

Modified: branches/blender2.5/blender/source/blender/makesdna/DNA_anim_types.h
===================================================================
--- branches/blender2.5/blender/source/blender/makesdna/DNA_anim_types.h	2009-04-16 00:00:45 UTC (rev 19747)
+++ branches/blender2.5/blender/source/blender/makesdna/DNA_anim_types.h	2009-04-16 00:33:40 UTC (rev 19748)
@@ -510,12 +510,16 @@
 
 /* KS_Path->groupmode */
 enum {
-		/* path should be grouped using its own group-name */
+		/* path should be grouped using group name stored in path */
 	KSP_GROUP_NAMED = 0,
 		/* path should not be grouped at all */
 	KSP_GROUP_NONE,
-		/* path should be grouped under an ActionGroup KeyingSet's name */
+		/* path should be grouped using KeyingSet's name */
 	KSP_GROUP_KSNAME,
+		/* path should be grouped using name of inner-most context item from templates 
+		 * 	- this is most useful for relative KeyingSets only
+		 */
+	KSP_GROUP_TEMPLATE_ITEM,
 } eKSP_Grouping;
 
 /* KS_Path->templates  (Template Flags)
@@ -561,11 +565,6 @@
 	KEYINGSET_BUILTIN		= (1<<0),

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list