[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28629] branches/render25/source/blender/ editors: merged over last commit, 28428

Joseph Eagar joeedh at gmail.com
Thu May 6 22:10:37 CEST 2010


Revision: 28629
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28629
Author:   joeedh
Date:     2010-05-06 22:10:37 +0200 (Thu, 06 May 2010)

Log Message:
-----------
merged over last commit, 28428

Modified Paths:
--------------
    branches/render25/source/blender/editors/interface/interface_draw.c
    branches/render25/source/blender/editors/transform/transform.c
    branches/render25/source/blender/editors/transform/transform.h
    branches/render25/source/blender/editors/transform/transform_conversions.c
    branches/render25/source/blender/editors/transform/transform_generics.c

Modified: branches/render25/source/blender/editors/interface/interface_draw.c
===================================================================
--- branches/render25/source/blender/editors/interface/interface_draw.c	2010-05-06 19:54:43 UTC (rev 28628)
+++ branches/render25/source/blender/editors/interface/interface_draw.c	2010-05-06 20:10:37 UTC (rev 28629)
@@ -1088,9 +1088,13 @@
 
 	glTranslatef(centerx, centery, 0.f);
 	glScalef(diam, diam, 0.f);
-	glVertexPointer(2, GL_FLOAT, 0, scopes->vecscope);
-	glDrawArrays(GL_POINTS, 0, scopes->waveform_tot);
 
+	/*apparently this can sometimes be NULL? - joeedh*/
+	if (scopes) {
+		glVertexPointer(2, GL_FLOAT, 0, scopes->vecscope);
+		glDrawArrays(GL_POINTS, 0, scopes->waveform_tot);
+	}
+
 	glDisableClientState(GL_VERTEX_ARRAY);
 	glPopMatrix();
 	

Modified: branches/render25/source/blender/editors/transform/transform.c
===================================================================
--- branches/render25/source/blender/editors/transform/transform.c	2010-05-06 19:54:43 UTC (rev 28628)
+++ branches/render25/source/blender/editors/transform/transform.c	2010-05-06 20:10:37 UTC (rev 28629)
@@ -202,17 +202,32 @@
 
 		UI_view2d_to_region_no_clip(t->view, v[0], v[1], adr, adr+1);
 	}
-	else if(ELEM3(t->spacetype, SPACE_IPO, SPACE_NLA, SPACE_ACTION)) {
+	else if(t->spacetype == SPACE_ACTION) {
+		SpaceAction *sact = t->sa->spacedata.first;
 		int out[2] = {0, 0};
 
-		UI_view2d_view_to_region((View2D *)t->view, vec[0], vec[1], out, out+1);
+		if (sact->flag & SACTION_DRAWTIME) {
+			//vec[0] = vec[0]/((t->scene->r.frs_sec / t->scene->r.frs_sec_base));
+
+			UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], out, out+1);
+		} else {
+			UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], out, out+1);
+		}
+
 		adr[0]= out[0];
 		adr[1]= out[1];
 	}
+	else if(ELEM(t->spacetype, SPACE_IPO, SPACE_NLA)) {
+		int out[2] = {0, 0};
+
+		UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], out, out+1);
+		adr[0]= out[0];
+		adr[1]= out[1];
+	}
 	else if(t->spacetype==SPACE_SEQ) { /* XXX not tested yet, but should work */
 		int out[2] = {0, 0};
 
-		UI_view2d_view_to_region((View2D *)t->view, vec[0], vec[1], out, out+1);
+		UI_view2d_to_region_no_clip((View2D *)t->view, vec[0], vec[1], out, out+1);
 		adr[0]= out[0];
 		adr[1]= out[1];
 	}
@@ -5285,12 +5300,12 @@
 /* This function is used by Animation Editor specific transform functions to do
  * the Snap Keyframe to Nearest Frame/Marker
  */
-static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, AnimData *adt, short autosnap)
+static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, TransData2D *td2d, AnimData *adt, short autosnap)
 {
 	/* snap key to nearest frame? */
 	if (autosnap == SACTSNAP_FRAME) {
 		const Scene *scene= t->scene;
-		const short doTime= getAnimEdit_DrawTime(t);
+		const short doTime= 0; //XXX doesn't work - getAnimEdit_DrawTime(t);
 		const double secf= FPS;
 		double val;
 
@@ -5332,6 +5347,14 @@
 		else
 			*(td->val)= val;
 	}
+
+	if ((td->flag & TD_MOVEHANDLE1) && td2d->h1) {
+		td2d->h1[0] = td2d->ih1[0] + *td->val - td->ival;
+	}
+
+	if ((td->flag & TD_MOVEHANDLE2) && td2d->h2) {
+		td2d->h2[0] = td2d->ih2[0] + *td->val - td->ival;
+	}
 }
 
 /* ----------------- Translation ----------------------- */
@@ -5394,6 +5417,7 @@
 static void applyTimeTranslate(TransInfo *t, float sval)
 {
 	TransData *td = t->data;
+	TransData2D *td2d = t->data2d;
 	Scene *scene = t->scene;
 	int i;
 
@@ -5402,16 +5426,18 @@
 
 	const short autosnap= getAnimEdit_SnapMode(t);
 
-	float deltax, val;
+	float deltax, val, valprev;
 
 	/* it doesn't matter whether we apply to t->data or t->data2d, but t->data2d is more convenient */
-	for (i = 0 ; i < t->total; i++, td++) {
+	for (i = 0 ; i < t->total; i++, td++, td2d++) {
 		/* it is assumed that td->extra is a pointer to the AnimData,
 		 * whose active action is where this keyframe comes from
 		 * (this is only valid when not in NLA)
 		 */
 		AnimData *adt= (t->spacetype != SPACE_NLA) ? td->extra : NULL;
 
+		valprev = *td->val;
+
 		/* check if any need to apply nla-mapping */
 		if (adt && t->spacetype != SPACE_SEQ) {
 			deltax = t->values[0];
@@ -5441,7 +5467,7 @@
 		}
 
 		/* apply nearest snapping */
-		doAnimEdit_SnapFrame(t, td, adt, autosnap);
+		doAnimEdit_SnapFrame(t, td, td2d, adt, autosnap);
 	}
 }
 
@@ -5652,6 +5678,7 @@
 static void applyTimeScale(TransInfo *t) {
 	Scene *scene = t->scene;
 	TransData *td = t->data;
+	TransData2D *td2d = t->data2d;
 	int i;
 
 	const short autosnap= getAnimEdit_SnapMode(t);
@@ -5659,7 +5686,7 @@
 	const double secf= FPS;
 
 
-	for (i = 0 ; i < t->total; i++, td++) {
+	for (i = 0 ; i < t->total; i++, td++, td2d++) {
 		/* it is assumed that td->extra is a pointer to the AnimData,
 		 * whose active action is where this keyframe comes from
 		 * (this is only valid when not in NLA)
@@ -5685,7 +5712,7 @@
 		*(td->val) += startx;
 
 		/* apply nearest snapping */
-		doAnimEdit_SnapFrame(t, td, adt, autosnap);
+		doAnimEdit_SnapFrame(t, td, td2d, adt, autosnap);
 	}
 }
 

Modified: branches/render25/source/blender/editors/transform/transform.h
===================================================================
--- branches/render25/source/blender/editors/transform/transform.h	2010-05-06 19:54:43 UTC (rev 28628)
+++ branches/render25/source/blender/editors/transform/transform.h	2010-05-06 20:10:37 UTC (rev 28629)
@@ -151,6 +151,9 @@
 typedef struct TransData2D {
 	float loc[3];		/* Location of data used to transform (x,y,0) */
 	float *loc2d;		/* Pointer to real 2d location of data */
+
+	float *h1, *h2;     /* Pointer to handle locations, if handles aren't being moved independantly*/
+	float ih1[2], ih2[2];
 } TransData2D;
 
 /* we need to store 2 handles for each transdata incase the other handle wasnt selected */
@@ -427,6 +430,8 @@
 #define TD_NOTIMESNAP		(1 << 14)	/* for Graph Editor autosnap, indicates that point should not undergo autosnapping */
 #define TD_INTVALUES	 	(1 << 15) 	/* for Graph Editor - curves that can only have int-values need their keyframes tagged with this */
 #define TD_MIRROR_EDGE	 	(1 << 16) 	/* For editmode mirror, clamp to x = 0 */
+#define TD_MOVEHANDLE1		(1 << 17)	/* For fcurve handles, move them along with their keyframes */
+#define TD_MOVEHANDLE2		(1 << 18)
 
 /* transsnap->status */
 #define SNAP_FORCED		1

Modified: branches/render25/source/blender/editors/transform/transform_conversions.c
===================================================================
--- branches/render25/source/blender/editors/transform/transform_conversions.c	2010-05-06 19:54:43 UTC (rev 28628)
+++ branches/render25/source/blender/editors/transform/transform_conversions.c	2010-05-06 20:10:37 UTC (rev 28629)
@@ -2972,9 +2972,8 @@
 			bezt->f1 |= SELECT;
 			bezt->f3 |= SELECT;
 
-			/* increment by 3, as there are 3 points (3 * x-coordinates) that need transform */
 			if (FrameOnMouseSide(side, bezt->vec[1][0], cfra))
-				count += 3;
+				count += 1;
 		}
 	}
 
@@ -3023,9 +3022,10 @@
  * The 'side' argument is needed for the extend mode. 'B' = both sides, 'R'/'L' mean only data
  * on the named side are used.
  */
-static TransData *FCurveToTransData(TransData *td, FCurve *fcu, AnimData *adt, char side, float cfra)
+static TransData *ActionFCurveToTransData(TransData *td, TransData2D **td2dv, FCurve *fcu, AnimData *adt, char side, float cfra)
 {
 	BezTriple *bezt;
+	TransData2D *td2d = *td2dv;
 	int i;
 
 	if (fcu == NULL)
@@ -3036,19 +3036,24 @@
 		if (BEZSELECTED(bezt)) {
 			/* only add if on the right 'side' of the current frame */
 			if (FrameOnMouseSide(side, bezt->vec[1][0], cfra)) {
-				/* each control point needs to be added separetely */
-				TimeToTransData(td, bezt->vec[0], adt);
-				td++;
-
 				TimeToTransData(td, bezt->vec[1], adt);
-				td++;
 
-				TimeToTransData(td, bezt->vec[2], adt);
+				/*set flags to move handles as necassary*/
+				td->flag |= TD_MOVEHANDLE1|TD_MOVEHANDLE2;
+				td2d->h1 = bezt->vec[0];
+				td2d->h2 = bezt->vec[2];
+
+				VECCOPY2D(td2d->ih1, td2d->h1);
+				VECCOPY2D(td2d->ih2, td2d->h2);
+
 				td++;
+				td2d++;
 			}
 		}
 	}
 
+	*td2dv = td2d;
+
 	return td;
 }
 
@@ -3116,6 +3121,7 @@
 {
 	Scene *scene= t->scene;
 	TransData *td = NULL;
+	TransData2D *td2d = NULL;
 	tGPFtransdata *tfd = NULL;
 	
 	bAnimContext ac;
@@ -3179,7 +3185,9 @@
 	t->total= count;
 	
 	t->data= MEM_callocN(t->total*sizeof(TransData), "TransData(Action Editor)");
+	t->data2d= MEM_callocN(t->total*sizeof(TransData2D), "transdata2d");
 	td= t->data;
+	td2d = t->data2d;
 	
 	if (ac.datatype == ANIMCONT_GPENCIL) {
 		if (t->mode == TFM_TIME_SLIDE) {
@@ -3216,7 +3224,7 @@
 			else
 				cfra = (float)CFRA;
 			
-			td= FCurveToTransData(td, fcu, adt, t->frame_side, cfra);
+			td= ActionFCurveToTransData(td, &td2d, fcu, adt, t->frame_side, cfra);
 		//}
 	}
 	
@@ -3248,8 +3256,11 @@
 /* Helper function for createTransGraphEditData, which is reponsible for associating
  * source data with transform data
  */
-static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, float *loc, float *cent, short selected, short ishandle, short intvals)
+static void bezt_to_transdata (TransData *td, TransData2D *td2d, AnimData *adt, BezTriple *bezt, int bi, short selected, short ishandle, short intvals)
 {
+	float *loc = bezt->vec[bi];
+	float *cent = bezt->vec[1];
+
 	/* New location from td gets dumped onto the old-location of td2d, which then
 	 * gets copied to the actual data at td2d->loc2d (bezt->vec[n])
 	 *
@@ -3280,7 +3291,17 @@
 		VECCOPY(td->center, cent);
 		VECCOPY(td->iloc, td->loc);
 	}
-	
+
+	if (td->flag & TD_MOVEHANDLE1) {
+		td2d->h1 = bezt->vec[0];
+		VECCOPY2D(td2d->ih1, td2d->h1);
+	} else td2d->h1 = NULL;
+
+	if (td->flag & TD_MOVEHANDLE2) {
+		td2d->h2 = bezt->vec[2];
+		VECCOPY2D(td2d->ih2, td2d->h2);
+	} else td2d->h2 = NULL;
+
 	memset(td->axismtx, 0, sizeof(td->axismtx));
 	td->axismtx[2][2] = 1.0f;
 	
@@ -3300,7 +3321,7 @@
 		td->flag |= TD_NOTIMESNAP;
 	if (intvals)
 		td->flag |= TD_INTVALUES;
-	
+
 	unit_m3(td->mtx);
 	unit_m3(td->smtx);
 }
@@ -3362,11 +3383,11 @@
 		/* F-Curve may not have any keyframes */
 		if (fcu->bezt == NULL)
 			continue;
-		
+
 		/* only include BezTriples whose 'keyframe' occurs on the same side of the current frame as mouse */
 		for (i=0, bezt=fcu->bezt; i < fcu->totvert; i++, bezt++) {
 			if (FrameOnMouseSide(t->frame_side, bezt->vec[1][0], cfra)) {
-				if (sipo->around == V3D_LOCAL) {

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list