[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18559] branches/blender2.5/blender/source /blender: 2.5 - AnimSys Data management stuff...
Joshua Leung
aligorith at gmail.com
Sun Jan 18 11:42:07 CET 2009
Revision: 18559
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18559
Author: aligorith
Date: 2009-01-18 11:41:45 +0100 (Sun, 18 Jan 2009)
Log Message:
-----------
2.5 - AnimSys Data management stuff...
* Removed nAction struct. We'll be using good ol' bAction structs again, but putting new data in a different list. Apart from that, the data is similar enough to do so.
* Rearranged code in DNA_action_types.h while renaming the structs to avoid confusion over what is currently in use...
* Added freeing and AnimData execution loops for many other ID-types too. (NOTE: I've added AnimData in NodeTree struct too, but it's not clear to me where the relevant data-management calls should go in Nodes code).
* File writing code should now only write the new data to files
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenkernel/BKE_action.h
branches/blender2.5/blender/source/blender/blenkernel/BKE_animsys.h
branches/blender2.5/blender/source/blender/blenkernel/BKE_fcurve.h
branches/blender2.5/blender/source/blender/blenkernel/BKE_main.h
branches/blender2.5/blender/source/blender/blenkernel/intern/action.c
branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
branches/blender2.5/blender/source/blender/blenkernel/intern/curve.c
branches/blender2.5/blender/source/blender/blenkernel/intern/fcurve.c
branches/blender2.5/blender/source/blender/blenkernel/intern/key.c
branches/blender2.5/blender/source/blender/blenkernel/intern/library.c
branches/blender2.5/blender/source/blender/blenkernel/intern/material.c
branches/blender2.5/blender/source/blender/blenkernel/intern/object.c
branches/blender2.5/blender/source/blender/blenkernel/intern/scene.c
branches/blender2.5/blender/source/blender/blenkernel/intern/texture.c
branches/blender2.5/blender/source/blender/blenkernel/intern/world.c
branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
branches/blender2.5/blender/source/blender/editors/animation/keyframing.c
branches/blender2.5/blender/source/blender/editors/include/ED_anim_api.h
branches/blender2.5/blender/source/blender/makesdna/DNA_action_types.h
branches/blender2.5/blender/source/blender/makesdna/DNA_anim_types.h
branches/blender2.5/blender/source/blender/makesdna/DNA_curve_types.h
branches/blender2.5/blender/source/blender/makesdna/DNA_node_types.h
Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_action.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_action.h 2009-01-18 07:35:44 UTC (rev 18558)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_action.h 2009-01-18 10:41:45 UTC (rev 18559)
@@ -40,7 +40,7 @@
* The following structures are defined in DNA_action_types.h, and DNA_anim_types.h
*/
-struct nAction;
+struct bAction;
struct bPose;
struct bPoseChannel;
struct Object;
@@ -52,25 +52,30 @@
extern "C" {
#endif
-struct nAction *add_empty_action(const char name[]);
+struct bAction *add_empty_action(const char name[]);
/**
* Allocate a new bAction on the heap and copy
* the contents of src into it. If src is NULL NULL is returned.
*/
-struct nAction *copy_action(struct nAction *src);
+struct bAction *copy_action(struct bAction *src);
/**
* Deallocate the action's channels including constraint channels.
* does not free the action structure.
*/
-void free_action(struct nAction *act);
+void free_action(struct bAction *act);
// XXX is this needed?
-void make_local_action(struct nAction *act);
+void make_local_action(struct bAction *act);
/**
+ * Some kind of bounding box operation on the action.
+ */
+void calc_action_range(const struct bAction *act, float *start, float *end, int incl_hidden);
+
+/**
* Removes and deallocates all channels from a pose.
* Does not free the pose itself.
*/
@@ -115,21 +120,19 @@
void update_pose_constraint_flags(struct bPose *pose);
/* clears BONE_UNKEYED flags for frame changing */
+// XXX to be depreceated for a more general solution in animsys...
void framechange_poses_clear_unkeyed(void);
/**
- * Some kind of bounding box operation on the action.
- */
-void calc_action_range(const struct bAction *act, float *start, float *end, int incl_hidden);
-
-/**
* Set the pose channels from the given action.
*/
+// XXX old crap
void extract_pose_from_action(struct bPose *pose, struct bAction *act, float ctime);
/**
* Get the effects of the given action using a workob
*/
+// XXX old crap, used for action constraint though!
void what_does_obaction(struct Scene *scene, struct Object *ob, struct Object *workob, struct bAction *act, float cframe);
/* exported for game engine */
Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_animsys.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_animsys.h 2009-01-18 07:35:44 UTC (rev 18558)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_animsys.h 2009-01-18 10:41:45 UTC (rev 18559)
@@ -19,6 +19,12 @@
/* Add AnimData to the given ID-block */
struct AnimData *BKE_id_add_animdata(struct ID *id);
+/* Free AnimData */
+void BKE_free_animdata(struct ID *id);
+
+/* Copy AnimData */
+struct AnimData *BKE_copy_animdata(struct AnimData *adt);
+
/* ************************************* */
// TODO: overrides, remapping, and path-finding api's
Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_fcurve.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_fcurve.h 2009-01-18 07:35:44 UTC (rev 18558)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_fcurve.h 2009-01-18 10:41:45 UTC (rev 18559)
@@ -79,6 +79,9 @@
void free_fcurve(struct FCurve *fcu);
struct FCurve *copy_fcurve(struct FCurve *fcu);
+void free_fcurves(ListBase *list);
+void copy_fcurves(ListBase *dst, ListBase *src);
+
/* find matching F-Curve in the given list of F-Curves */
struct FCurve *list_find_fcurve(ListBase *list, const char rna_path[], const int array_index);
Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_main.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_main.h 2009-01-18 07:35:44 UTC (rev 18558)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_main.h 2009-01-18 10:41:45 UTC (rev 18559)
@@ -62,7 +62,7 @@
ListBase latt;
ListBase lamp;
ListBase camera;
- ListBase ipo;
+ ListBase ipo; // XXX depreceated
ListBase key;
ListBase world;
ListBase screen;
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/action.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/action.c 2009-01-18 07:35:44 UTC (rev 18558)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/action.c 2009-01-18 10:41:45 UTC (rev 18559)
@@ -81,9 +81,9 @@
/* ***************** Library data level operations on action ************** */
-nAction *add_empty_action(const char name[])
+bAction *add_empty_action(const char name[])
{
- nAction *act;
+ bAction *act;
act= alloc_libblock(&G.main->action, ID_AC, name);
act->id.flag |= LIB_FAKEUSER; // XXX this is nasty for new users... maybe we don't want this anymore
@@ -93,10 +93,10 @@
}
// does copy_fcurve...
-void make_local_action(nAction *act)
+void make_local_action(bAction *act)
{
// Object *ob;
- nAction *actn;
+ bAction *actn;
int local=0, lib=0;
if (act->id.lib==0) return;
@@ -147,19 +147,14 @@
}
-void free_action (nAction *act)
+void free_action (bAction *act)
{
- FCurve *fcu;
-
/* sanity check */
if (act == NULL)
return;
/* Free F-Curves */
- while ((fcu= act->curves.first)) {
- BLI_remlink(&act->curves, fcu);
- free_fcurve(fcu);
- }
+ free_fcurves(&act->curves);
/* Free groups */
if (act->groups.first)
@@ -170,39 +165,20 @@
BLI_freelistN(&act->markers);
}
-nAction *copy_action (nAction *src)
+bAction *copy_action (bAction *src)
{
- nAction *dst = NULL;
- //bActionChannel *dchan, *schan;
- // bActionGroup *dgrp, *sgrp;
+ bAction *dst = NULL;
+ //bActionGroup *dgrp, *sgrp; // XXX not used yet
- if (!src) return NULL;
-
+ if (src == NULL)
+ return NULL;
dst= copy_libblock(src);
- BLI_duplicatelist(&(dst->chanbase), &(src->chanbase));
- BLI_duplicatelist(&(dst->groups), &(src->groups));
- BLI_duplicatelist(&(dst->markers), &(src->markers));
+ BLI_duplicatelist(&dst->groups, &src->groups); // XXX not used yet
+ BLI_duplicatelist(&dst->markers, &src->markers);
-#if 0 // XXX old animation system
- for (dchan=dst->chanbase.first, schan=src->chanbase.first; dchan; dchan=dchan->next, schan=schan->next) {
- for (dgrp=dst->groups.first, sgrp=src->groups.first; dgrp && sgrp; dgrp=dgrp->next, sgrp=sgrp->next) {
- if (dchan->grp == sgrp) {
- dchan->grp= dgrp;
-
- if (dgrp->channels.first == schan)
- dgrp->channels.first= dchan;
- if (dgrp->channels.last == schan)
- dgrp->channels.last= dchan;
-
- break;
- }
- }
-
- dchan->ipo = copy_ipo(dchan->ipo);
- copy_constraint_channels(&dchan->constraintChannels, &schan->constraintChannels);
- }
-#endif // XXX old animation system
+ /* copy f-curves */
+ copy_fcurves(&dst->curves, &src->curves);
dst->id.flag |= LIB_FAKEUSER; // XXX this is nasty for new users... maybe we don't want this anymore
dst->id.us++;
@@ -219,12 +195,13 @@
{
bPoseChannel *chan;
- if(pose==NULL) return NULL;
+ if (pose==NULL) return NULL;
for (chan=pose->chanbase.first; chan; chan=chan->next) {
- if(chan->name[0] == name[0])
+ if (chan->name[0] == name[0]) {
if (!strcmp (chan->name, name))
return chan;
+ }
}
return NULL;
@@ -236,11 +213,10 @@
{
bPoseChannel *chan;
- if (!pose) {
+ if (pose == NULL)
return NULL;
- }
- /* See if this channel exists */
+ /* See if this channel exists */
for (chan=pose->chanbase.first; chan; chan=chan->next) {
if (!strcmp (name, chan->name))
return chan;
@@ -249,10 +225,10 @@
/* If not, create it and add it */
chan = MEM_callocN(sizeof(bPoseChannel), "verifyPoseChannel");
- strncpy (chan->name, name, 31);
+ strncpy(chan->name, name, 31);
/* init vars to prevent math errors */
- chan->quat[0] = 1.0F;
- chan->size[0] = chan->size[1] = chan->size[2] = 1.0F;
+ chan->quat[0] = 1.0f;
+ chan->size[0] = chan->size[1] = chan->size[2] = 1.0f;
chan->limitmin[0]= chan->limitmin[1]= chan->limitmin[2]= -180.0f;
chan->limitmax[0]= chan->limitmax[1]= chan->limitmax[2]= 180.0f;
@@ -285,7 +261,7 @@
/* dst should be freed already, makes entire duplicate */
-void copy_pose(bPose **dst, bPose *src, int copycon)
+void copy_pose (bPose **dst, bPose *src, int copycon)
{
bPose *outPose;
bPoseChannel *pchan;
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c 2009-01-18 07:35:44 UTC (rev 18558)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/anim_sys.c 2009-01-18 10:41:45 UTC (rev 18559)
@@ -12,6 +12,7 @@
#include "BLI_dynstr.h"
#include "BKE_animsys.h"
+#include "BKE_action.h"
#include "BKE_fcurve.h"
#include "BKE_main.h"
#include "BKE_utildefines.h"
@@ -24,85 +25,136 @@
/* ***************************************** */
/* AnimData API */
-/* Get AnimData from the given ID-block. In order for this to work, we assume that
- * the AnimData pointer is stored immediately after the given ID-block in the struct,
- * as per IdAdtTemplate.
- */
-AnimData *BKE_animdata_from_id (ID *id)
+/* Getter/Setter -------------------------------------------- */
+
+/* Internal utility to check if ID can have AnimData */
+static short id_has_animdata (ID *id)
{
/* sanity check */
if (id == NULL)
- return NULL;
+ return 0;
- /* only some ID-blocks have this info for now, so we cast the
- * types that do to be of type IdAdtTemplate, and extract the
- * AnimData that way
- */
+ /* Only some ID-blocks have this info for now */
// TODO: finish adding this for the other blocktypes
switch (GS(id->name)) {
+ /* has AnimData */
case ID_OB:
+ case ID_CU:
case ID_KE:
- case ID_MA: case ID_TE:
+ case ID_MA: case ID_TE: case ID_NT:
case ID_LA: case ID_CA: case ID_WO:
case ID_SCE:
{
- IdAdtTemplate *iat= (IdAdtTemplate *)id;
- return iat->adt;
+ return 1;
}
- break;
+
+ /* no AnimData */
+ default:
+ return 0;
}
-
- /* no AnimData (ID-block does not contain this data) */
- return NULL;
}
+
+/* Get AnimData from the given ID-block. In order for this to work, we assume that
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list