[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19138] branches/blender2.5/blender/source /blender/editors: 2.5 - Various animation bugfixes

Joshua Leung aligorith at gmail.com
Sat Feb 28 10:59:54 CET 2009


Revision: 19138
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19138
Author:   aligorith
Date:     2009-02-28 10:58:58 +0100 (Sat, 28 Feb 2009)

Log Message:
-----------
2.5 - Various animation bugfixes

* When inserting keyframes, newly created groups are no longer created with expanded + active flags set. The former should work better and keep the views less crowded by default when there are many F-Curves.
* Fixed crash when trying to select action groups. This only seemed to happen in one of the BBB files...
* Settings that have been tagged in RNA as being un-animateable are now ignored when creating Keying Sets.
* Removed some un-needed old code from keyframing code. I've still left in the old-style builtin KeyingSets from about 2.48, since those will be useful reference when setting up the new builtin KeyingSets.
* Removed obsolete correction factor for Visual Keying -> object rotations.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c
    branches/blender2.5/blender/source/blender/editors/animation/keyframing.c
    branches/blender2.5/blender/source/blender/editors/space_outliner/outliner.c

Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c	2009-02-28 09:25:42 UTC (rev 19137)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c	2009-02-28 09:58:58 UTC (rev 19138)
@@ -1296,7 +1296,7 @@
 					for (a=0; a < ob->totcol; a++) {
 						Material *ma= give_current_material(ob, a);
 						
-						if (ANIMDATA_HAS_KEYS(ma)) {
+						if ((ma) && ANIMDATA_HAS_KEYS(ma)) {
 							matOk= 1;
 							break;
 						}

Modified: branches/blender2.5/blender/source/blender/editors/animation/keyframing.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/keyframing.c	2009-02-28 09:25:42 UTC (rev 19137)
+++ branches/blender2.5/blender/source/blender/editors/animation/keyframing.c	2009-02-28 09:58:58 UTC (rev 19138)
@@ -130,7 +130,7 @@
 				/* Add a new group, and make it active */
 				grp= MEM_callocN(sizeof(bActionGroup), "bActionGroup");
 				
-				grp->flag |= (AGRP_ACTIVE|AGRP_SELECTED|AGRP_EXPANDED);
+				grp->flag = AGRP_SELECTED;
 				BLI_snprintf(grp->name, 64, group);
 				
 				BLI_addtail(&act->groups, grp);
@@ -656,7 +656,7 @@
 				float eul[3];
 				
 				Mat4ToEul(ob->obmat, eul);
-				return eul[array_index]*(5.72958f);
+				return eul[array_index];
 			}
 		}
 	}
@@ -854,7 +854,6 @@
 			delete_fcurve_key(fcu, i, 1);
 			
 			/* Only delete curve too if there are no points (we don't need to check for drivers, as they're kept separate) */
-			// XXX how do we handle drivers then?
 			if (fcu->totvert == 0) {
 				BLI_remlink(&act->curves, fcu);
 				free_fcurve(fcu);
@@ -1800,342 +1799,6 @@
 	*ksc= NULL;
 }
 
-
-/* get keyingsets for appropriate context */
-static void commonkey_context_get (const bContext *C, ScrArea *sa, short mode, ListBase *sources, bKeyingContext **ksc)
-{
-	/* get current view if no view is defined */
-	if (sa == NULL)
-		sa= CTX_wm_area(C);
-	
-	/* check view type */
-	switch (sa->spacetype) {
-		/* 3d view - first one tested as most often used */
-		case SPACE_VIEW3D:
-		{
-			commonkey_context_getv3d(C, sources, ksc);
-		}
-			break;
-			
-		/* buttons view */
-		case SPACE_BUTS:
-		{
-			commonkey_context_getsbuts(C, sources, ksc);
-		}
-			break;
-			
-		/* spaces with their own methods */
-		case SPACE_IPO:
-			//if (mode == COMMONKEY_MODE_INSERT)
-			//	insertkey_editipo(); // XXX old calls...
-			return;
-		case SPACE_ACTION:
-			//if (mode == COMMONKEY_MODE_INSERT)
-			//	insertkey_action(); // XXX old calls...
-			return;
-			
-		/* timeline view - keyframe buttons */
-		case SPACE_TIME:
-		{
-			bScreen *sc= CTX_wm_screen(C);
-			ScrArea *sab;
-			int bigarea= 0;
-			
-			/* try to find largest 3d-view available 
-			 * (mostly of the time, this is what when user will want this,
-			 *  as it's a standard feature in all other apps) 
-			 */
-			//sab= find_biggest_area_of_type(SPACE_VIEW3D);
-			sab= NULL; // XXX for now...
-			if (sab) {
-				commonkey_context_getv3d(C, sources, ksc);
-				return;
-			}
-			
-			/* if not found, sab is now NULL, so perform own biggest area test */
-			for (sa= sc->areabase.first; sa; sa= sa->next) { // XXX this has changed!
-				int area= sa->winx * sa->winy;
-				
-				if (sa->spacetype != SPACE_TIME) {
-					if ( (!sab) || (area > bigarea) ) {
-						sab= sa;
-						bigarea= area;
-					}
-				}
-			}
-			
-			/* use whichever largest area was found (it shouldn't be a time window) */
-			if (sab)
-				commonkey_context_get(C, sab, mode, sources, ksc);
-		}
-			break;
-	}
-}
-
-/* flush updates after all operations */
-static void commonkey_context_finish (const bContext *C, ListBase *sources)
-{
-	ScrArea *curarea= CTX_wm_area(C);
-	Scene *scene= CTX_data_scene(C);
-	
-	/* check view type */
-	switch (curarea->spacetype) {
-		/* 3d view - first one tested as most often used */
-		case SPACE_VIEW3D:
-		{
-			/* either pose or object level */
-			if (OBACT && (OBACT->pose)) {	
-				//Object *ob= OBACT;
-				
-				/* recalculate ipo handles, etc. */
-				// XXX this method has been removed!
-				//if (ob->action)
-				//	remake_action_ipos(ob->action);
-				
-				/* recalculate bone-paths on adding new keyframe? */
-				// XXX missing function
-				// TODO: currently, there is no setting to turn this on/off globally
-				//if (ob->pose->flag & POSE_RECALCPATHS)
-				//	pose_recalculate_paths(ob);
-			}
-			else {
-				bCommonKeySrc *cks;
-				
-				/* loop over bases (as seen in sources) */
-				for (cks= sources->first; cks; cks= cks->next) {
-					Object *ob= (Object *)cks->id;
-					
-					/* simply set recalc flag */
-					ob->recalc |= OB_RECALC_OB;
-				}
-			}
-		}
-			break;
-	}
-}
-
-/* flush refreshes after undo */
-static void commonkey_context_refresh (bContext *C)
-{
-	ScrArea *curarea= CTX_wm_area(C);
-	
-	/* check view type */
-	switch (curarea->spacetype) {
-		/* 3d view - first one tested as most often used */
-		case SPACE_VIEW3D:
-		{
-			/* do refreshes */
-			ED_anim_dag_flush_update(C);
-		}
-			break;
-			
-		/* buttons window */
-		case SPACE_BUTS:
-		{
-			//allspace(REMAKEIPO, 0);
-			//allqueue(REDRAWVIEW3D, 0);
-			//allqueue(REDRAWMARKER, 0);
-		}
-			break;
-	}
-}
-
-/* --- */
-
-/* Get the keying set that was chosen by the user from the menu */
-static bKeyingSet *get_keyingset_fromcontext (bKeyingContext *ksc, short index)
-{
-	/* check if index is valid */
-	if (ELEM(NULL, ksc, ksc->keyingsets))
-		return NULL;
-	if ((index < 1) || (index > ksc->tot))
-		return NULL;
-		
-	/* index starts from 1, and should directly correspond to keyingset in array */
-	return (bKeyingSet *)(ksc->keyingsets + (index - 1));
-}
-
-/* ---------------- Keyframe Management API -------------------- */
-
-/* Display a menu for handling the insertion of keyframes based on the active view */
-void common_modifykey (bContext *C, short mode)
-{
-	ListBase dsources = {NULL, NULL};
-	bKeyingContext *ksc= NULL;
-	bCommonKeySrc *cks;
-	bKeyingSet *ks = NULL;
-	char *menustr, buf[64];
-	short menu_nr;
-	
-	/* check if mode is valid */
-	if (ELEM(mode, COMMONKEY_MODE_INSERT, COMMONKEY_MODE_DELETE)==0)
-		return;
-	
-	/* delegate to other functions or get keyingsets to use 
-	 *	- if the current area doesn't have its own handling, there will be data returned...
-	 */
-	commonkey_context_get(C, NULL, mode, &dsources, &ksc);
-	
-	/* check that there is data to operate on */
-	if (ELEM(NULL, dsources.first, ksc)) {
-		BLI_freelistN(&dsources);
-		return;
-	}
-	
-	/* get menu and process it */
-	if (mode == COMMONKEY_MODE_DELETE)
-		menustr= build_keyingsets_menu(ksc, "Delete");
-	else
-		menustr= build_keyingsets_menu(ksc, "Insert");
-	// XXX: this goes to the invoke!
-	//menu_nr= pupmenu(menustr);
-	//if (menustr) MEM_freeN(menustr);
-	menu_nr = -1; // XXX for now
-	
-	/* no item selected or shapekey entry? */
-	if (menu_nr < 1) {
-		/* free temp sources */
-		BLI_freelistN(&dsources);
-		
-		/* check if insert new shapekey */
-		// XXX missing function!
-		//if ((menu_nr == 0) && (mode == COMMONKEY_MODE_INSERT))
-		//	insert_shapekey(OBACT);
-		//else 
-			ksc->lastused= NULL;
-			
-		return;
-	}
-	else {
-		/* try to get keyingset */
-		ks= get_keyingset_fromcontext(ksc, menu_nr);
-		
-		if (ks == NULL) {
-			BLI_freelistN(&dsources);
-			return;
-		}
-	}
-	
-	/* loop over each destination, applying the keying set */
-	for (cks= dsources.first; cks; cks= cks->next) {
-		short success= 0;
-		
-		/* special hacks for 'available' option */
-		if (ks->flag == -2) {
-			IpoCurve *icu= NULL, *icn= NULL;
-			
-			/* get first IPO-curve */
-			if (cks->act && cks->actname) {
-				bActionChannel *achan= get_action_channel(cks->act, cks->actname);
-				
-				// FIXME: what about constraint channels?
-				if (achan && achan->ipo)
-					icu= achan->ipo->curve.first; 
-			}
-			else if(cks->ipo)
-				icu= cks->ipo->curve.first;
-				
-			/* we get adrcodes directly from IPO curves (see method below...) */
-			for (; icu; icu= icn) {
-				short flag;
-				
-				/* get next ipo-curve in case current is deleted */
-				icn= icu->next;
-				
-				/* insert mode or delete mode */
-				if (mode == COMMONKEY_MODE_DELETE) {
-					/* local flags only add on to global flags */
-					flag = 0;
-					
-					/* delete keyframe */
-					success += deletekey(cks->id, ks->blocktype, cks->actname, cks->constname, icu->adrcode, flag);
-				}
-				else {
-					/* local flags only add on to global flags */
-					flag = ks->flag;
-					if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX;
-					if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;
-					// if (IS_AUTOKEY_MODE(EDITKEYS)) flag |= INSERTKEY_REPLACE;
-					
-					/* insert keyframe */
-					success += insertkey(cks->id, ks->blocktype, cks->actname, cks->constname, icu->adrcode, flag);
-				}
-			}
-		}
-		else {
-			bKS_AdrcodeGetter kag;
-			short (*get_next_adrcode)(bKS_AdrcodeGetter *);
-			int adrcode;
-			
-			/* initialise keyingset channel iterator */
-			ks_adrcodegetter_init(&kag, ks, cks);
-			
-			/* get iterator - only one can be in use at a time... the flags should be mutually exclusive in this regard */
-			if (ks->flag & COMMONKEY_PCHANROT)
-				get_next_adrcode= ks_getnextadrcode_pchanrot;
-			else if (ks->flag & COMMONKEY_ADDMAP)
-				get_next_adrcode= ks_getnextadrcode_addmap;
-			else
-				get_next_adrcode= ks_getnextadrcode_default;
-			
-			/* loop over channels available in keyingset */
-			for (adrcode= get_next_adrcode(&kag); adrcode > 0; adrcode= get_next_adrcode(&kag)) {
-				short flag;
-				
-				/* insert mode or delete mode */
-				if (mode == COMMONKEY_MODE_DELETE) {
-					/* local flags only add on to global flags */
-					flag = 0;
-					//flag &= ~COMMONKEY_MODES;
-					
-					/* delete keyframe */
-					success += deletekey(cks->id, ks->blocktype, cks->actname, cks->constname, adrcode, flag);
-				}
-				else {
-					/* local flags only add on to global flags */
-					flag = ks->flag;
-					if (IS_AUTOKEY_FLAG(AUTOMATKEY)) flag |= INSERTKEY_MATRIX;
-					if (IS_AUTOKEY_FLAG(INSERTNEEDED)) flag |= INSERTKEY_NEEDED;
-					// if (IS_AUTOKEY_MODE(EDITKEYS)) flag |= INSERTKEY_REPLACE;
-					flag &= ~COMMONKEY_MODES;
-					
-					/* insert keyframe */
-					success += insertkey(cks->id, ks->blocktype, cks->actname, cks->constname, adrcode, flag);
-				}
-			}
-		}
-		
-		/* special handling for some key-sources */
-		if (success) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list