[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23386] trunk/blender/source/blender: * Added AnimData for Armature data, for animating armature/bone settings.

Matt Ebb matt at mke3.net
Mon Sep 21 08:43:20 CEST 2009


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




More information about the Bf-blender-cvs mailing list