[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