[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