[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