[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12336] trunk/blender/source/blender: == Action/NLA Transform ==

Joshua Leung aligorith at gmail.com
Mon Oct 22 07:32:17 CEST 2007


Revision: 12336
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12336
Author:   aligorith
Date:     2007-10-22 07:32:17 +0200 (Mon, 22 Oct 2007)

Log Message:
-----------
== Action/NLA Transform ==

Added a new auto-snapping mode: snap to nearest marker. 
This mode can be toggled using the ALTKEY.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/action.c
    trunk/blender/source/blender/makesdna/DNA_action_types.h
    trunk/blender/source/blender/src/header_action.c
    trunk/blender/source/blender/src/header_nla.c
    trunk/blender/source/blender/src/transform.c

Modified: trunk/blender/source/blender/blenkernel/intern/action.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/action.c	2007-10-22 02:43:07 UTC (rev 12335)
+++ trunk/blender/source/blender/blenkernel/intern/action.c	2007-10-22 05:32:17 UTC (rev 12336)
@@ -819,7 +819,7 @@
 			
 			if(conchan && conchan->ipo) {
 				calc_ipo(conchan->ipo, ctime);
-
+				
 				icu= conchan->ipo->curve.first;	// only one ipo now
 				if(icu) {
 					nic= MEM_callocN(sizeof(NlaIpoChannel), "NlaIpoChannel constr");

Modified: trunk/blender/source/blender/makesdna/DNA_action_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_action_types.h	2007-10-22 02:43:07 UTC (rev 12335)
+++ trunk/blender/source/blender/makesdna/DNA_action_types.h	2007-10-22 05:32:17 UTC (rev 12336)
@@ -35,7 +35,6 @@
 #include "DNA_view2d_types.h"
 
 struct SpaceLink;
-struct ListBase;
 struct Object;
 
 /* PoseChannel stores the results of Actions (ipos) and transform information 
@@ -130,6 +129,7 @@
 	short blockhandler[8];
 
 	View2D v2d;	
+	
 	bAction		*action;		/* the currently active action */
 	short flag, autosnap;		/* flag: bitmapped settings; autosnap: automatic keyframe snapping mode */
 	short pin, actnr, lock;		/* pin: keep showing current action; actnr: used for finding chosen action from menu; lock: lock time to other windows */
@@ -138,38 +138,48 @@
 } SpaceAction;
 
 /* Action Channel flags */
-#define	ACHAN_SELECTED	0x00000001
-#define ACHAN_HILIGHTED	0x00000002
-#define ACHAN_HIDDEN	0x00000004
-#define ACHAN_PROTECTED 0x00000008
-#define ACHAN_EXPANDED 	0x00000010
-#define ACHAN_SHOWIPO	0x00000020
-#define ACHAN_SHOWCONS 	0x00000040
-#define ACHAN_MOVED     0x80000000
+typedef enum ACHAN_FLAG {
+	ACHAN_SELECTED	= (1<<0),
+	ACHAN_HILIGHTED = (1<<1),
+	ACHAN_HIDDEN	= (1<<2),
+	ACHAN_PROTECTED = (1<<3),
+	ACHAN_EXPANDED 	= (1<<4),
+	ACHAN_SHOWIPO	= (1<<5),
+	ACHAN_SHOWCONS 	= (1<<6),
+	ACHAN_MOVED     = (1<<31),
+} ACHAN_FLAG; 
 
 /* SpaceAction flag */
-	/* during transform */
-#define SACTION_MOVING		1	
-	/* show sliders (if relevant) - limited to shape keys for now */
-#define SACTION_SLIDERS		2	
-	/* draw time in seconds instead of time in frames */
-#define SACTION_DRAWTIME	4	
+typedef enum SACTION_FLAG {
+		/* during transform */
+	SACTION_MOVING	= (1<<0),	
+		/* show sliders (if relevant) */
+	SACTION_SLIDERS	= (1<<1),	
+		/* draw time in seconds instead of time in frames */
+	SACTION_DRAWTIME = (1<<2)
+} SACTION_FLAG;	
 
 /* SpaceAction AutoSnap Settings (also used by SpaceNLA) */
-	/* no auto-snap */
-#define SACTSNAP_OFF	0	
-	/* snap to 1.0 frame/second intervals */
-#define SACTSNAP_STEP	1
-	/* snap to actual frames/seconds (nla-action time) */
-#define SACTSNAP_FRAME	2	
+typedef enum SACTSNAP_MODES {
+		/* no auto-snap */
+	SACTSNAP_OFF = 0	
+		/* snap to 1.0 frame/second intervals */
+	SACTSNAP_STEP,
+		/* snap to actual frames/seconds (nla-action time) */
+	SACTSNAP_FRAME,
+		/* snap to nearest marker */
+	SACTSNAP_MARKER,
+} SACTSNAP_MODES;	
 
 /* Pose->flag */
-	/* results in armature_rebuild_pose being called */
-#define POSE_RECALC		1
-	/* prevents any channel from getting overridden by anim from IPO */
-#define POSE_LOCKED		2
-	/* clears the POSE_LOCKED flag for the next time the pose is evaluated */
-#define POSE_DO_UNLOCK	4
+typedef enum POSE_FLAG {
+		/* results in armature_rebuild_pose being called */
+	POSE_RECALC = (1<<0),
+		/* prevents any channel from getting overridden by anim from IPO */
+	POSE_LOCKED	= (1<<1),
+		/* clears the POSE_LOCKED flag for the next time the pose is evaluated */
+	POSE_DO_UNLOCK	= (1<<2)
+} POSE_FLAG;
 
 /* PoseChannel (transform) flags */
 enum	{
@@ -189,22 +199,26 @@
 };
 
 /* PoseChannel constflag (constraint detection) */
-#define PCHAN_HAS_IK		1
-#define PCHAN_HAS_CONST		2
-	/* only used for drawing Posemode, not stored in channel */
-#define PCHAN_HAS_ACTION	4
-#define PCHAN_HAS_TARGET	8
-	/* only for drawing Posemode too */
-#define PCHAN_HAS_STRIDE	16
+typedef PCHAN_CONSTFLAG {
+	PCHAN_HAS_IK		= (1<<0),
+	PCHAN_HAS_CONST		= (1<<1),
+		/* only used for drawing Posemode, not stored in channel */
+	PCHAN_HAS_ACTION	= (1<<2),
+	PCHAN_HAS_TARGET	= (1<<3),
+		/* only for drawing Posemode too */
+	PCHAN_HAS_STRIDE	= (1<<4)
+} PCHAN_CONSTFLAG;
 
 /* PoseChannel->ikflag */
-#define		BONE_IK_NO_XDOF 1
-#define		BONE_IK_NO_YDOF 2
-#define		BONE_IK_NO_ZDOF 4
+typedef PCHAN_IKFLAG {
+	BONE_IK_NO_XDOF = (1<<0),
+	BONE_IK_NO_YDOF = (1<<1),
+	BONE_IK_NO_ZDOF = (1<<2),
 
-#define		BONE_IK_XLIMIT	8
-#define		BONE_IK_YLIMIT	16
-#define		BONE_IK_ZLIMIT	32
+	BONE_IK_XLIMIT	= (1<<3),
+	BONE_IK_YLIMIT	= (1<<4),
+	BONE_IK_ZLIMIT	= (1<<5)
+} PCHAN_IKFLAG;
 
 
 #endif

Modified: trunk/blender/source/blender/src/header_action.c
===================================================================
--- trunk/blender/source/blender/src/header_action.c	2007-10-22 02:43:07 UTC (rev 12335)
+++ trunk/blender/source/blender/src/header_action.c	2007-10-22 05:32:17 UTC (rev 12336)
@@ -1195,13 +1195,13 @@
 	
 	if (G.saction->flag & SACTION_DRAWTIME) {
 		uiDefButS(block, MENU, B_REDR,
-				"Auto-Snap Keyframes %t|Off %x0|Second Step %x1|Nearest Second %x2", 
+				"Auto-Snap Keyframes %t|Off %x0|Second Step %x1|Nearest Second %x2|Nearest Marker %x3", 
 				xco,0,70,YIC, &(G.saction->autosnap), 0, 1, 0, 0, 
 				"Auto-snapping mode for keyframes when transforming");
 	}
 	else {
 		uiDefButS(block, MENU, B_REDR, 
-				"Auto-Snap Keyframes %t|Off %x0|Frame Step %x1|Nearest Frame %x2", 
+				"Auto-Snap Keyframes %t|Off %x0|Frame Step %x1|Nearest Frame %x2|Nearest Marker %x3", 
 				xco,0,70,YIC, &(G.saction->autosnap), 0, 1, 0, 0, 
 				"Auto-snapping mode for keyframes when transforming");
 	}

Modified: trunk/blender/source/blender/src/header_nla.c
===================================================================
--- trunk/blender/source/blender/src/header_nla.c	2007-10-22 02:43:07 UTC (rev 12335)
+++ trunk/blender/source/blender/src/header_nla.c	2007-10-22 05:32:17 UTC (rev 12336)
@@ -507,13 +507,13 @@
 	
 	if (G.snla->flag & SNLA_DRAWTIME) {
 		uiDefButS(block, MENU, B_REDR,
-				"Auto-Snap Strips/Keyframes %t|Off %x0|Second Step %x1|Nearest Second %x2", 
+				"Auto-Snap Strips/Keyframes %t|Off %x0|Second Step %x1|Nearest Second %x2|Nearest Marker %x3", 
 				xco,0,70,YIC, &(G.snla->autosnap), 0, 1, 0, 0, 
 				"Auto-snapping mode for strips and keyframes when transforming");
 	}
 	else {
 		uiDefButS(block, MENU, B_REDR, 
-				"Auto-Snap Strips/Keyframes %t|Off %x0|Frame Step %x1|Nearest Frame %x2", 
+				"Auto-Snap Strips/Keyframes %t|Off %x0|Frame Step %x1|Nearest Frame %x2|Nearest Marker %x3", 
 				xco,0,70,YIC, &(G.snla->autosnap), 0, 1, 0, 0, 
 				"Auto-snapping mode for strips and keyframes when transforming");
 	}

Modified: trunk/blender/source/blender/src/transform.c
===================================================================
--- trunk/blender/source/blender/src/transform.c	2007-10-22 02:43:07 UTC (rev 12335)
+++ trunk/blender/source/blender/src/transform.c	2007-10-22 05:32:17 UTC (rev 12336)
@@ -3373,6 +3373,8 @@
 				autosnap= SACTSNAP_STEP;
 			else if (G.qual == LR_SHIFTKEY)
 				autosnap= SACTSNAP_FRAME;
+			else if (G.qual == LR_ALTKEY)
+				autosnap= SACTSNAP_MARKER;
 			else
 				autosnap= SACTSNAP_OFF;
 			break;
@@ -3382,6 +3384,9 @@
 		case SACTSNAP_FRAME:
 			autosnap= (G.qual==LR_SHIFTKEY)? SACTSNAP_OFF: SACTSNAP_FRAME;
 			break;
+		case SACTSNAP_MARKER:
+			autosnap= (G.qual==LR_ALTKEY)? SACTSNAP_OFF: SACTSNAP_MARKER;
+			break;
 		}
 	}
 	else if (t->spacetype == SPACE_NLA && G.snla) {
@@ -3391,6 +3396,8 @@
 				autosnap= SACTSNAP_STEP;
 			else if (G.qual == LR_SHIFTKEY)
 				autosnap= SACTSNAP_FRAME;
+			else if (G.qual == LR_ALTKEY)
+				autosnap= SACTSNAP_MARKER;
 			else
 				autosnap= SACTSNAP_OFF;
 			break;
@@ -3400,6 +3407,9 @@
 		case SACTSNAP_FRAME:
 			autosnap= (G.qual==LR_SHIFTKEY)? SACTSNAP_OFF: SACTSNAP_FRAME;
 			break;
+		case SACTSNAP_MARKER:
+			autosnap= (G.qual==LR_ALTKEY)? SACTSNAP_OFF: SACTSNAP_MARKER;
+			break;
 		}
 	}
 	else {
@@ -3407,6 +3417,8 @@
 			autosnap= SACTSNAP_STEP;
 		else if (G.qual == LR_SHIFTKEY)
 			autosnap= SACTSNAP_FRAME;
+		else if (G.qual == LR_ALTKEY)
+			autosnap= SACTSNAP_MARKER;
 		else
 			autosnap= SACTSNAP_OFF;
 	}
@@ -3466,6 +3478,25 @@
 		else
 			*(td->val)= val;
 	}
+	/* snap key to nearest marker? */
+	else if (autosnap == SACTSNAP_MARKER) {
+		float val;
+		
+		/* convert frame to nla-action time (if needed) */
+		if (ob) 
+			val= get_action_frame_inv(ob, *(td->val));
+		else
+			val= *(td->val);
+		
+		/* snap to nearest marker */
+		val= (float)find_nearest_marker_time(val);
+			
+		/* convert frame out of nla-action time */
+		if (ob)
+			*(td->val)= get_action_frame(ob, val);
+		else
+			*(td->val)= val;
+	}
 }
 
 /* ----------------- Translation ----------------------- */





More information about the Bf-blender-cvs mailing list