[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17375] branches/animsys2/source/blender: AnimSys2: More DopeSheet Improvements (ShapeKeys...)

Joshua Leung aligorith at gmail.com
Sun Nov 9 10:43:33 CET 2008


Revision: 17375
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17375
Author:   aligorith
Date:     2008-11-09 10:43:32 +0100 (Sun, 09 Nov 2008)

Log Message:
-----------
AnimSys2: More DopeSheet Improvements (ShapeKeys...)

* Added ShapeKeys to DopeSheet
* Sliders now work in the DopeSheet

Modified Paths:
--------------
    branches/animsys2/source/blender/include/BIF_editaction.h
    branches/animsys2/source/blender/makesdna/DNA_key_types.h
    branches/animsys2/source/blender/src/drawaction.c
    branches/animsys2/source/blender/src/editaction.c

Modified: branches/animsys2/source/blender/include/BIF_editaction.h
===================================================================
--- branches/animsys2/source/blender/include/BIF_editaction.h	2008-11-09 06:28:37 UTC (rev 17374)
+++ branches/animsys2/source/blender/include/BIF_editaction.h	2008-11-09 09:43:32 UTC (rev 17375)
@@ -53,6 +53,7 @@
 	ACTTYPE_FILLACTD,
 	ACTTYPE_FILLIPOD,
 	ACTTYPE_FILLCOND,
+	ACTTYPE_FILLSKED,
 	
 	ACTTYPE_ACHAN,
 	ACTTYPE_CONCHAN,
@@ -70,6 +71,7 @@
 #define EXPANDED_OBJC(ob) ((ob->nlaflag & OB_ADS_COLLAPSED)==0)
 #define FILTER_IPO_OBJC(ob) ((ob->nlaflag & OB_ADS_SHOWIPO))
 #define FILTER_CON_OBJC(ob) ((ob->nlaflag & OB_ADS_SHOWCONS)) 
+#define FILTER_SKE_OBJC(key) ((key->flag & KEYBLOCK_EXPAND))
 #define SEL_ACTC(actc) ((actc->flag & ACTC_SELECTED))
 #define EXPANDED_ACTC(actc) ((actc->flag & ACTC_EXPANDED))
 

Modified: branches/animsys2/source/blender/makesdna/DNA_key_types.h
===================================================================
--- branches/animsys2/source/blender/makesdna/DNA_key_types.h	2008-11-09 06:28:37 UTC (rev 17374)
+++ branches/animsys2/source/blender/makesdna/DNA_key_types.h	2008-11-09 09:43:32 UTC (rev 17375)
@@ -86,6 +86,7 @@
 
 /* keyblock->flag */
 #define KEYBLOCK_MUTE	1
+#define KEYBLOCK_EXPAND	2
 
 #endif
 

Modified: branches/animsys2/source/blender/src/drawaction.c
===================================================================
--- branches/animsys2/source/blender/src/drawaction.c	2008-11-09 06:28:37 UTC (rev 17374)
+++ branches/animsys2/source/blender/src/drawaction.c	2008-11-09 09:43:32 UTC (rev 17375)
@@ -300,7 +300,7 @@
     block= uiNewBlock (&curarea->uiblocks, str, 
                        UI_EMBOSS, UI_HELV, curarea->win);
 
-	x = NAMEWIDTH + 1;
+	x = (float)NAMEWIDTH + 1;
     y = 0.0f;
 	
 	uiBlockSetEmboss(block, UI_EMBOSSN);
@@ -336,8 +336,8 @@
 						bActionChannel *achan = (bActionChannel *)ale->owner;
 						IpoCurve *icu = (IpoCurve *)ale->key_data;
 						
-						/* only show if action channel is selected */
-						if (SEL_ACHAN(achan)) {
+						/* only show if owner is selected */
+						if ((ale->ownertype == ACTTYPE_OBJECT) || SEL_ACHAN(achan)) {
 							make_icu_slider(block, icu,
 											(int)x, (int)y, SLIDERWIDTH-2, CHANNELHEIGHT-2, 
 											"Slider to control current value of Constraint Influence");
@@ -349,8 +349,8 @@
 						bActionChannel *achan = (bActionChannel *)ale->owner;
 						IpoCurve *icu = (IpoCurve *)ale->key_data;
 						
-						/* only show if action channel is selected */
-						if (SEL_ACHAN(achan)) {
+						/* only show if owner is selected */
+						if ((ale->ownertype == ACTTYPE_OBJECT) || SEL_ACHAN(achan)) {
 							make_icu_slider(block, icu,
 											(int)x, (int)y, SLIDERWIDTH-2, CHANNELHEIGHT-2, 
 											"Slider to control current value of IPO-Curve");
@@ -359,7 +359,19 @@
 						break;
 					case ACTTYPE_SHAPEKEY: /* shapekey channel */
 					{
-						// TODO...
+						Object *ob= (Object *)ale->id;
+						IpoCurve *icu= (IpoCurve *)ale->key_data;
+						
+						// TODO: only show if object is active 
+						if (icu) {
+							make_icu_slider(block, icu,
+										(int)x, (int)y, SLIDERWIDTH-2, CHANNELHEIGHT-2, 
+										"Slider to control ShapeKey");
+						}
+						else if (ob && ale->index) {
+							make_rvk_slider(block, ob, ale->index, 
+									(int)x, (int)y, SLIDERWIDTH-2, CHANNELHEIGHT-1, "Slider to control Shape Keys");
+						}
 					}
 						break;
 				}
@@ -531,6 +543,23 @@
 					sprintf(name, "IPO Curves");
 				}
 					break;
+				case ACTTYPE_FILLSKED: /* shapekeys (dopesheet) expand widget */
+				{
+					Key *key= (Key *)ale->data;
+					
+					group = 4;
+					indent = 1;
+					special = ICON_EDIT;
+					
+					if (FILTER_SKE_OBJC(key))	
+						expand = ICON_TRIA_DOWN;
+					else
+						expand = ICON_TRIA_RIGHT;
+						
+					//sel = SEL_OBJC(base);
+					sprintf(name, "Shape Keys");
+				}
+					break;
 				case ACTTYPE_FILLCOND: /* constraint channels (dopesheet) expand widget */
 				{
 					Object *ob = (Object *)ale->data;
@@ -712,6 +741,8 @@
 					indent = 0;
 					special = -1;
 					
+					offset= (ale->id) ? 21 : 0;
+					
 					if (kb->name[0] == '\0')
 						sprintf(name, "Key %d", ale->index);
 					else
@@ -1490,7 +1521,7 @@
 		draw_channel_names();
 		
 		if(sa->winx > 50 + NAMEWIDTH + SLIDERWIDTH) {
-			if (act) {
+			if (ELEM(G.saction->mode, SACTCONT_ACTION, SACTCONT_DOPESHEET)) {
 				/* if there is an action, draw sliders for its
 				 * ipo-curve channels in the action window
 				 */

Modified: branches/animsys2/source/blender/src/editaction.c
===================================================================
--- branches/animsys2/source/blender/src/editaction.c	2008-11-09 06:28:37 UTC (rev 17374)
+++ branches/animsys2/source/blender/src/editaction.c	2008-11-09 09:43:32 UTC (rev 17375)
@@ -239,6 +239,16 @@
 				ale->datatype= ALE_IPO;
 			}
 				break;
+			case ACTTYPE_FILLSKED:
+			{
+				Key *key= (Key *)data;
+				
+				ale->flag = FILTER_SKE_OBJC(key);
+				
+				ale->key_data= key->ipo;
+				ale->datatype= ALE_IPO;
+			}
+				break;
 			case ACTTYPE_FILLCOND:
 			{
 				Object *ob= (Object *)data;
@@ -537,11 +547,12 @@
 	}
 }
 
-static void actdata_filter_shapekey (ListBase *act_data, Key *key, int filter_mode)
+static void actdata_filter_shapekey (ListBase *act_data, Key *key, int filter_mode, void *owner, short ownertype)
 {
 	bActListElem *ale;
 	KeyBlock *kb;
 	IpoCurve *icu;
+	short owned= (owner && ownertype)? 1 : 0;
 	int i;
 	
 	/* are we filtering for display or editing */
@@ -552,7 +563,7 @@
 		/* loop through possible shapekeys, manually creating entries */
 		for (i= 1; i < key->totkey; i++) {
 			ale= MEM_callocN(sizeof(bActListElem), "bActListElem");
-			kb = kb->next;
+			kb = kb->next; /* do this even on the first try, as the first is 'Basis' (which doesn't get included) */
 			
 			ale->data= kb;
 			ale->type= ACTTYPE_SHAPEKEY; /* 'abused' usage of this type */
@@ -571,6 +582,8 @@
 				}
 			}
 			
+			if (owned) ale->id= owner;
+			
 			BLI_addtail(act_data, ale);
 		}
 	}
@@ -579,12 +592,18 @@
 		if (key->ipo) {
 			if (filter_mode & ACTFILTER_IPOKEYS) {
 				ale= make_new_actlistelem(key->ipo, ACTTYPE_IPO, key, ACTTYPE_SHAPEKEY);
-				if (ale) BLI_addtail(act_data, ale);
+				if (ale) {
+					if (owned) ale->id= owner;
+					BLI_addtail(act_data, ale);
+				}
 			}
 			else {
 				for (icu= key->ipo->curve.first; icu; icu=icu->next) {
 					ale= make_new_actlistelem(icu, ACTTYPE_ICU, key, ACTTYPE_SHAPEKEY);
-					if (ale) BLI_addtail(act_data, ale);
+					if (ale) {
+						if (owned) ale->id= owner;
+						BLI_addtail(act_data, ale);
+					}
 				}
 			}
 		}
@@ -647,11 +666,12 @@
 	bActListElem *ale=NULL;
 	Scene *sce= (Scene *)ads->source;
 	Object *ob= base->object;
+	Key *key= ob_get_key(ob);
 	
 	/* add this object as a channel first */
 	if (!(filter_mode & ACTFILTER_ONLYICU) && !(filter_mode & ACTFILTER_IPOKEYS)) {
 		/* check if filtering by selection */
-		if (!(filter_mode & ACTFILTER_SEL) || ((base->flag & SELECT) || (base == sce->basact)) {
+		if ( !(filter_mode & ACTFILTER_SEL) || ((base->flag & SELECT) || (base == sce->basact)) ) {
 			ale= make_new_actlistelem(base, ACTTYPE_OBJECT, NULL, ACTTYPE_NONE);
 			if (ale) BLI_addtail(act_data, ale);
 		}
@@ -701,6 +721,20 @@
 		}
 	}
 	
+	/* ShapeKeys? */
+	if (key) {
+		/* include shapekey-expand widget? */
+		if ((filter_mode & ACTFILTER_CHANNELS) && !(filter_mode & (ACTFILTER_IPOKEYS|ACTFILTER_ONLYICU))) {
+			ale= make_new_actlistelem(key, ACTTYPE_FILLSKED, base, ACTTYPE_OBJECT);
+			if (ale) BLI_addtail(act_data, ale);
+		}
+		
+		/* add channels */
+		if (FILTER_SKE_OBJC(key) || (filter_mode & ACTFILTER_IPOKEYS) || (filter_mode & ACTFILTER_ONLYICU)) {
+			actdata_filter_shapekey (act_data, key, filter_mode, ob, ACTTYPE_OBJECT);
+		}
+	}
+	
 	/* Constraint Channels? */
 	if (ob->constraintChannels.first) {
 		bConstraintChannel *conchan;
@@ -753,6 +787,7 @@
 		/* check if there's an object (all the relevant checks are done in the ob-function) */
 		if (base->object) {
 			Object *ob= base->object;
+			Key *key= ob_get_key(ob);
 			
 			/* firstly, check if object can be included, by the following factors:
 			 *	- if only visible, must check for layer and also viewport visibility
@@ -767,7 +802,7 @@
 				/* outliner restrict-flag */
 				if (ob->restrictflag & OB_RESTRICT_VIEW) continue;
 			}
-			if (!(ob->ipo) && !(ob->action) && !(ob->constraintChannels.first)) {
+			if (!(ob->ipo) && !(ob->action) && !(ob->constraintChannels.first) && !(key)) {
 				/* no animation data to show... */
 				continue;
 			}
@@ -796,7 +831,7 @@
 				actdata_filter_action(act_data, data, filter_mode, NULL, ACTTYPE_NONE);
 				break;
 			case ACTCONT_SHAPEKEY:
-				actdata_filter_shapekey(act_data, data, filter_mode);
+				actdata_filter_shapekey(act_data, data, filter_mode, NULL, ACTTYPE_NONE);
 				break;
 			case ACTCONT_GPENCIL:
 				actdata_filter_gpencil(act_data, data, filter_mode);
@@ -4405,6 +4440,12 @@
 				ob->nlaflag ^= OB_ADS_SHOWCONS;
 			}
 				break;
+		case ACTTYPE_FILLSKED:
+			{
+				Key *key= (Key *)act_channel;
+				key->flag ^= KEYBLOCK_EXPAND;
+			}
+				break;
 			
 		case ACTTYPE_GROUP: 
 			{
@@ -4575,6 +4616,9 @@
 				}
 			}
 				break;
+		case ACTTYPE_SHAPEKEY:
+			/* TODO: shapekey channels cannot be selected atm... */
+			break;
 		default:
 			printf("Error: Invalid channel type in mouse_actionchannels \n");
 			return;





More information about the Bf-blender-cvs mailing list