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 00014 #include "nvsgcommon.h" 00015 00016 #include "nvui/CameraManipulator.h" 00017 #include "nvutil/Trackball.h" 00018 00021 namespace nvui 00022 { 00023 00025 00032 class TrackballCamManip : public CameraManipulator 00033 { 00034 public: 00036 NVSG_API TrackballCamManip(void); 00037 00039 NVSG_API virtual ~TrackballCamManip(void); 00040 00042 00043 NVSG_API virtual void apply(); 00044 00046 00049 NVSG_API virtual void setViewportSize( size_t x 00050 , size_t y 00051 ); 00052 00054 00059 bool isDolly( void ); 00060 00062 00067 bool isPan( void ); 00068 00070 00075 bool isRotate( void ); 00076 00077 protected: 00078 static NVSG_API const UINT DOLLY1; 00079 static NVSG_API const UINT DOLLY2; 00080 static NVSG_API const UINT PAN1; 00081 static NVSG_API const UINT PAN2; 00082 static NVSG_API const UINT ROTATE1; 00083 00084 nvutil::Trackball m_trackball; 00085 00087 00089 NVSG_API virtual void rotate(void); 00090 00092 00094 NVSG_API virtual void pan(void); 00095 00097 00099 NVSG_API virtual void dolly(void); 00100 00101 }; 00102 00103 inline bool TrackballCamManip::isRotate( void ) 00104 { 00105 return( ROTATE1 == (m_buttonState | m_keyState)); 00106 } 00107 00108 inline bool TrackballCamManip::isPan( void ) 00109 { 00110 return( PAN1 == (m_buttonState | m_keyState) || PAN2 == (m_buttonState | m_keyState) ); 00111 } 00112 00113 inline bool TrackballCamManip::isDolly( void ) 00114 { 00115 return( DOLLY1 == (m_buttonState | m_keyState) || DOLLY2 == (m_buttonState | m_keyState) ); 00116 } 00117 00118 } // namespace nvui