Revision: 23386
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23386
Author:   broken
Date:     2009-09-21 08:43:20 +0200 (Mon, 21 Sep 2009)

Log Message:
-----------
* Added AnimData for Armature data, for animating armature/bone settings.

This allows you to do funky things like animating the number of segments in a 
b-bone.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/anim_sys.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/editors/animation/anim_channels_defines.c
    trunk/blender/source/blender/editors/animation/anim_filter.c
    trunk/blender/source/blender/editors/include/ED_anim_api.h
    trunk/blender/source/blender/makesdna/DNA_action_types.h
    trunk/blender/source/blender/makesdna/DNA_armature_types.h
    trunk/blender/source/blender/makesrna/intern/rna_armature.c

Modified: trunk/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/anim_sys.c   2009-09-21 
05:56:43 UTC (rev 23385)
+++ trunk/blender/source/blender/blenkernel/intern/anim_sys.c   2009-09-21 
06:43:20 UTC (rev 23386)
@@ -72,7 +72,7 @@
        switch (GS(id->name)) {
                        /* has AnimData */
                case ID_OB:
-               case ID_MB: case ID_CU:
+               case ID_MB: case ID_CU: case ID_AR:
                case ID_KE:
                case ID_PA:
                case ID_MA: case ID_TE: case ID_NT:
@@ -1525,6 +1525,9 @@
                BKE_animsys_evaluate_animdata(id, adt, ctime, ADT_RECALC_ANIM);
        }
        
+       /* armatures */
+       EVAL_ANIM_IDS(main->armature.first, ADT_RECALC_ANIM);
+       
        /* meshes */
        // TODO...
        

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c   2009-09-21 
05:56:43 UTC (rev 23385)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c   2009-09-21 
06:43:20 UTC (rev 23386)
@@ -2331,6 +2331,7 @@
 
        while(arm) {
                if(arm->id.flag & LIB_NEEDLINK) {
+                       if (arm->adt) lib_link_animdata(fd, &arm->id, arm->adt);
                        arm->id.flag -= LIB_NEEDLINK;
                }
                arm= arm->id.next;
@@ -2357,6 +2358,7 @@
        link_list(fd, &arm->bonebase);
        arm->edbo= NULL;
        arm->sketch = NULL;
+       arm->adt= newdataadr(fd, arm->adt);
        
        bone=arm->bonebase.first;
        while (bone) {
@@ -9697,15 +9699,8 @@
                                sce->unit.scale_length= 1.0f;
                
                for(ob = main->object.first; ob; ob = ob->id.next) {
-                       ModifierData *md;
-
-                       /* add backwards pointer for fluidsim modifier RNA 
access */
-                       for (md=ob->modifiers.first; md; md = md->next) {
-                               if (md->type == eModifierType_Fluidsim) {
-                                       FluidsimModifierData *fluidmd= 
(FluidsimModifierData*) md;
-                                       fluidmd->fss->fmd = fluidmd;
-                               }
-                       }
+                       FluidsimModifierData *fluidmd = (FluidsimModifierData 
*)modifiers_findByType(ob, eModifierType_Fluidsim);
+                       if (fluidmd) fluidmd->fss->fmd = fluidmd;
                }
 
                for(sce= main->scene.first; sce; sce= sce->id.next)
@@ -10434,6 +10429,9 @@
 {
        Bone *curBone;
 
+       if(arm->adt)
+               expand_animdata(fd, mainvar, arm->adt);
+
        for (curBone = arm->bonebase.first; curBone; curBone=curBone->next) {
                expand_bones(fd, mainvar, curBone);
        }

Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c  2009-09-21 
05:56:43 UTC (rev 23385)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c  2009-09-21 
06:43:20 UTC (rev 23386)
@@ -2116,6 +2116,8 @@
                        writestruct(wd, ID_AR, "bArmature", 1, arm);
                        if (arm->id.properties) 
IDP_WriteProperty(arm->id.properties, wd);
 
+                       if (arm->adt) write_animdata(wd, arm->adt);
+
                        /* Direct data */
                        bone= arm->bonebase.first;
                        while(bone) {

Modified: trunk/blender/source/blender/editors/animation/anim_channels_defines.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_channels_defines.c      
2009-09-21 05:56:43 UTC (rev 23385)
+++ trunk/blender/source/blender/editors/animation/anim_channels_defines.c      
2009-09-21 06:43:20 UTC (rev 23386)
@@ -1526,6 +1526,76 @@
        acf_dsmball_setting_ptr                                 /* pointer for 
setting */
 };
 
+/* Armature Expander  ------------------------------------------- */
+
+// TODO: just get this from RNA?
+static int acf_dsarm_icon(bAnimListElem *ale)
+{
+       return ICON_ARMATURE_DATA;
+}
+
+/* get the appropriate flag(s) for the setting when it is valid  */
+static int acf_dsarm_setting_flag(int setting, short *neg)
+{
+       /* clear extra return data first */
+       *neg= 0;
+       
+       switch (setting) {
+               case ACHANNEL_SETTING_EXPAND: /* expanded */
+                       return ARM_DS_EXPAND;
+                       
+               case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */
+                       return ADT_NLA_EVAL_OFF;
+                       
+               case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph 
Editor) */
+                       *neg= 1;
+                       return ADT_CURVES_NOT_VISIBLE;
+               
+               default: /* unsupported */
+                       return 0;
+       }
+}
+
+/* get pointer to the setting */
+static void *acf_dsarm_setting_ptr(bAnimListElem *ale, int setting, short 
*type)
+{
+       bArmature *arm= (bArmature *)ale->data;
+       
+       /* clear extra return data first */
+       *type= 0;
+       
+       switch (setting) {
+               case ACHANNEL_SETTING_EXPAND: /* expanded */
+                       GET_ACF_FLAG_PTR(arm->flag);
+                       
+               case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
+               case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor 
only) */
+                       if (arm->adt)
+                               GET_ACF_FLAG_PTR(arm->adt->flag)
+                       else
+                               return NULL;
+               
+               default: /* unsupported */
+                       return NULL;
+       }
+}
+
+/* metaball expander type define */
+static bAnimChannelType ACF_DSARM= 
+{
+       acf_generic_dataexpand_backdrop,/* backdrop */
+       acf_generic_indention_1,                /* indent level */
+       acf_generic_basic_offset,               /* offset */
+       
+       acf_generic_idblock_name,               /* name */
+       acf_dsarm_icon,                         /* icon */
+       
+       acf_generic_dataexpand_setting_valid,   /* has setting */
+       acf_dsarm_setting_flag,                         /* flag for setting */
+       acf_dsarm_setting_ptr                                   /* pointer for 
setting */
+};
+
+
 /* ShapeKey Entry  ------------------------------------------- */
 // XXX ... this is currently obsolete...
 
@@ -1709,6 +1779,7 @@
                animchannelTypeInfo[type++]= &ACF_DSWOR;                /* 
World Channel */
                animchannelTypeInfo[type++]= &ACF_DSPART;               /* 
Particle Channel */
                animchannelTypeInfo[type++]= &ACF_DSMBALL;              /* 
MetaBall Channel */
+               animchannelTypeInfo[type++]= &ACF_DSARM;                /* 
Armature Channel */
                
                animchannelTypeInfo[type++]= NULL;                              
/* ShapeKey */ // XXX this is no longer used for now...
                

Modified: trunk/blender/source/blender/editors/animation/anim_filter.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_filter.c        
2009-09-21 05:56:43 UTC (rev 23385)
+++ trunk/blender/source/blender/editors/animation/anim_filter.c        
2009-09-21 06:43:20 UTC (rev 23386)
@@ -52,6 +52,7 @@
 #include "DNA_ID.h"
 #include "DNA_anim_types.h"
 #include "DNA_action_types.h"
+#include "DNA_armature_types.h"
 #include "DNA_constraint_types.h"
 #include "DNA_camera_types.h"
 #include "DNA_curve_types.h"
@@ -1101,6 +1102,14 @@
                        expanded= FILTER_MBALL_OBJD(mb);
                }
                        break;
+               case OB_ARMATURE: /* ------- Armature ---------- */
+               {
+                       bArmature *arm= (bArmature *)ob->data;
+                       
+                       type= ANIMTYPE_DSARM;
+                       expanded= FILTER_ARM_OBJD(arm);
+               }
+                       break;
        }
        
        /* special exception for drivers instead of action */
@@ -1297,6 +1306,19 @@
                        }
                }
                        break;
+               case OB_ARMATURE: /* ------- Armature ---------- */
+               {
+                       bArmature *arm= (bArmature *)ob->data;
+                       
+                       if ((ads->filterflag & ADS_FILTER_NOARM) == 0) {
+                               ANIMDATA_FILTER_CASES(arm,
+                                       { /* AnimData blocks - do nothing... */ 
},
+                                       obdata_ok= 1;,
+                                       obdata_ok= 1;,
+                                       obdata_ok= 1;)
+                       }
+               }
+                       break;
        }
        if (obdata_ok) 
                items += animdata_filter_dopesheet_obdata(anim_data, ads, base, 
filter_mode);
@@ -1652,6 +1674,23 @@
                                                        dataOk= 
!(ads->filterflag & ADS_FILTER_NOMBA);)
                                        }
                                                break;
+                                       case OB_ARMATURE: /* ------- Armature 
---------- */
+                                       {
+                                               bArmature *arm= (bArmature 
*)ob->data;
+                                               dataOk= 0;
+                                               ANIMDATA_FILTER_CASES(arm, 
+                                                       if ((ads->filterflag & 
ADS_FILTER_NOARM)==0) {
+                                                               /* 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(arm);
+                                                               dataOk=0;
+                                                       },
+                                                       dataOk= 
!(ads->filterflag & ADS_FILTER_NOARM);, 
+                                                       dataOk= 
!(ads->filterflag & ADS_FILTER_NOARM);, 
+                                                       dataOk= 
!(ads->filterflag & ADS_FILTER_NOARM);)
+                                       }
+                                               break;
                                        default: /* --- other --- */
                                                dataOk= 0;
                                                break;
@@ -1734,6 +1773,12 @@
                                                dataOk= ANIMDATA_HAS_KEYS(mb);  
                                        }
                                                break;
+                                       case OB_ARMATURE: /* -------- Armature 
---------- */
+                                       {
+                                               bArmature *arm= (bArmature 
*)ob->data;
+                                               dataOk= ANIMDATA_HAS_KEYS(arm); 
+                                       }
+                                               break;
                                        default: /* --- other --- */
                                                dataOk= 0;
                                                break;

Modified: trunk/blender/source/blender/editors/include/ED_anim_api.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_anim_api.h  2009-09-21 
05:56:43 UTC (rev 23385)
+++ trunk/blender/source/blender/editors/include/ED_anim_api.h  2009-09-21 
06:43:20 UTC (rev 23386)
@@ -137,6 +137,7 @@
        ANIMTYPE_DSWOR,
        ANIMTYPE_DSPART,
        ANIMTYPE_DSMBALL,
+       ANIMTYPE_DSARM,
        
        ANIMTYPE_SHAPEKEY,              // XXX probably can become 
depreceated???
        
@@ -206,6 +207,7 @@
 #define FILTER_CUR_OBJD(cu) ((cu->flag & CU_DS_EXPAND))
 #define FILTER_PART_OBJD(part) ((part->flag & PART_DS_EXPAND))
 #define FILTER_MBALL_OBJD(mb) ((mb->flag2 & MB_DS_EXPAND))
+#define FILTER_ARM_OBJD(arm) ((arm->flag & ARM_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: trunk/blender/source/blender/makesdna/DNA_action_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_action_types.h    2009-09-21 
05:56:43 UTC (rev 23385)
+++ trunk/blender/source/blender/makesdna/DNA_action_types.h    2009-09-21 
06:43:20 UTC (rev 23386)
@@ -372,6 +372,7 @@
        ADS_FILTER_NOSCE                        = (1<<15),
        ADS_FILTER_NOPART                       = (1<<16),
        ADS_FILTER_NOMBA                        = (1<<17),
+       ADS_FILTER_NOARM                        = (1<<18),
        
                /* NLA-specific filters */
        ADS_FILTER_NLA_NOACT            = (1<<20),      /* if the AnimData 
block has no NLA data, don't include to just show Action-line */

Modified: trunk/blender/source/blender/makesdna/DNA_armature_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_armature_types.h  2009-09-21 
05:56:43 UTC (rev 23385)
+++ trunk/blender/source/blender/makesdna/DNA_armature_types.h  2009-09-21 
06:43:20 UTC (rev 23386)
@@ -31,6 +31,8 @@
 #include "DNA_listBase.h"
 #include "DNA_ID.h"
 
+struct AnimData;
+
 /* this system works on different transformation space levels;
 
 1) Bone Space;         with each Bone having own (0,0,0) origin
@@ -69,6 +71,7 @@
 
 typedef struct bArmature {
        ID                      id;
+       struct AnimData *adt;
        ListBase        bonebase;
        ListBase        chainbase;
        ListBase        *edbo;                                  /* editbone 
listbase, we use pointer so we can check state */

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to