Graph Editor Bugfix: 'HomeKey' (View All) wasn't correctly calculating y-extents
It was only using the y-extents of the last F-Curve it encountered
This commit is contained in:
@@ -210,8 +210,10 @@ void calc_fcurve_bounds (FCurve *fcu, float *xmin, float *xmax, float *ymin, flo
|
||||
BezTriple *bezt;
|
||||
|
||||
for (bezt=fcu->bezt, i=0; i < fcu->totvert; bezt++, i++) {
|
||||
yminv= MIN2(yminv, bezt->vec[1][1]);
|
||||
ymaxv= MAX2(ymaxv, bezt->vec[1][1]);
|
||||
if (bezt->vec[1][1] < yminv)
|
||||
yminv= bezt->vec[1][1];
|
||||
if (bezt->vec[1][1] > ymaxv)
|
||||
ymaxv= bezt->vec[1][1];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -227,8 +229,10 @@ void calc_fcurve_bounds (FCurve *fcu, float *xmin, float *xmax, float *ymin, flo
|
||||
FPoint *fpt;
|
||||
|
||||
for (fpt=fcu->fpt, i=0; i < fcu->totvert; fpt++, i++) {
|
||||
yminv= MIN2(yminv, fpt->vec[1]);
|
||||
ymaxv= MAX2(ymaxv, fpt->vec[1]);
|
||||
if (fpt->vec[1] < yminv)
|
||||
yminv= fpt->vec[1];
|
||||
if (fpt->vec[1] > ymaxv)
|
||||
ymaxv= fpt->vec[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -116,19 +116,21 @@ static void get_graph_keyframe_extents (bAnimContext *ac, float *xmin, float *xm
|
||||
for (ale= anim_data.first; ale; ale= ale->next) {
|
||||
Object *nob= NULL; //ANIM_nla_mapping_get(ac, ale);
|
||||
FCurve *fcu= (FCurve *)ale->key_data;
|
||||
float tmin, tmax;
|
||||
float txmin, txmax, tymin, tymax;
|
||||
|
||||
/* get range and apply necessary scaling before */
|
||||
calc_fcurve_bounds(fcu, &tmin, &tmax, ymin, ymax);
|
||||
calc_fcurve_bounds(fcu, &txmin, &txmax, &tymin, &tymax);
|
||||
|
||||
if (nob) {
|
||||
tmin= get_action_frame_inv(nob, tmin);
|
||||
tmax= get_action_frame_inv(nob, tmax);
|
||||
txmin= get_action_frame_inv(nob, txmin);
|
||||
txmax= get_action_frame_inv(nob, txmax);
|
||||
}
|
||||
|
||||
/* try to set cur using these values, if they're more extreme than previously set values */
|
||||
if (xmin) *xmin= MIN2(*xmin, tmin);
|
||||
if (xmax) *xmax= MAX2(*xmax, tmax);
|
||||
if ((xmin) && (txmin < *xmin)) *xmin= txmin;
|
||||
if ((xmax) && (txmax > *xmax)) *xmax= txmax;
|
||||
if ((ymin) && (tymin < *ymin)) *ymin= tymin;
|
||||
if ((ymax) && (tymax > *ymax)) *ymax= tymax;
|
||||
}
|
||||
|
||||
/* free memory */
|
||||
|
||||
Reference in New Issue
Block a user