[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