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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to