Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Leung <aligorith@gmail.com>2007-08-11 13:20:56 +0400
committerJoshua Leung <aligorith@gmail.com>2007-08-11 13:20:56 +0400
commite8668988a31f700c330a05838ec949662458cc4e (patch)
treec9e484399427a7ba5b2a2ee36e56ea9dd14b8c55 /source/blender/src
parent0f3af56e26b134c380a89bf51604893d72ed2510 (diff)
== Action Editor - Time Stuff for Tools ==
Part 2 of work from yesterday. Now tools in Action Editor are aware of (work well) with time display in seconds as well.
Diffstat (limited to 'source/blender/src')
-rw-r--r--source/blender/src/editaction.c86
-rw-r--r--source/blender/src/editipo_mods.c13
-rw-r--r--source/blender/src/edittime.c17
-rw-r--r--source/blender/src/header_action.c53
4 files changed, 133 insertions, 36 deletions
diff --git a/source/blender/src/editaction.c b/source/blender/src/editaction.c
index 80179d181ed..cb46247d5c2 100644
--- a/source/blender/src/editaction.c
+++ b/source/blender/src/editaction.c
@@ -797,7 +797,7 @@ static short transform_action_loop (TransVert *tv, int tvtot, char mode, short c
float deltax, startx;
float cenf[2];
float sval[2], cval[2], lastcval[2]={0,0};
- float fac=0.0f;
+ float fac=0.0f, secf= ((float)G.scene->r.frs_sec);
int loop=1, invert=0;
int i;
short cancel=0, firsttime=1;
@@ -921,8 +921,12 @@ static short transform_action_loop (TransVert *tv, int tvtot, char mode, short c
deltax = get_action_frame_inv(OBACT, cval[0]);
deltax -= get_action_frame_inv(OBACT, sval[0]);
- if (autosnap == SACTSNAP_STEP)
- deltax= 1.0f*floor(deltax/1.0f + 0.5f);
+ if (autosnap == SACTSNAP_STEP) {
+ if (G.saction->flag & SACTION_DRAWTIME)
+ deltax= (float)( floor((deltax/secf) + 0.5f) * secf );
+ else
+ deltax= (float)( floor(deltax + 0.5f) );
+ }
fac = get_action_frame_inv(OBACT, tv[i].loc[0]);
fac += deltax;
@@ -932,8 +936,12 @@ static short transform_action_loop (TransVert *tv, int tvtot, char mode, short c
deltax = cval[0] - sval[0];
fac= deltax;
- if (autosnap == SACTSNAP_STEP)
- fac= 1.0f*floor(fac/1.0f + 0.5f);
+ if (autosnap == SACTSNAP_STEP) {
+ if (G.saction->flag & SACTION_DRAWTIME)
+ fac= (float)( floor((deltax/secf) + 0.5f) * secf );
+ else
+ fac= (float)( floor(fac + 0.5f) );
+ }
tv[i].loc[0]+=fac;
}
@@ -944,18 +952,21 @@ static short transform_action_loop (TransVert *tv, int tvtot, char mode, short c
fac= fabs(deltax/startx);
if (autosnap == SACTSNAP_STEP) {
- fac= 1.0f*floor(fac/1.0f + 0.5f);
+ if (G.saction->flag & SACTION_DRAWTIME)
+ fac= (float)( floor(fac/secf + 0.5f) * secf );
+ else
+ fac= (float)( floor(fac + 0.5f) );
}
- if (invert){
- if (i % 03 == 0){
+ if (invert) {
+ if (i % 03 == 0) {
memcpy (tv[i].loc, tv[i].oldloc, sizeof(tv[i+2].oldloc));
}
- if (i % 03 == 2){
+ if (i % 03 == 2) {
memcpy (tv[i].loc, tv[i].oldloc, sizeof(tv[i-2].oldloc));
}
- fac*=-1;
+ fac *= -1;
}
startx= (G.scene->r.cfra);
if(NLA_ACTION_SCALED && context==ACTCONT_ACTION)
@@ -979,7 +990,10 @@ static short transform_action_loop (TransVert *tv, int tvtot, char mode, short c
snapval= tv[i].loc[0];
/* snap to nearest frame */
- snapval= (float)(floor(snapval+0.5));
+ if (G.saction->flag & SACTION_DRAWTIME)
+ snapval= (float)( floor((snapval/secf) + 0.5f) * secf );
+ else
+ snapval= (float)( floor(snapval+0.5f) );
/* convert frame out of nla-action time */
if (NLA_ACTION_SCALED && context==ACTCONT_ACTION)
@@ -999,9 +1013,30 @@ static short transform_action_loop (TransVert *tv, int tvtot, char mode, short c
fac = get_action_frame_inv(OBACT, cval[0]);
fac -= get_action_frame_inv(OBACT, sval[0]);
- if (autosnap == SACTSNAP_STEP)
- fac= 1.0f*floor(fac/1.0f + 0.5f);
+ if (autosnap == SACTSNAP_STEP) {
+ if (G.saction->flag & SACTION_DRAWTIME)
+ fac= floor(fac/secf + 0.5f);
+ else
+ fac= floor(fac + 0.5f);
+ }
+ else if (autosnap == SACTSNAP_FRAME) {
+ if (G.saction->flag & SACTION_DRAWTIME)
+ fac= fac / secf;
+ }
+ }
+ else {
+ if (autosnap == SACTSNAP_STEP) {
+ if (G.saction->flag & SACTION_DRAWTIME)
+ fac= floor(fac/secf + 0.5f);
+ else
+ fac= floor(fac + 0.5f);
+ }
+ else if (autosnap == SACTSNAP_FRAME) {
+ if (G.saction->flag & SACTION_DRAWTIME)
+ fac= fac / secf;
+ }
}
+
sprintf(str, "deltaX: %.3f", fac);
headerprint(str);
}
@@ -1157,11 +1192,17 @@ void snap_action_keys(short mode)
strcpy(str, "Snap Keys To Nearest Frame");
break;
case 2:
- strcpy(str, "Snap Keys To Current Frame");
+ if (G.saction->flag & SACTION_DRAWTIME)
+ strcpy(str, "Snap Keys To Current Time");
+ else
+ strcpy(str, "Snap Keys To Current Frame");
break;
case 3:
strcpy(str, "Snap Keys To Nearest Marker");
break;
+ case 4:
+ strcpy(str, "Snap Keys To Nearest Second");
+ break;
default:
return;
}
@@ -2860,7 +2901,11 @@ void winqreadactionspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if (G.qual & LR_SHIFTKEY) {
/* mirror keyframes */
if (data) {
- val = pupmenu("Mirror Keys Over%t|Current Frame%x1|Vertical Axis%x2|Horizontal Axis %x3|Selected Marker %x4");
+ if (G.saction->flag & SACTION_DRAWTIME)
+ val = pupmenu("Mirror Keys Over%t|Current Time%x1|Vertical Axis%x2|Horizontal Axis %x3|Selected Marker %x4");
+ else
+ val = pupmenu("Mirror Keys Over%t|Current Frame%x1|Vertical Axis%x2|Horizontal Axis %x3|Selected Marker %x4");
+
mirror_action_keys(val);
}
}
@@ -2911,12 +2956,17 @@ void winqreadactionspace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if (mval[0]>=ACTWIDTH) {
if (G.qual & LR_SHIFTKEY) {
if (data) {
- val = pupmenu("Snap Keys To%t|Nearest Frame%x1|Current Frame%x2|Nearest Marker %x3");
+ if (G.saction->flag & SACTION_DRAWTIME)
+ val = pupmenu("Snap Keys To%t|Nearest Second%x4|Current Time%x2|Nearest Marker %x3");
+ else
+ val = pupmenu("Snap Keys To%t|Nearest Frame%x1|Current Frame%x2|Nearest Marker %x3");
+
snap_action_keys(val);
}
}
- else
- transform_action_keys ('s', 0);
+ else {
+ transform_action_keys('s', 0);
+ }
}
break;
diff --git a/source/blender/src/editipo_mods.c b/source/blender/src/editipo_mods.c
index 08157c7eef3..2fc4f458e01 100644
--- a/source/blender/src/editipo_mods.c
+++ b/source/blender/src/editipo_mods.c
@@ -575,6 +575,14 @@ static int snap_bezier_nearest(BezTriple *bezt)
return 0;
}
+static int snap_bezier_nearestsec(BezTriple *bezt)
+{
+ float secf = (float)(G.scene->r.frs_sec);
+ if(bezt->f2 & SELECT)
+ bezt->vec[1][0]= (float)(floor(bezt->vec[1][0]/secf + 0.5f) * secf);
+ return 0;
+}
+
static int snap_bezier_cframe(BezTriple *bezt)
{
if(bezt->f2 & SELECT)
@@ -593,7 +601,7 @@ static int snap_bezier_nearmarker(BezTriple *bezt)
void snap_ipo_keys(Ipo *ipo, short snaptype)
{
switch (snaptype) {
- case 1: /* snap to nearest */
+ case 1: /* snap to nearest frame */
ipo_keys_bezier_loop(ipo, snap_bezier_nearest, calchandles_ipocurve);
break;
case 2: /* snap to current frame */
@@ -602,6 +610,9 @@ void snap_ipo_keys(Ipo *ipo, short snaptype)
case 3: /* snap to nearest marker */
ipo_keys_bezier_loop(ipo, snap_bezier_nearmarker, calchandles_ipocurve);
break;
+ case 4: /* snap to nearest second */
+ ipo_keys_bezier_loop(ipo, snap_bezier_nearestsec, calchandles_ipocurve);
+ break;
default: /* just in case */
ipo_keys_bezier_loop(ipo, snap_bezier_nearest, calchandles_ipocurve);
break;
diff --git a/source/blender/src/edittime.c b/source/blender/src/edittime.c
index b702b77d6bc..575bc14dcd3 100644
--- a/source/blender/src/edittime.c
+++ b/source/blender/src/edittime.c
@@ -167,6 +167,7 @@ void transform_markers(int mode, int smode) // mode and smode unused here, for c
{
SpaceLink *slink= curarea->spacedata.first;
SpaceTime *stime= curarea->spacedata.first;
+ SpaceAction *saction = curarea->spacedata.first;
TimeMarker *marker, *selmarker=NULL;
float dx, fac;
int a, ret_val= 0, totmark=0, *oldframe, offs, firsttime=1;
@@ -219,22 +220,34 @@ void transform_markers(int mode, int smode) // mode and smode unused here, for c
if(totmark==1) { // we print current marker value
if (ELEM(slink->spacetype, SPACE_TIME, SPACE_SOUND)) {
- if(stime->flag & TIME_DRAWFRAMES)
+ if (stime->flag & TIME_DRAWFRAMES)
sprintf(str, "Marker %d offset %d", selmarker->frame, offs);
else
sprintf(str, "Marker %.2f offset %.2f", (selmarker->frame/(float)G.scene->r.frs_sec), (offs/(float)G.scene->r.frs_sec));
}
+ else if (slink->spacetype == SPACE_ACTION) {
+ if (saction->flag & SACTION_DRAWTIME)
+ sprintf(str, "Marker %.2f offset %.2f", (selmarker->frame/(float)G.scene->r.frs_sec), (offs/(float)G.scene->r.frs_sec));
+ else
+ sprintf(str, "Marker %.2f offset %.2f", (double)(selmarker->frame), (double)(offs));
+ }
else {
sprintf(str, "Marker %.2f offset %.2f", (double)(selmarker->frame), (double)(offs));
}
}
else {
if (ELEM(slink->spacetype, SPACE_TIME, SPACE_SOUND)) {
- if(stime->flag & TIME_DRAWFRAMES)
+ if (stime->flag & TIME_DRAWFRAMES)
sprintf(str, "Marker offset %d ", offs);
else
sprintf(str, "Marker offset %.2f ", (offs/(float)G.scene->r.frs_sec));
}
+ else if (slink->spacetype == SPACE_ACTION) {
+ if (saction->flag & SACTION_DRAWTIME)
+ sprintf(str, "Marker offset %.2f ", (offs/(float)G.scene->r.frs_sec));
+ else
+ sprintf(str, "Marker offset %.2f ", (double)(offs));
+ }
else {
sprintf(str, "Marker offset %.2f ", (double)(offs));
}
diff --git a/source/blender/src/header_action.c b/source/blender/src/header_action.c
index 289629f8d91..db2f2bd9be2 100644
--- a/source/blender/src/header_action.c
+++ b/source/blender/src/header_action.c
@@ -134,6 +134,7 @@
#define ACTMENU_KEY_SNAP_NEARFRAME 1
#define ACTMENU_KEY_SNAP_CURFRAME 2
#define ACTMENU_KEY_SNAP_NEARMARK 3
+#define ACTMENU_KEY_SNAP_NEARTIME 4
#define ACTMENU_KEY_MIRROR_CURFRAME 1
#define ACTMENU_KEY_MIRROR_YAXIS 2
@@ -282,13 +283,13 @@ static uiBlock *action_viewmenu(void *arg_unused)
if (G.saction->flag & SACTION_DRAWTIME) {
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
- "Show Frames|T", 0, yco-=20,
+ "Show Frames|Ctrl T", 0, yco-=20,
menuwidth, 19, NULL, 0.0, 0.0, 1,
ACTMENU_VIEW_TIME, "");
}
else {
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
- "Show Seconds|T", 0, yco-=20,
+ "Show Seconds|Ctrl T", 0, yco-=20,
menuwidth, 19, NULL, 0.0, 0.0, 1,
ACTMENU_VIEW_TIME, "");
}
@@ -811,6 +812,7 @@ static void do_action_keymenu_snapmenu(void *arg, int event)
case ACTMENU_KEY_SNAP_NEARFRAME:
case ACTMENU_KEY_SNAP_CURFRAME:
case ACTMENU_KEY_SNAP_NEARMARK:
+ case ACTMENU_KEY_SNAP_NEARTIME:
snap_action_keys(event);
break;
}
@@ -827,14 +829,27 @@ static uiBlock *action_keymenu_snapmenu(void *arg_unused)
UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
uiBlockSetButmFunc(block, do_action_keymenu_snapmenu, NULL);
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
- "Nearest Frame|Shift S, 1", 0, yco-=20,
- menuwidth, 19, NULL, 0.0, 0.0, 0,
- ACTMENU_KEY_SNAP_NEARFRAME, "");
- uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
- "Current Frame|Shift S, 2", 0, yco-=20,
- menuwidth, 19, NULL, 0.0, 0.0, 0,
- ACTMENU_KEY_SNAP_CURFRAME, "");
+ if (G.saction->flag & SACTION_DRAWTIME) {
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
+ "Nearest Second|Shift S, 1", 0, yco-=20,
+ menuwidth, 19, NULL, 0.0, 0.0, 0,
+ ACTMENU_KEY_SNAP_NEARTIME, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
+ "Current Time|Shift S, 2", 0, yco-=20,
+ menuwidth, 19, NULL, 0.0, 0.0, 0,
+ ACTMENU_KEY_SNAP_CURFRAME, "");
+
+ }
+ else {
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
+ "Nearest Frame|Shift S, 1", 0, yco-=20,
+ menuwidth, 19, NULL, 0.0, 0.0, 0,
+ ACTMENU_KEY_SNAP_NEARFRAME, "");
+ uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
+ "Current Frame|Shift S, 2", 0, yco-=20,
+ menuwidth, 19, NULL, 0.0, 0.0, 0,
+ ACTMENU_KEY_SNAP_CURFRAME, "");
+ }
uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
"Nearest Marker|Shift S, 3", 0, yco-=20,
menuwidth, 19, NULL, 0.0, 0.0, 0,
@@ -1154,12 +1169,20 @@ void action_buttons(void)
/* draw AUTOSNAP */
xco+= 8;
- uiDefIconTextButS(block, ICONTEXTROW,B_REDR, ICON_PROP_OFF,
- "Auto-Snap Keys %t|Off %x0|Frame Step %x1|Nearest Frame %x2",
- xco,0,XIC+10,YIC, &(G.saction->autosnap), 0, 1, 0, 0,
- "Auto-snapping mode for keys when transforming");
+ if (G.saction->flag & SACTION_DRAWTIME) {
+ uiDefButS(block, MENU, B_REDR,
+ "Auto-Snap Keyframes %t|Off %x0|Second Step %x1|Nearest Second %x2",
+ 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",
+ xco,0,70,YIC, &(G.saction->autosnap), 0, 1, 0, 0,
+ "Auto-snapping mode for keyframes when transforming");
+ }
- xco+= (XIC + 18);
+ xco+= (70 + 8);
/* draw LOCK*/