diff options
author | Joshua Leung <aligorith@gmail.com> | 2007-10-02 14:59:02 +0400 |
---|---|---|
committer | Joshua Leung <aligorith@gmail.com> | 2007-10-02 14:59:02 +0400 |
commit | 301c767a9f7ba4f6b583fc0e9ed959ba8a5a772b (patch) | |
tree | dad55f8f7519f6a33d1730d2b8dc18d735669244 /source/blender/src/editipo.c | |
parent | d5fe701370cb431f97ad40eeaf387bb226619670 (diff) |
IPO Transform Bugfix:
When IPO-Keys were being shown, the y-values of the keyframes should not change during transform.
Diffstat (limited to 'source/blender/src/editipo.c')
-rw-r--r-- | source/blender/src/editipo.c | 28 |
1 files changed, 9 insertions, 19 deletions
diff --git a/source/blender/src/editipo.c b/source/blender/src/editipo.c index 025dfcc7886..b329bfcce76 100644 --- a/source/blender/src/editipo.c +++ b/source/blender/src/editipo.c @@ -4887,20 +4887,21 @@ void make_ipo_transdata (TransInfo *t) if (ISPOIN(ei, flag & IPO_VISIBLE, icu)) { if ( (ei->flag & IPO_EDIT) || G.sipo->showkey) { if (ei->icu->bezt) { + short onlytime= (ei->disptype==IPO_DISPBITS) ? 1 : (G.sipo->showkey) ? 1 : 0; bezt= ei->icu->bezt; for (b=0; b < ei->icu->totvert; b++, bezt++) { /* only include handles if selected, and interpolaton mode uses beztriples */ if (ei->icu->ipo==IPO_BEZ) { if (bezt->f1 & 1) - bezt_to_transdata(td++, td2d++, bezt->vec[0], bezt->vec[1], 1, (ei->disptype==IPO_DISPBITS)); + bezt_to_transdata(td++, td2d++, bezt->vec[0], bezt->vec[1], 1, onlytime); if (bezt->f3 & 1) - bezt_to_transdata(td++, td2d++, bezt->vec[2], bezt->vec[1], 1, (ei->disptype==IPO_DISPBITS)); + bezt_to_transdata(td++, td2d++, bezt->vec[2], bezt->vec[1], 1, onlytime); } /* only include main vert if selected */ if (bezt->f2 & 1) { - bezt_to_transdata(td++, td2d++, bezt->vec[1], bezt->vec[1], 1, (ei->disptype==IPO_DISPBITS)); + bezt_to_transdata(td++, td2d++, bezt->vec[1], bezt->vec[1], 1, onlytime); } } } @@ -4915,17 +4916,19 @@ void make_ipo_transdata (TransInfo *t) /* only include curves that are visible and selected */ if (ISPOIN3(ei, flag & IPO_VISIBLE, flag & IPO_SELECT, icu)) { if (ei->icu->bezt) { + short onlytime= (ei->disptype==IPO_DISPBITS) ? 1 : (G.sipo->showkey) ? 1 : 0; bezt= ei->icu->bezt; b= ei->icu->totvert; + for (b=0; b < ei->icu->totvert; b++, bezt++) { /* only include handles if interpolation mode is bezier not bpoint */ if (ei->icu->ipo==IPO_BEZ) { - bezt_to_transdata(td++, td2d++, bezt->vec[0], bezt->vec[1], 1, (ei->disptype==IPO_DISPBITS)); - bezt_to_transdata(td++, td2d++, bezt->vec[2], bezt->vec[1], 1, (ei->disptype==IPO_DISPBITS)); + bezt_to_transdata(td++, td2d++, bezt->vec[0], bezt->vec[1], 1, onlytime); + bezt_to_transdata(td++, td2d++, bezt->vec[2], bezt->vec[1], 1, onlytime); } /* always include the main handle */ - bezt_to_transdata(td++, td2d++, bezt->vec[1], bezt->vec[1], 1, (ei->disptype==IPO_DISPBITS)); + bezt_to_transdata(td++, td2d++, bezt->vec[1], bezt->vec[1], 1, onlytime); } } } @@ -4940,12 +4943,8 @@ typedef struct BeztMap { BezTriple *bezt; int oldIndex; int newIndex; - short handles; } BeztMap; -#define BEZM_FLIPH 1 -#define BEZM_CLEARH1 2 -#define BEZM_CLEARH2 4 /* This function converts an IpoCurve's BezTriple array to a BeztMap array * NOTE: this allocates memory that will need to get freed later @@ -4996,15 +4995,6 @@ static void sort_time_beztmaps (BeztMap *bezms, int totvert) } } - /* swap order of handles or snap handles to centre-point? */ - if (bezm->bezt->vec[0][0]>bezm->bezt->vec[1][0] && bezm->bezt->vec[2][0]<bezm->bezt->vec[1][0]) { - bezm->handles ^= BEZM_FLIPH; - } - else { - if (bezm->bezt->vec[0][0]>bezm->bezt->vec[1][0]) bezm->handles ^= BEZM_CLEARH1; - if (bezm->bezt->vec[2][0]<bezm->bezt->vec[1][0]) bezm->handles ^= BEZM_CLEARH2; - } - bezm++; } } |