[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11545] trunk/blender/source/blender/src: == Action Editor - Time Stuff for Tools ==

Joshua Leung aligorith at gmail.com
Sat Aug 11 11:20:57 CEST 2007


Revision: 11545
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11545
Author:   aligorith
Date:     2007-08-11 11:20:56 +0200 (Sat, 11 Aug 2007)

Log Message:
-----------
== 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.

Modified Paths:
--------------
    trunk/blender/source/blender/src/editaction.c
    trunk/blender/source/blender/src/editipo_mods.c
    trunk/blender/source/blender/src/edittime.c
    trunk/blender/source/blender/src/header_action.c

Modified: trunk/blender/source/blender/src/editaction.c
===================================================================
--- trunk/blender/source/blender/src/editaction.c	2007-08-11 02:08:34 UTC (rev 11544)
+++ trunk/blender/source/blender/src/editaction.c	2007-08-11 09:20:56 UTC (rev 11545)
@@ -797,7 +797,7 @@
 	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 @@
 							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 @@
 							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 @@
 						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 @@
 							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 @@
 						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 @@
 			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 @@
 			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 @@
 			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;
 		

Modified: trunk/blender/source/blender/src/editipo_mods.c
===================================================================
--- trunk/blender/source/blender/src/editipo_mods.c	2007-08-11 02:08:34 UTC (rev 11544)
+++ trunk/blender/source/blender/src/editipo_mods.c	2007-08-11 09:20:56 UTC (rev 11545)
@@ -575,6 +575,14 @@
 	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 @@
 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 @@
 		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;

Modified: trunk/blender/source/blender/src/edittime.c
===================================================================
--- trunk/blender/source/blender/src/edittime.c	2007-08-11 02:08:34 UTC (rev 11544)
+++ trunk/blender/source/blender/src/edittime.c	2007-08-11 09:20:56 UTC (rev 11545)
@@ -167,6 +167,7 @@
 {
 	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 @@
 			
 			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 & TIME_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));
 				}

Modified: trunk/blender/source/blender/src/header_action.c
===================================================================
--- trunk/blender/source/blender/src/header_action.c	2007-08-11 02:08:34 UTC (rev 11544)
+++ trunk/blender/source/blender/src/header_action.c	2007-08-11 09:20:56 UTC (rev 11545)
@@ -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 @@
 			 
 	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 @@
 		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,15 +829,28 @@
 					  UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
 	uiBlockSetButmFunc(block, do_action_keymenu_snapmenu, NULL);
 
+	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 {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list