[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13057] trunk/blender: == PoseLib - Overhauled Implementation ==
Joshua Leung
aligorith at gmail.com
Sun Dec 30 13:08:29 CET 2007
Revision: 13057
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13057
Author: aligorith
Date: 2007-12-30 13:08:28 +0100 (Sun, 30 Dec 2007)
Log Message:
-----------
== PoseLib - Overhauled Implementation ==
Based on feedback from Ton, I've recoded the way "PoseLibs" are implemented/exposed. Therefore, quite a bit of code has been changed to fit this in better.
Now, ANY ACTION can be a "PoseLib". A set of Markers which belong to the Action (it's taken a year, but they're finally back), are used to tag "poses" in the Action. These markers are shown using diamond-shaped blue icons (designed by Matt Ebb) in three shades - unselected/normal, selected, active.
Notes:
* Each Armature Object has an Action which acts as a PoseLib.
* Improved UI presented in buttons panel for this
-- added proper buttons for action assigning
-- renamed "Validate PoseLib" to "Auto-Sync PoseLib" (this option auto-tags poses based on keyframes found)
Like in the 3d-view, use the hotkeys:
* Shift-L to add a local marker
* Ctrl-Shift-L to rename a local marker
* Alt-L to delete selected local markers
Note: transforms, etc. are not currently available with these markers
== PoseLib Preview ==
Added a few features here:
* Left/Right-Arrow keys now change the poses too (previous and next respectively)
* Up/Down-Arrow keys also change the poses, but "jump" to a pose 5 steps away in their respective directions
Modified Paths:
--------------
trunk/blender/release/datafiles/blenderbuttons
trunk/blender/source/blender/blenkernel/intern/action.c
trunk/blender/source/blender/blenkernel/intern/object.c
trunk/blender/source/blender/blenloader/intern/readfile.c
trunk/blender/source/blender/blenloader/intern/writefile.c
trunk/blender/source/blender/include/BIF_editaction.h
trunk/blender/source/blender/include/BIF_poselib.h
trunk/blender/source/blender/include/BIF_resources.h
trunk/blender/source/blender/include/BSE_time.h
trunk/blender/source/blender/include/butspace.h
trunk/blender/source/blender/makesdna/DNA_action_types.h
trunk/blender/source/blender/makesdna/DNA_object_types.h
trunk/blender/source/blender/src/blenderbuttons.c
trunk/blender/source/blender/src/buttons_editing.c
trunk/blender/source/blender/src/drawaction.c
trunk/blender/source/blender/src/drawipo.c
trunk/blender/source/blender/src/drawnla.c
trunk/blender/source/blender/src/drawseq.c
trunk/blender/source/blender/src/drawsound.c
trunk/blender/source/blender/src/drawtime.c
trunk/blender/source/blender/src/editaction.c
trunk/blender/source/blender/src/editipo.c
trunk/blender/source/blender/src/editnla.c
trunk/blender/source/blender/src/editseq.c
trunk/blender/source/blender/src/editsound.c
trunk/blender/source/blender/src/edittime.c
trunk/blender/source/blender/src/header_action.c
trunk/blender/source/blender/src/headerbuttons.c
trunk/blender/source/blender/src/poselib.c
Modified: trunk/blender/release/datafiles/blenderbuttons
===================================================================
(Binary files differ)
Modified: trunk/blender/source/blender/blenkernel/intern/action.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/action.c 2007-12-30 00:22:39 UTC (rev 13056)
+++ trunk/blender/source/blender/blenkernel/intern/action.c 2007-12-30 12:08:28 UTC (rev 13057)
@@ -163,15 +163,6 @@
}
}
-static void free_act_poselib (bAction *act)
-{
- if (act->poselib) {
- bPoseLib *pl= act->poselib;
-
- BLI_freelistN(&pl->poses);
- MEM_freeN(pl);
- }
-}
void free_action (bAction *act)
{
@@ -187,8 +178,9 @@
if (act->chanbase.first)
BLI_freelistN(&act->chanbase);
- /* Free PoseLib */
- free_act_poselib(act);
+ /* Free pose-references */
+ if (act->markers.first)
+ BLI_freelistN(&act->markers);
}
bAction *copy_action (bAction *src)
@@ -200,6 +192,7 @@
dst= copy_libblock(src);
duplicatelist(&(dst->chanbase), &(src->chanbase));
+ duplicatelist(&(dst->markers), &(src->markers));
for (dchan=dst->chanbase.first, schan=src->chanbase.first; dchan; dchan=dchan->next, schan=schan->next){
dchan->ipo = copy_ipo(dchan->ipo);
Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c 2007-12-30 00:22:39 UTC (rev 13056)
+++ trunk/blender/source/blender/blenkernel/intern/object.c 2007-12-30 12:08:28 UTC (rev 13057)
@@ -225,12 +225,12 @@
ob->path= 0;
if(ob->ipo) ob->ipo->id.us--;
if(ob->action) ob->action->id.us--;
+ if(ob->poselib) ob->poselib->id.us--;
if(ob->dup_group) ob->dup_group->id.us--;
if(ob->defbase.first)
BLI_freelistN(&ob->defbase);
if(ob->pose) {
free_pose_channels(ob->pose);
- if (ob->pose->poselib) ob->pose->poselib->id.us--;
MEM_freeN(ob->pose);
}
free_effects(&ob->effect);
Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c 2007-12-30 00:22:39 UTC (rev 13056)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c 2007-12-30 12:08:28 UTC (rev 13057)
@@ -1802,9 +1802,6 @@
}
}
- // ob->id.lib???
- pose->poselib = newlibadr_us(fd, ob->id.lib, pose->poselib);
-
if(rebuild) {
ob->recalc= OB_RECALC;
pose->flag |= POSE_RECALC;
@@ -1864,13 +1861,10 @@
bActionChannel *achan;
link_list(fd, &act->chanbase);
+ link_list(fd, &act->markers);
for (achan = act->chanbase.first; achan; achan=achan->next)
link_list(fd, &achan->constraintChannels);
-
- act->poselib= newdataadr(fd, act->poselib);
- if (act->poselib)
- link_list(fd, &act->poselib->poses);
}
static void direct_link_armature(FileData *fd, bArmature *arm)
@@ -2790,6 +2784,7 @@
ob->track= newlibadr(fd, ob->id.lib, ob->track);
ob->ipo= newlibadr_us(fd, ob->id.lib, ob->ipo);
ob->action = newlibadr_us(fd, ob->id.lib, ob->action);
+ ob->poselib= newlibadr_us(fd, ob->id.lib, ob->poselib);
ob->dup_group= newlibadr_us(fd, ob->id.lib, ob->dup_group);
ob->proxy= newlibadr_us(fd, ob->id.lib, ob->proxy);
@@ -7821,8 +7816,6 @@
expand_constraints(fd, mainvar, &chan->constraints);
expand_doit(fd, mainvar, chan->custom);
}
-
- expand_doit(fd, mainvar, pose->poselib);
}
static void expand_armature(FileData *fd, Main *mainvar, bArmature *arm)
@@ -7900,6 +7893,7 @@
expand_doit(fd, mainvar, ob->data);
expand_doit(fd, mainvar, ob->ipo);
expand_doit(fd, mainvar, ob->action);
+ expand_doit(fd, mainvar, ob->poselib);
for (md=ob->modifiers.first; md; md=md->next) {
expand_modifier(fd, mainvar, md);
Modified: trunk/blender/source/blender/blenloader/intern/writefile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/writefile.c 2007-12-30 00:22:39 UTC (rev 13056)
+++ trunk/blender/source/blender/blenloader/intern/writefile.c 2007-12-30 12:08:28 UTC (rev 13057)
@@ -1738,6 +1738,7 @@
{
bAction *act;
bActionChannel *chan;
+ TimeMarker *marker;
for(act=idbase->first; act; act= act->id.next) {
if (act->id.us>0 || wd->current) {
@@ -1749,14 +1750,8 @@
write_constraint_channels(wd, &chan->constraintChannels);
}
- if (act->poselib) {
- bPoseLib *pl= act->poselib;
- bPoseLibRef *plr;
-
- writestruct(wd, DATA, "bPoseLib", 1, pl);
-
- for (plr= pl->poses.first; plr; plr= plr->next)
- writestruct(wd, DATA, "bPoseLibRef", 1, plr);
+ for (marker=act->markers.first; marker; marker=marker->next) {
+ writestruct(wd, DATA, "TimeMarker", 1, marker);
}
}
}
Modified: trunk/blender/source/blender/include/BIF_editaction.h
===================================================================
--- trunk/blender/source/blender/include/BIF_editaction.h 2007-12-30 00:22:39 UTC (rev 13056)
+++ trunk/blender/source/blender/include/BIF_editaction.h 2007-12-30 12:08:28 UTC (rev 13057)
@@ -100,6 +100,7 @@
struct BWinEvent;
struct Key;
struct ListBase;
+struct TimeMarker;
/* Key operations */
void transform_action_keys(int mode, int dummy);
@@ -122,7 +123,7 @@
void copy_actdata(void);
void paste_actdata(void);
-/* channel/strip operations */
+/* Channel/strip operations */
void up_sel_action(void);
void down_sel_action(void);
void top_sel_action(void);
@@ -141,6 +142,12 @@
void select_actionchannel_by_name(struct bAction *act, char *name, int select);
void selectkeys_leftright (short leftright, short select_mode);
+/* Action Markers */
+void action_set_activemarker(struct bAction *act, struct TimeMarker *active, short deselect);
+void action_add_localmarker(struct bAction *act, int frame);
+void action_rename_localmarker(struct bAction *act);
+void action_remove_localmarkers(struct bAction *act);
+
/* ShapeKey stuff */
struct Key *get_action_mesh_key(void);
int get_nearest_key_num(struct Key *key, short *mval, float *x);
Modified: trunk/blender/source/blender/include/BIF_poselib.h
===================================================================
--- trunk/blender/source/blender/include/BIF_poselib.h 2007-12-30 00:22:39 UTC (rev 13056)
+++ trunk/blender/source/blender/include/BIF_poselib.h 2007-12-30 12:08:28 UTC (rev 13057)
@@ -35,19 +35,18 @@
struct Object;
struct bAction;
-struct bPoseLib;
-struct bPoseLibRef;
+struct TimeMarker;
-char *poselib_build_poses_menu(struct bPoseLib *pl, char title[]);
-void poselib_unique_pose_name(struct bPoseLib *pl, char name[]);
-int poselib_get_free_index(struct bPoseLib *pl);
+char *poselib_build_poses_menu(struct bAction *act, char title[]);
+int poselib_get_free_index(struct bAction *act);
+struct TimeMarker *poselib_get_active_pose(struct bAction *act);
-struct bPoseLib *poselib_init_new(struct Object *ob);
-struct bPoseLib *poselib_validate(struct Object *ob);
+struct bAction *poselib_init_new(struct Object *ob);
+struct bAction *poselib_validate(struct Object *ob);
void poselib_validate_act(struct bAction *act);
-void poselib_remove_pose(struct Object *ob, struct bPoseLibRef *plr);
+void poselib_remove_pose(struct Object *ob, struct TimeMarker *marker);
void poselib_rename_pose(struct Object *ob);
void poselib_add_current_pose(struct Object *ob, int mode);
Modified: trunk/blender/source/blender/include/BIF_resources.h
===================================================================
--- trunk/blender/source/blender/include/BIF_resources.h 2007-12-30 00:22:39 UTC (rev 13056)
+++ trunk/blender/source/blender/include/BIF_resources.h 2007-12-30 12:08:28 UTC (rev 13057)
@@ -73,9 +73,9 @@
ICON_SMOOTH,
ICON_POTATO,
ICON_MARKER_HLT,
- ICON_NORMALVIEW,
- ICON_LOCALVIEW,
- ICON_UNUSEDVIEW,
+ ICON_PMARKER_ACT,
+ ICON_PMARKER_SEL,
+ ICON_PMARKER,
ICON_VIEWZOOM,
ICON_SORTALPHA,
ICON_SORTTIME,
Modified: trunk/blender/source/blender/include/BSE_time.h
===================================================================
--- trunk/blender/source/blender/include/BSE_time.h 2007-12-30 00:22:39 UTC (rev 13056)
+++ trunk/blender/source/blender/include/BSE_time.h 2007-12-30 12:08:28 UTC (rev 13057)
@@ -35,8 +35,14 @@
struct ListBase;
struct View2D;
+struct TimeMarker;
-/* ******** Markers - General Api ********* */
+/* ****** Marker Macros - General API ****** */
+
+/* macro for getting the scene's set of markers */
+#define SCE_MARKERS (&(G.scene->markers))
+
+/* ******** Markers - General API ********* */
void add_marker(int frame);
void duplicate_marker(void);
void remove_marker(void);
@@ -45,18 +51,26 @@
void borderselect_markers(void);
void deselect_markers(short test, short sel);
-struct TimeMarker *find_nearest_marker(int clip_y);
+struct TimeMarker *find_nearest_marker(struct ListBase *markers, int clip_y);
void nextprev_marker(short dir);
void get_minmax_markers(short sel, float *first, float *last);
int find_nearest_marker_time(float dx);
+struct TimeMarker *get_frame_marker(int frame);
void add_marker_to_cfra_elem(struct ListBase *lb, struct TimeMarker *marker, short only_sel);
void make_marker_cfra_list(struct ListBase *lb, short only_sel);
-void draw_markers_timespace(int lines);
-TimeMarker *get_frame_marker(int frame);
+/* ********* Markers - Drawing API ********* */
+/* flags for drawing markers */
+enum {
+ DRAW_MARKERS_LINES = (1<<0),
+ DRAW_MARKERS_LOCAL = (1<<1)
+};
+
+void draw_markers_timespace(struct ListBase *markers, int flag);
+
/* ******** Animation - Preview Range ************* */
void anim_previewrange_set(void);
void anim_previewrange_clear(void);
Modified: trunk/blender/source/blender/include/butspace.h
===================================================================
--- trunk/blender/source/blender/include/butspace.h 2007-12-30 00:22:39 UTC (rev 13056)
+++ trunk/blender/source/blender/include/butspace.h 2007-12-30 12:08:28 UTC (rev 13057)
@@ -511,13 +511,16 @@
#define B_ARM_CALCPATHS 2303
#define B_ARM_CLEARPATHS 2304
-#define B_POSELIB_NEW 2310
-#define B_POSELIB_VALIDATE 2311
-#define B_POSELIB_ADDPOSE 2312
-#define B_POSELIB_REPLACEP 2313
-#define B_POSELIB_REMOVEP 2314
-#define B_POSELIB_APPLYP 2315
+#define B_POSELIB_VALIDATE 2310
+#define B_POSELIB_ADDPOSE 2311
+#define B_POSELIB_REPLACEP 2312
+#define B_POSELIB_REMOVEP 2313
+#define B_POSELIB_APPLYP 2314
+ /* these shouldn't be here... */
+#define B_POSELIB_BROWSE 2320
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list