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 "nvmath/Vec2f.h" 00018 #include "nvmath/Vec3f.h" 00019 00020 namespace nvutil 00021 { 00022 00024 00029 class Trackball 00030 { 00031 public: 00033 Trackball(void); 00034 00036 virtual ~Trackball(void); 00037 00039 00048 void apply( const nvmath::Vec2f &p0 00049 , const nvmath::Vec2f &p1 00050 , nvmath::Vec3f & axis 00051 , float & rad 00052 ); 00053 00055 00060 void setSize( float size 00061 ); 00062 00064 00066 float getSize( void ); 00067 00068 protected: 00070 00073 float projectOntoTBSphere( const nvmath::Vec2f & p ); 00074 00075 float m_tbsize; 00076 }; 00077 00078 inline void Trackball::setSize( float size ) 00079 { 00080 __ASSERT( m_tbsize > 0.f ); 00081 m_tbsize = size; 00082 } 00083 00084 inline float Trackball::getSize( void ) 00085 { 00086 return( m_tbsize ); 00087 } 00088 00089 } // namespace nvui