1*bf2c3715SXin Li // This file is part of Eigen, a lightweight C++ template library 2*bf2c3715SXin Li // for linear algebra. 3*bf2c3715SXin Li // 4*bf2c3715SXin Li // Copyright (C) 2008 Gael Guennebaud <[email protected]> 5*bf2c3715SXin Li // 6*bf2c3715SXin Li // This Source Code Form is subject to the terms of the Mozilla 7*bf2c3715SXin Li // Public License v. 2.0. If a copy of the MPL was not distributed 8*bf2c3715SXin Li // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 9*bf2c3715SXin Li 10*bf2c3715SXin Li #ifndef EIGEN_TRACKBALL_H 11*bf2c3715SXin Li #define EIGEN_TRACKBALL_H 12*bf2c3715SXin Li 13*bf2c3715SXin Li #include <Eigen/Geometry> 14*bf2c3715SXin Li 15*bf2c3715SXin Li class Camera; 16*bf2c3715SXin Li 17*bf2c3715SXin Li class Trackball 18*bf2c3715SXin Li { 19*bf2c3715SXin Li public: 20*bf2c3715SXin Li 21*bf2c3715SXin Li enum Mode {Around, Local}; 22*bf2c3715SXin Li Trackball()23*bf2c3715SXin Li Trackball() : mpCamera(0) {} 24*bf2c3715SXin Li 25*bf2c3715SXin Li void start(Mode m = Around) { mMode = m; mLastPointOk = false; } 26*bf2c3715SXin Li setCamera(Camera * pCam)27*bf2c3715SXin Li void setCamera(Camera* pCam) { mpCamera = pCam; } 28*bf2c3715SXin Li 29*bf2c3715SXin Li void track(const Eigen::Vector2i& newPoint2D); 30*bf2c3715SXin Li 31*bf2c3715SXin Li protected: 32*bf2c3715SXin Li 33*bf2c3715SXin Li bool mapToSphere( const Eigen::Vector2i& p2, Eigen::Vector3f& v3); 34*bf2c3715SXin Li 35*bf2c3715SXin Li Camera* mpCamera; 36*bf2c3715SXin Li Eigen::Vector3f mLastPoint3D; 37*bf2c3715SXin Li Mode mMode; 38*bf2c3715SXin Li bool mLastPointOk; 39*bf2c3715SXin Li 40*bf2c3715SXin Li }; 41*bf2c3715SXin Li 42*bf2c3715SXin Li #endif // EIGEN_TRACKBALL_H 43