[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13279] trunk/blender/source/blender: == Action Editor - Groups for Action Channels (Peach Request) ==

Claudio "malefico" Andaur malefico at manosdigitales.com
Fri Jan 18 11:51:17 CET 2008


HA ! (Joshua and Ton will understand) :D

Claudio "malefico" Andaur

Character Technical Director
Manos Digitales Animation Studio


On Fri, 18 Jan 2008, Joshua Leung wrote:

> Revision: 13279
>          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13279
> Author:   aligorith
> Date:     2008-01-18 00:02:11 +0100 (Fri, 18 Jan 2008)
>
> Log Message:
> -----------
> == Action Editor - Groups for Action Channels (Peach Request) ==
>
> Now, you can assign Action Channels to named (folder-like) groups, which help to organise the channels (important for more complex rigs). These are collapsible, can be "protected", and show a "summary" of the keyframes in the channels the Group contains. They are drawn as bright-green (active) or a darker shade of green (not active) channels.
>
> * Each Action has its own set of Groups.
> * An Action-Channel can only occur in one Group at a time. It can also not occur in any group.
> * Action-Channels can be moved between Groups
> * Groups + grouped-channels always occur BEFORE un-grouped channels
>
> Important Hotkeys:
> * Shift-G  :  Adds the selected Action-Channels to the Active Group. This will create a new group if need be
> * Ctrl-Shift-G : Always adds a new group, and adds the selected Action-Channels to it
> * Alt-G : Removes selected Action-Channels from their groups
> * Ctrl-Shift-Alt-G : (Note: this will be removed soon) This is a simple debugging-hotkey I added, which just prints a list of the groups, channels, and their addresses...
> * NKey / Ctrl-LMB: While hovering over the name of a group, this shows a popup like for other channels, which allows the editing of the channel's name, etc.
>
>
> Assorted Notes:
> * Some tools may not work yet with this (Ctrl Numpad+/- for example)
> * Fixed some bugs in various places in Action Editor code
> * Added theme colours for group channels
> * The nomenclature of these tools may change in future when a better alternative is found
> * The ability to auto-assign action-channels to groups when they are keyframed will be coming up shortly
>
> Modified Paths:
> --------------
>    trunk/blender/source/blender/blenkernel/BKE_blender.h
>    trunk/blender/source/blender/blenkernel/intern/action.c
>    trunk/blender/source/blender/blenloader/intern/readfile.c
>    trunk/blender/source/blender/blenloader/intern/writefile.c
>    trunk/blender/source/blender/include/BDR_drawaction.h
>    trunk/blender/source/blender/include/BIF_editaction.h
>    trunk/blender/source/blender/include/BSE_editaction_types.h
>    trunk/blender/source/blender/makesdna/DNA_action_types.h
>    trunk/blender/source/blender/src/drawaction.c
>    trunk/blender/source/blender/src/editaction.c
>    trunk/blender/source/blender/src/header_action.c
>    trunk/blender/source/blender/src/resources.c
>    trunk/blender/source/blender/src/usiblender.c
>
> Modified: trunk/blender/source/blender/blenkernel/BKE_blender.h
> ===================================================================
> --- trunk/blender/source/blender/blenkernel/BKE_blender.h	2008-01-17 22:57:00 UTC (rev 13278)
> +++ trunk/blender/source/blender/blenkernel/BKE_blender.h	2008-01-17 23:02:11 UTC (rev 13279)
> @@ -44,7 +44,7 @@
> struct MemFile;
>
> #define BLENDER_VERSION			245
> -#define BLENDER_SUBVERSION		12
> +#define BLENDER_SUBVERSION		13
>
> #define BLENDER_MINVERSION		240
> #define BLENDER_MINSUBVERSION	0
>
> Modified: trunk/blender/source/blender/blenkernel/intern/action.c
> ===================================================================
> --- trunk/blender/source/blender/blenkernel/intern/action.c	2008-01-17 22:57:00 UTC (rev 13278)
> +++ trunk/blender/source/blender/blenkernel/intern/action.c	2008-01-17 23:02:11 UTC (rev 13279)
> @@ -178,7 +178,11 @@
> 	if (act->chanbase.first)
> 		BLI_freelistN(&act->chanbase);
>
> -	/* Free pose-references */
> +	/* Free groups */
> +	if (act->groups.first)
> +		BLI_freelistN(&act->groups);
> +
> +	/* Free pose-references (aka local markers) */
> 	if (act->markers.first)
> 		BLI_freelistN(&act->markers);
> }
> @@ -187,19 +191,37 @@
> {
> 	bAction *dst = NULL;
> 	bActionChannel *dchan, *schan;
> +	bActionGroup *dgrp, *sgrp;
>
> 	if (!src) return NULL;
>
> 	dst= copy_libblock(src);
> +
> 	duplicatelist(&(dst->chanbase), &(src->chanbase));
> +	duplicatelist(&(dst->groups), &(src->groups));
> 	duplicatelist(&(dst->markers), &(src->markers));
>
> -	for (dchan=dst->chanbase.first, schan=src->chanbase.first; dchan; dchan=dchan->next, schan=schan->next){
> +	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);
> 	}
> +
> 	dst->id.flag |= LIB_FAKEUSER;
> 	dst->id.us++;
> +
> 	return dst;
> }
>
>
> Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
> ===================================================================
> --- trunk/blender/source/blender/blenloader/intern/readfile.c	2008-01-17 22:57:00 UTC (rev 13278)
> +++ trunk/blender/source/blender/blenloader/intern/readfile.c	2008-01-17 23:02:11 UTC (rev 13279)
> @@ -1859,12 +1859,24 @@
> static void direct_link_action(FileData *fd, bAction *act)
> {
> 	bActionChannel *achan;
> +	bActionGroup *agrp;
>
> 	link_list(fd, &act->chanbase);
> +	link_list(fd, &act->groups);
> 	link_list(fd, &act->markers);
>
> -	for (achan = act->chanbase.first; achan; achan=achan->next)
> +	for (achan = act->chanbase.first; achan; achan=achan->next) {
> +		achan->grp= newdataadr(fd, achan->grp);
> +
> 		link_list(fd, &achan->constraintChannels);
> +	}
> +
> +	for (agrp = act->groups.first; agrp; agrp= agrp->next) {
> +		if (agrp->channels.first) {
> +			agrp->channels.first= newdataadr(fd, agrp->channels.first);
> +			agrp->channels.last= newdataadr(fd, agrp->channels.last);
> +		}
> +	}
> }
>
> static void direct_link_armature(FileData *fd, bArmature *arm)
>
> Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
> ===================================================================
> --- trunk/blender/source/blender/blenloader/intern/writefile.c	2008-01-17 22:57:00 UTC (rev 13278)
> +++ trunk/blender/source/blender/blenloader/intern/writefile.c	2008-01-17 23:02:11 UTC (rev 13279)
> @@ -1750,6 +1750,7 @@
> {
> 	bAction			*act;
> 	bActionChannel	*chan;
> +	bActionGroup 	*grp;
> 	TimeMarker *marker;
>
> 	for(act=idbase->first; act; act= act->id.next) {
> @@ -1762,6 +1763,10 @@
> 				write_constraint_channels(wd, &chan->constraintChannels);
> 			}
>
> +			for (grp=act->groups.first; grp; grp=grp->next) {
> +				writestruct(wd, DATA, "bActionGroup", 1, grp);
> +			}
> +
> 			for (marker=act->markers.first; marker; marker=marker->next) {
> 				writestruct(wd, DATA, "TimeMarker", 1, marker);
> 			}
>
> Modified: trunk/blender/source/blender/include/BDR_drawaction.h
> ===================================================================
> --- trunk/blender/source/blender/include/BDR_drawaction.h	2008-01-17 22:57:00 UTC (rev 13278)
> +++ trunk/blender/source/blender/include/BDR_drawaction.h	2008-01-17 23:02:11 UTC (rev 13279)
> @@ -38,6 +38,7 @@
> struct IpoCurve;
> struct gla2DDrawInfo;
> struct bAction;
> +struct bActionGroup;
> struct Object;
> struct ListBase;
>
> @@ -75,14 +76,16 @@
> /* Channel Drawing */
> void draw_icu_channel(struct gla2DDrawInfo *di, struct IpoCurve *icu, float ypos);
> void draw_ipo_channel(struct gla2DDrawInfo *di, struct Ipo *ipo, float ypos);
> -void draw_action_channel(struct gla2DDrawInfo *di, bAction *act, float ypos);
> -void draw_object_channel(struct gla2DDrawInfo *di, Object *ob, float ypos);
> +void draw_agroup_channel(struct gla2DDrawInfo *di, struct bActionGroup *agrp, float ypos);
> +void draw_action_channel(struct gla2DDrawInfo *di, struct bAction *act, float ypos);
> +void draw_object_channel(struct gla2DDrawInfo *di, struct Object *ob, float ypos);
>
> /* Keydata Generation */
> void icu_to_keylist(struct IpoCurve *icu, ListBase *keys, ListBase *blocks);
> void ipo_to_keylist(struct Ipo *ipo, ListBase *keys, ListBase *blocks);
> -void action_to_keylist(bAction *act, ListBase *keys, ListBase *blocks);
> -void ob_to_keylist(Object *ob, ListBase *keys, ListBase *blocks);
> +void agroup_to_keylist(struct bActionGroup *agrp, ListBase *keys, ListBase *blocks);
> +void action_to_keylist(struct bAction *act, ListBase *keys, ListBase *blocks);
> +void ob_to_keylist(struct Object *ob, ListBase *keys, ListBase *blocks);
>
> #endif  /*  BDR_DRAWACTION_H */
>
>
> Modified: trunk/blender/source/blender/include/BIF_editaction.h
> ===================================================================
> --- trunk/blender/source/blender/include/BIF_editaction.h	2008-01-17 22:57:00 UTC (rev 13278)
> +++ trunk/blender/source/blender/include/BIF_editaction.h	2008-01-17 23:02:11 UTC (rev 13279)
> @@ -43,6 +43,7 @@
> /* Some types for easier type-testing */
> enum {
> 	ACTTYPE_NONE= 0,
> +	ACTTYPE_GROUP,
> 	ACTTYPE_ACHAN,
> 	ACTTYPE_CONCHAN,
> 	ACTTYPE_ICU,
> @@ -53,6 +54,10 @@
> };
>
> /* Macros for easier/more consistant state testing */
> +#define EDITABLE_AGRP(agrp) ((agrp->flag & AGRP_PROTECTED)==0)
> +#define EXPANDED_AGRP(agrp) (agrp->flag & AGRP_EXPANDED)
> +#define SEL_AGRP(agrp) ((agrp->flag & AGRP_SELECTED) || (agrp->flag & AGRP_ACTIVE))
> +
> #define VISIBLE_ACHAN(achan) ((achan->flag & ACHAN_HIDDEN)==0)
> #define EDITABLE_ACHAN(achan) ((VISIBLE_ACHAN(achan)) && ((achan->flag & ACHAN_PROTECTED)==0))
> #define EXPANDED_ACHAN(achan) ((VISIBLE_ACHAN(achan)) && (achan->flag & ACHAN_EXPANDED))
> @@ -81,7 +86,6 @@
>
> /* constants for setting ipo-extrapolation type */
> enum {
> -
> 	SET_EXTEND_MENU = 9,
> 	SET_EXTEND_POPUP = 10,
>
> @@ -91,9 +95,19 @@
> 	SET_EXTEND_CYCLICEXTRAPOLATION
> };
>
> +/* constants for channel rearranging */
> +/* WARNING: don't change exising ones without modifying rearrange func accordingly */
> +enum {
> +	REARRANGE_ACTCHAN_TOP= -2,
> +	REARRANGE_ACTCHAN_UP= -1,
> +	REARRANGE_ACTCHAN_DOWN= 1,
> +	REARRANGE_ACTCHAN_BOTTOM= 2
> +};
>
> +
> struct bAction;
> struct bActionChannel;
> +struct bActionGroup;
> struct bPoseChannel;
> struct Object;
> struct Ipo;
> @@ -125,12 +139,15 @@
> void copy_actdata(void);
> void paste_actdata(void);
>
> -/* Channel/strip operations */
> -void up_sel_action(void);
> -void down_sel_action(void);
> -void top_sel_action(void);
> -void bottom_sel_action(void);
> +/* Group/Channel Operations */
> +struct bActionGroup *get_active_actiongroup(struct bAction *act);
> +void set_active_actiongroup(struct bAction *act, struct bActionGroup *agrp, short select);
> +void action_groups_group(short add_group);
> +void action_groups_ungroup(void);
>
> +/* Channel/Strip Operations */
> +void rearrange_action_channels(short mode);
> +
> void expand_all_action(void);
> void openclose_level_action(short mode);
>
>
> Modified: trunk/blender/source/blender/include/BSE_editaction_types.h
> ===================================================================
> --- trunk/blender/source/blender/include/BSE_editaction_types.h	2008-01-17 22:57:00 UTC (rev 13278)
> +++ trunk/blender/source/blender/include/BSE_editaction_types.h	2008-01-17 23:02:11 UTC (rev 13279)
> @@ -37,9 +37,12 @@
> /* FILTERED ACTION DATA - TYPES */
>
> /* types of keyframe data in ActListElem */
> -#define ALE_NONE	0
> -#define ALE_IPO		1
> -#define ALE_ICU		2
> +typedef enum ALE_KEYTYPE {
> +	ALE_NONE = 0,
> +	ALE_IPO,
> +	ALE_ICU,
> +	ALE_GROUP
> +} ALE_KEYTYPE;
>
> /* This struct defines a structure used for quick access */
> typedef struct bActListElem {
> @@ -53,6 +56,8 @@
> 	void	*key_data;	/* motion data - ipo or ipo-curve */
> 	short	datatype;	/* type of motion data to expect */
>
> +	struct bActionGroup *grp;	/* action group that owns the channel */
> +
> 	void 	*owner;		/* will either be an action channel or fake ipo-channel (for keys) */
> 	short	ownertype;	/* type of owner */
> } bActListElem;
> @@ -61,17 +66,21 @@
> /* FILTER ACTION DATA - METHODS/TYPES */
>
> /* filtering flags  - under what circumstances should a channel be added */
> -#define ACTFILTER_VISIBLE		0x001	/* should channels be visible */
> -#define ACTFILTER_SEL			0x002	/* should channels be selected */
> -#define ACTFILTER_FOREDIT		0x004	/* does editable status matter */
> -#define ACTFILTER_CHANNELS		0x008	/* do we only care that it is a channel */
> -#define ACTFILTER_IPOKEYS		0x010	/* only channels referencing ipo's */
> -#define ACTFILTER_ONLYICU		0x020	/* only reference ipo-curves */
> -#define ACTFILTER_FORDRAWING	0x040	/* make list for interface drawing */
> +typedef enum ACTFILTER_FLAGS {
> +	ACTFILTER_VISIBLE		= (1<<0),	/* should channels be visible */
> +	ACTFILTER_SEL			= (1<<1),	/* should channels be selected */
> +	ACTFILTER_FOREDIT		= (1<<2),	/* does editable status matter */
> +	ACTFILTER_CHANNELS		= (1<<3),	/* do we only care that it is a channel */
> +	ACTFILTER_IPOKEYS		= (1<<4),	/* only channels referencing ipo's */
> +	ACTFILTER_ONLYICU		= (1<<5),	/* only reference ipo-curves */
> +	ACTFILTER_FORDRAWING	= (1<<6)	/* make list for interface drawing */
> +} ACTFILTER_FLAGS;
>
> /* Action Editor - Main Data types */
> -#define ACTCONT_NONE		0
> -#define ACTCONT_ACTION		1
> -#define ACTCONT_SHAPEKEY	2
> +typedef enum ACTCONT_TYPES {
> +	ACTCONT_NONE = 0,
> +	ACTCONT_ACTION,
> +	ACTCONT_SHAPEKEY
> +} ACTCONT_TYPES;
>
> #endif
>
>
> @@ Diff output truncated at 10240 characters. @@
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>


More information about the Bf-committers mailing list