diff options
author | Ton Roosendaal <ton@blender.org> | 2004-11-11 16:17:32 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2004-11-11 16:17:32 +0300 |
commit | 2e4a10253b8f96b631eee8af5e1e711f372612ae (patch) | |
tree | f7ac4c363e22d2085397ca9410acdceb424c5476 /source/blender/src/drawaction.c | |
parent | 11fe49227b8b3dbcc6dbafbde16ee84c1a2e5af7 (diff) |
Fix for bug #1756
This was caused by a very primitive method of interpolating quaternions.
It was converting quats to mat and back to quat, and then just doing
a linear interpolation. That whilst quaternions are renowned for having
good interpolation possible.
I've experimented with 2 quaternion interpolation methods, and can only
get one to work correctly... the "official" version from Watt brothers
I can't get working, both are in arithb.c now.
Will arrange *close* review with experienced NLAers for it! But testing
here gives fully predictable results.
Also changed;
- added pointer check in drawaction
- changed puldown menu for correct hotkeys for move NLA strips up/down
Diffstat (limited to 'source/blender/src/drawaction.c')
-rw-r--r-- | source/blender/src/drawaction.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/source/blender/src/drawaction.c b/source/blender/src/drawaction.c index 402f7684215..278be07b65b 100644 --- a/source/blender/src/drawaction.c +++ b/source/blender/src/drawaction.c @@ -877,15 +877,16 @@ static BezTriple **action_to_keylist(bAction *act, int flags, int *totvert) /* Count required keys */ for (achan=act->chanbase.first; achan; achan=achan->next){ /* Count transformation keys */ - for (icu=achan->ipo->curve.first; icu; icu=icu->next) - count+=icu->totvert; - - /* Count constraint keys */ - for (conchan=achan->constraintChannels.first; conchan; conchan=conchan->next) - for (icu=conchan->ipo->curve.first; icu; icu=icu->next) + if(achan->ipo) { + for (icu=achan->ipo->curve.first; icu; icu=icu->next) count+=icu->totvert; - - + + /* Count constraint keys */ + for (conchan=achan->constraintChannels.first; conchan; conchan=conchan->next) + for (icu=conchan->ipo->curve.first; icu; icu=icu->next) + count+=icu->totvert; + + } } /* Build the list */ |