[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21864] branches/blender2.5/blender/source /blender: ParticleSettings animdata wasn't shown in graph editor, dope sheet and nla editor.

Janne Karhu jhkarh at utu.fi
Fri Jul 24 21:36:08 CEST 2009


Revision: 21864
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21864
Author:   jhk
Date:     2009-07-24 21:36:08 +0200 (Fri, 24 Jul 2009)

Log Message:
-----------
ParticleSettings animdata wasn't shown in graph editor, dope sheet and nla editor.

Tiny bug fix too: Had forgotten particle child length setting from do_versions so old files with child hair showed all hair with zero length.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c
    branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c
    branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h
    branches/blender2.5/blender/source/blender/editors/space_action/action_draw.c
    branches/blender2.5/blender/source/blender/editors/space_action/action_header.c
    branches/blender2.5/blender/source/blender/editors/space_graph/graph_draw.c
    branches/blender2.5/blender/source/blender/editors/space_graph/graph_header.c
    branches/blender2.5/blender/source/blender/editors/space_nla/nla_channels.c
    branches/blender2.5/blender/source/blender/editors/space_nla/nla_draw.c
    branches/blender2.5/blender/source/blender/editors/space_nla/nla_header.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_action_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_object_types.h
    branches/blender2.5/blender/source/blender/makesdna/DNA_particle_types.h

Modified: branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-07-24 18:28:09 UTC (rev 21863)
+++ branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c	2009-07-24 19:36:08 UTC (rev 21864)
@@ -9171,6 +9171,7 @@
 				}
 			}
 			part->path_end = 1.0f;
+			part->clength = 1.0f;
 		}
 		/* set old pointcaches to have disk cache flag */
 		for(ob = main->object.first; ob; ob= ob->id.next) {

Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c	2009-07-24 18:28:09 UTC (rev 21863)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_channels.c	2009-07-24 19:36:08 UTC (rev 21864)
@@ -981,6 +981,20 @@
 				}
 			}
 				break;
+			case ANIMTYPE_FILLPARTD:
+			{
+				Object *ob= (Object *)ale->data;
+				
+				// XXX - settings should really be moved out of ob->nlaflag
+				if ((onlysel == 0) || (ob->flag & SELECT)) {
+					if (setting == ACHANNEL_SETTING_EXPAND) {
+						if (mode == ACHANNEL_SETFLAG_TOGGLE) 	ob->nlaflag ^= OB_ADS_SHOWPARTS;
+						else if (mode == ACHANNEL_SETFLAG_ADD) 	ob->nlaflag |= OB_ADS_SHOWPARTS;
+						else 									ob->nlaflag &= ~OB_ADS_SHOWPARTS;
+					}
+				}
+			}
+				break;
 					
 			case ANIMTYPE_DSMAT:
 			{
@@ -1048,6 +1062,17 @@
 				}
 			}
 				break;
+			case ANIMTYPE_DSPART:
+			{
+				ParticleSettings *part= (ParticleSettings*)ale->data;
+
+				if (ASUBCHANNEL_SEL_OK(ale)) {
+					if (setting == ACHANNEL_SETTING_EXPAND) {
+						ACHANNEL_SET_FLAG(part, mode, PART_DS_EXPAND);
+					}
+				}
+			}
+				break;
 				
 			case ANIMTYPE_GROUP:
 			{
@@ -1605,6 +1630,13 @@
 			notifierFlags |= ND_ANIMCHAN_EDIT;
 		}
 			break;
+		case ANIMTYPE_FILLPARTD:
+		{
+			Object *ob= (Object *)ale->data;
+			ob->nlaflag ^= OB_ADS_SHOWPARTS;	// XXX 
+			notifierFlags |= ND_ANIMCHAN_EDIT;
+		}
+			break;
 				
 		case ANIMTYPE_DSMAT:
 		{
@@ -1648,6 +1680,13 @@
 			notifierFlags |= ND_ANIMCHAN_EDIT;
 		}
 			break;
+		case ANIMTYPE_DSPART:
+		{
+			ParticleSettings *part= (ParticleSettings *)ale->data;
+			part->flag ^= PART_DS_EXPAND;
+			notifierFlags |= ND_ANIMCHAN_EDIT;
+		}
+			break;
 			
 		case ANIMTYPE_GROUP: 
 		{

Modified: branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c	2009-07-24 18:28:09 UTC (rev 21863)
+++ branches/blender2.5/blender/source/blender/editors/animation/anim_filter.c	2009-07-24 19:36:08 UTC (rev 21864)
@@ -484,6 +484,16 @@
 				ale->datatype= ALE_NONE;
 			}
 				break;
+			case ANIMTYPE_FILLPARTD:
+			{
+				Object *ob= (Object *)data;
+				
+				ale->flag= FILTER_PART_OBJC(ob);
+				
+				ale->key_data= NULL;
+				ale->datatype= ALE_NONE;
+			}
+				break;
 			
 			case ANIMTYPE_DSMAT:
 			{
@@ -551,7 +561,18 @@
 				ale->datatype= ALE_ACT;
 			}
 				break;
+			case ANIMTYPE_DSPART:
+			{
+				ParticleSettings *part= (ParticleSettings*)ale->data;
+				AnimData *adt= part->adt;
 				
+				ale->flag= FILTER_PART_OBJD(part); 
+				
+				ale->key_data= (adt) ? adt->action : NULL;
+				ale->datatype= ALE_ACT;
+			}
+				break;
+				
 			case ANIMTYPE_GROUP:
 			{
 				bActionGroup *agrp= (bActionGroup *)data;
@@ -1008,6 +1029,60 @@
 	return items;
 }
 
+static int animdata_filter_dopesheet_particles (ListBase *anim_data, bDopeSheet *ads, Base *base, int filter_mode)
+{
+	bAnimListElem *ale=NULL;
+	Object *ob= base->object;
+	ParticleSystem *psys = ob->particlesystem.first;
+	int items= 0, first = 1;
+
+	for(; psys; psys=psys->next) {
+		short ok = 0;
+
+		if(ELEM(NULL, psys->part, psys->part->adt))
+			continue;
+
+		ANIMDATA_FILTER_CASES(psys->part,
+			{ /* AnimData blocks - do nothing... */ },
+			ok=1;, 
+			ok=1;, 
+			ok=1;)
+		if (ok == 0) continue;
+
+		/* include particles-expand widget? */
+		if (first && (filter_mode & ANIMFILTER_CHANNELS) && !(filter_mode & ANIMFILTER_CURVESONLY)) {
+			ale= make_new_animlistelem(ob, ANIMTYPE_FILLPARTD, base, ANIMTYPE_OBJECT, (ID *)ob);
+			if (ale) {
+				BLI_addtail(anim_data, ale);
+				items++;
+			}
+			first = 0;
+		}
+		
+		/* add particle settings? */
+		if (FILTER_PART_OBJC(ob) || (filter_mode & ANIMFILTER_CURVESONLY)) {
+			if ((filter_mode & ANIMFILTER_CHANNELS)){
+				ale = make_new_animlistelem(psys->part, ANIMTYPE_DSPART, base, ANIMTYPE_OBJECT, (ID *)psys->part);
+				if (ale) {
+					BLI_addtail(anim_data, ale);
+					items++;
+				}
+			}
+			
+			if (FILTER_PART_OBJD(psys->part) || (filter_mode & ANIMFILTER_CURVESONLY)) {
+				ANIMDATA_FILTER_CASES(psys->part,
+					{ /* AnimData blocks - do nothing... */ },
+					items += animdata_filter_nla(anim_data, psys->part->adt, filter_mode, psys->part, ANIMTYPE_DSPART, (ID *)psys->part);, 
+					items += animdata_filter_fcurves(anim_data, psys->part->adt->drivers.first, NULL, psys->part, ANIMTYPE_DSPART, filter_mode, (ID *)psys->part);, 
+					items += animdata_filter_action(anim_data, psys->part->adt->action, filter_mode, psys->part, ANIMTYPE_DSPART, (ID *)psys->part);)
+			}
+		}
+	}
+	
+	/* return the number of items added to the list */
+	return items;
+}
+
 static int animdata_filter_dopesheet_obdata (ListBase *anim_data, bDopeSheet *ads, Base *base, int filter_mode)
 {
 	bAnimListElem *ale=NULL;
@@ -1229,6 +1304,10 @@
 	}
 	if (obdata_ok) 
 		items += animdata_filter_dopesheet_obdata(anim_data, ads, base, filter_mode);
+
+	/* particles */
+	if(ob->particlesystem.first && !(ads->filterflag & ADS_FILTER_NOPART))
+		items += animdata_filter_dopesheet_particles(anim_data, ads, base, filter_mode);
 	
 	/* return the number of items added to the list */
 	return items;
@@ -1406,7 +1485,7 @@
 		if (base->object) {
 			Object *ob= base->object;
 			Key *key= ob_get_key(ob);
-			short actOk=1, keyOk=1, dataOk=1, matOk=1;
+			short actOk=1, keyOk=1, dataOk=1, matOk=1, partOk=1;
 			
 			/* firstly, check if object can be included, by the following fanimors:
 			 *	- if only visible, must check for layer and also viewport visibility
@@ -1548,9 +1627,35 @@
 						dataOk= 0;
 						break;
 				}
+
+				/* particles */
+				partOk = 0;
+				if(!(ads->filterflag & ADS_FILTER_NOPART) && ob->particlesystem.first) {
+					ParticleSystem *psys = ob->particlesystem.first;
+					for(; psys; psys=psys->next) {
+						if (psys->part) {
+							/* if particlesettings has relevant animation data, break */
+							ANIMDATA_FILTER_CASES(psys->part, 
+								{
+									/* for the special AnimData blocks only case, we only need to add
+									 * the block if it is valid... then other cases just get skipped (hence ok=0)
+									 */
+									ANIMDATA_ADD_ANIMDATA(psys->part);
+									partOk=0;
+								},
+								partOk= 1;, 
+								partOk= 1;, 
+								partOk= 1;)
+						}
+							
+						if (partOk) 
+							break;
+					}
+				}
+
 				
 				/* check if all bad (i.e. nothing to show) */
-				if (!actOk && !keyOk && !dataOk && !matOk)
+				if (!actOk && !keyOk && !dataOk && !matOk && !partOk)
 					continue;
 			}
 			else {
@@ -1599,9 +1704,22 @@
 						dataOk= 0;
 						break;
 				}
+
+				/* particles */
+				partOk = 0;
+				if(ob->particlesystem.first) {
+					ParticleSystem *psys = ob->particlesystem.first;
+					for(; psys; psys=psys->next) {
+						if(psys->part && ANIMDATA_HAS_KEYS(psys->part)) {
+							partOk = 1;
+							break;
+						}
+
+					}
+				}
 				
 				/* check if all bad (i.e. nothing to show) */
-				if (!actOk && !keyOk && !dataOk && !matOk)
+				if (!actOk && !keyOk && !dataOk && !matOk && !partOk)
 					continue;
 			}
 			

Modified: branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h
===================================================================
--- branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h	2009-07-24 18:28:09 UTC (rev 21863)
+++ branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h	2009-07-24 19:36:08 UTC (rev 21864)
@@ -118,6 +118,7 @@
 	ANIMTYPE_FILLACTD,
 	ANIMTYPE_FILLDRIVERS,
 	ANIMTYPE_FILLMATD,
+	ANIMTYPE_FILLPARTD,
 	
 	ANIMTYPE_DSMAT,
 	ANIMTYPE_DSLAM,
@@ -125,6 +126,7 @@
 	ANIMTYPE_DSCUR,
 	ANIMTYPE_DSSKEY,
 	ANIMTYPE_DSWOR,
+	ANIMTYPE_DSPART,
 	
 	ANIMTYPE_SHAPEKEY,		// XXX probably can become depreceated???
 	
@@ -181,12 +183,14 @@
 #define EXPANDED_OBJC(ob) ((ob->nlaflag & OB_ADS_COLLAPSED)==0)
 	/* 'Sub-object' channels (flags stored in Object block) */
 #define FILTER_MAT_OBJC(ob) ((ob->nlaflag & OB_ADS_SHOWMATS))
+#define FILTER_PART_OBJC(ob) ((ob->nlaflag & OB_ADS_SHOWPARTS))
 	/* 'Sub-object' channels (flags stored in Data block) */
 #define FILTER_SKE_OBJD(key) ((key->flag & KEYBLOCK_DS_EXPAND))
 #define FILTER_MAT_OBJD(ma) ((ma->flag & MA_DS_EXPAND))
 #define FILTER_LAM_OBJD(la) ((la->flag & LA_DS_EXPAND))
 #define FILTER_CAM_OBJD(ca) ((ca->flag & CAM_DS_EXPAND))
 #define FILTER_CUR_OBJD(cu) ((cu->flag & CU_DS_EXPAND))
+#define FILTER_PART_OBJD(part) ((part->flag & PART_DS_EXPAND))
 	/* 'Sub-object/Action' channels (flags stored in Action) */
 #define SEL_ACTC(actc) ((actc->flag & ACT_SELECTED))
 #define EXPANDED_ACTC(actc) ((actc->flag & ACT_COLLAPSED)==0)

Modified: branches/blender2.5/blender/source/blender/editors/space_action/action_draw.c
===================================================================
--- branches/blender2.5/blender/source/blender/editors/space_action/action_draw.c	2009-07-24 18:28:09 UTC (rev 21863)
+++ branches/blender2.5/blender/source/blender/editors/space_action/action_draw.c	2009-07-24 19:36:08 UTC (rev 21864)
@@ -519,6 +519,22 @@
 					strcpy(name, "Materials");
 				}
 					break;
+				case ANIMTYPE_FILLPARTD: /* object particles (dopesheet) expand widget */
+				{
+					Object *ob = (Object *)ale->data;
+					
+					group = 4;
+					indent = 1;
+					special = ICON_PARTICLE_DATA;
+					
+					if (FILTER_PART_OBJC(ob))
+						expand = ICON_TRIA_DOWN;
+					else
+						expand = ICON_TRIA_RIGHT;
+						
+					strcpy(name, "Particles");
+				}
+					break;
 				
 				
 				case ANIMTYPE_DSMAT: /* single material (dopesheet) expand widget */
@@ -619,7 +635,24 @@
 					strcpy(name, wo->id.name+2);
 				}
 					break;
+				case ANIMTYPE_DSPART: /* particle (dopesheet) expand widget */
+				{

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list