Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

InterpolatedAnimation.h

Go to the documentation of this file.
00001 // Copyright NVIDIA Corporation 2002-2004
00002 // TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
00003 // *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
00004 // OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
00005 // AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
00006 // BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
00007 // WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
00008 // BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
00009 // ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
00010 // BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES 
00011 
00012 #pragma once
00013 
00015 #include "nvsgcommon.h"
00016 
00017 #include  "nvsg/Animation.h"
00018 
00019 namespace nvsg
00020 {
00022 
00025   template<typename T> class InterpolatedAnimation : public Animation<T>
00026   {
00027     public:
00028       //--  Functions reimplemented from Animation  --
00029       virtual size_t getNumberOfFrames( void ) const;
00030 
00031       //--  Functions specific to InterpolatedAnimation --
00033 
00034       size_t getNumberOfKeys( void ) const;
00035 
00037 
00038       void setNumberOfKeys( size_t count    
00039                           );
00040 
00042 
00043       void setKeyFrame( size_t key            
00044                       , unsigned int frame    
00045                       , const T & value       
00046                       );
00047 
00049 
00050       unsigned int getCurrentFrame( void ) const;
00051 
00053 
00054       const T & getCurrentValue( void ) const;
00055 
00057 
00058       unsigned int getFrame( size_t key ) const;
00059 
00061 
00062       const T & getValue( size_t key ) const;
00063 
00065 
00066       size_t getKey( unsigned int frame ) const;
00067 
00068     protected:
00070       InterpolatedAnimation( void );
00071 
00073       InterpolatedAnimation( const InterpolatedAnimation &rhs   
00074                            );
00075 
00077       virtual ~InterpolatedAnimation( void );
00078 
00080       void  setCurrent( size_t key ) const;
00081 
00083       void  setCurrent( unsigned int frame, const T &value ) const;
00084 
00085     private:
00086       std::vector<unsigned int>  m_keys;
00087       std::vector<T>             m_values;
00088       mutable unsigned int  m_currentFrame;
00089       mutable T             m_currentValue;
00090   };
00091 
00092   template<typename T> 
00093   inline InterpolatedAnimation<T>::InterpolatedAnimation( void )
00094   : m_currentFrame(-1)
00095   {
00096     __TRACE();
00097   }
00098 
00099   template<typename T> 
00100   inline InterpolatedAnimation<T>::InterpolatedAnimation( const InterpolatedAnimation &rhs )
00101     : m_keys( rhs.m_keys )
00102     , m_values( rhs.m_values )
00103     , m_currentFrame( rhs.m_currentFrame )
00104     , m_currentValue( rhs.m_currentValue )
00105   {
00106     __TRACE();
00107   }
00108 
00109   template<typename T> 
00110   inline InterpolatedAnimation<T>::~InterpolatedAnimation(void)
00111   {
00112     __TRACE();
00113   }
00114 
00115   template<typename T> 
00116   inline size_t InterpolatedAnimation<T>::getNumberOfFrames( void ) const
00117   {
00118     __TRACE();
00119     __ASSERT( m_keys.size() );                    //  the last key holds the index of the last frame,
00120     return( 1 + m_keys[m_keys.size()-1] );      //  but the number of frames is one greater
00121   }
00122 
00123   template<typename T> 
00124   inline size_t InterpolatedAnimation<T>::getNumberOfKeys( void ) const
00125   {
00126     __TRACE();
00127     return( m_keys.size() );
00128   }
00129 
00130   template<typename T> 
00131   inline void InterpolatedAnimation<T>::setNumberOfKeys( size_t count )
00132   {
00133     __TRACE();
00134     m_keys.resize( count );
00135     m_values.resize( count );
00136   }
00137 
00138   template<typename T> 
00139   inline void InterpolatedAnimation<T>::setKeyFrame( size_t key, unsigned int frame, const T &value )
00140   {
00141     __TRACE();
00142     __ASSERT( key < m_keys.size() );
00143     m_keys[key]   = frame;
00144     m_values[key] = value;
00145   }
00146 
00147   template<typename T> 
00148   inline unsigned int InterpolatedAnimation<T>::getCurrentFrame( void ) const
00149   {
00150     __TRACE();
00151     return( m_currentFrame );
00152   }
00153 
00154   template<typename T> 
00155   inline const T & InterpolatedAnimation<T>::getCurrentValue( void ) const
00156   {
00157     __TRACE();
00158     return( m_currentValue );
00159   }
00160 
00161   template<typename T> 
00162   inline unsigned int InterpolatedAnimation<T>::getFrame( size_t key ) const
00163   {
00164     __TRACE();
00165     return( m_keys[key] );
00166   }
00167 
00168   template<typename T> 
00169   inline const T & InterpolatedAnimation<T>::getValue( size_t key ) const
00170   {
00171     __TRACE();
00172     return( m_values[key] );
00173   }
00174 
00175   template<typename T> 
00176   inline size_t InterpolatedAnimation<T>::getKey( unsigned int frame ) const
00177   {
00178     __TRACE();
00179     std::vector<unsigned int>::const_iterator it = std::lower_bound( m_keys.begin(), m_keys.end(), frame );
00180     __ASSERT( it != m_keys.end() );
00181     return( it - m_keys.begin() );
00182   }
00183 
00184   template<typename T> 
00185   inline void InterpolatedAnimation<T>::setCurrent( size_t key ) const
00186   {
00187     __TRACE();
00188     m_currentFrame = m_keys[key];
00189     m_currentValue = m_values[key];
00190   }
00191 
00192   template<typename T> 
00193   inline void InterpolatedAnimation<T>::setCurrent( unsigned int frame, const T &value ) const
00194   {
00195     __TRACE();
00196     m_currentFrame = frame;
00197     m_currentValue = value;
00198   }
00199 }

Generated on Tue Mar 1 13:19:20 2005 for NVSGSDK by NVIDIA