| // This file is part of Eigen, a lightweight C++ template library | 
 | // for linear algebra. | 
 | // | 
 | // Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr> | 
 | // | 
 | // This Source Code Form is subject to the terms of the Mozilla | 
 | // Public License v. 2.0. If a copy of the MPL was not distributed | 
 | // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. | 
 |  | 
 | #ifndef EIGEN_QUATERNION_DEMO_H | 
 | #define EIGEN_QUATERNION_DEMO_H | 
 |  | 
 | #include "gpuhelper.h" | 
 | #include "camera.h" | 
 | #include "trackball.h" | 
 | #include <map> | 
 | #include <QTimer> | 
 | #include <QtGui/QApplication> | 
 | #include <QtOpenGL/QGLWidget> | 
 | #include <QtGui/QMainWindow> | 
 |  | 
 | class RenderingWidget : public QGLWidget | 
 | { | 
 |   Q_OBJECT | 
 |  | 
 |     typedef std::map<float,Frame> TimeLine; | 
 |     TimeLine m_timeline; | 
 |     Frame lerpFrame(float t); | 
 |  | 
 |     Frame mInitFrame; | 
 |     bool mAnimate; | 
 |     float m_alpha; | 
 |  | 
 |     enum TrackMode { | 
 |       TM_NO_TRACK=0, TM_ROTATE_AROUND, TM_ZOOM, | 
 |       TM_LOCAL_ROTATE, TM_FLY_Z, TM_FLY_PAN | 
 |     }; | 
 |  | 
 |     enum NavMode { | 
 |       NavTurnAround, | 
 |       NavFly | 
 |     }; | 
 |  | 
 |     enum LerpMode { | 
 |       LerpQuaternion, | 
 |       LerpEulerAngles | 
 |     }; | 
 |  | 
 |     enum RotationMode { | 
 |       RotationStable, | 
 |       RotationStandard | 
 |     }; | 
 |  | 
 |     Camera mCamera; | 
 |     TrackMode mCurrentTrackingMode; | 
 |     NavMode mNavMode; | 
 |     LerpMode mLerpMode; | 
 |     RotationMode mRotationMode; | 
 |     Vector2i mMouseCoords; | 
 |     Trackball mTrackball; | 
 |  | 
 |     QTimer m_timer; | 
 |  | 
 |     void setupCamera(); | 
 |  | 
 |     std::vector<Vector3f> mVertices; | 
 |     std::vector<Vector3f> mNormals; | 
 |     std::vector<int> mIndices; | 
 |  | 
 |   protected slots: | 
 |  | 
 |     virtual void animate(void); | 
 |     virtual void drawScene(void); | 
 |  | 
 |     virtual void grabFrame(void); | 
 |     virtual void stopAnimation(); | 
 |  | 
 |     virtual void setNavMode(int); | 
 |     virtual void setLerpMode(int); | 
 |     virtual void setRotationMode(int); | 
 |     virtual void resetCamera(); | 
 |  | 
 |   protected: | 
 |  | 
 |     virtual void initializeGL(); | 
 |     virtual void resizeGL(int width, int height); | 
 |     virtual void paintGL(); | 
 |      | 
 |     //-------------------------------------------------------------------------------- | 
 |     virtual void mousePressEvent(QMouseEvent * e); | 
 |     virtual void mouseReleaseEvent(QMouseEvent * e); | 
 |     virtual void mouseMoveEvent(QMouseEvent * e); | 
 |     virtual void keyPressEvent(QKeyEvent * e); | 
 |     //-------------------------------------------------------------------------------- | 
 |  | 
 |   public:  | 
 |     EIGEN_MAKE_ALIGNED_OPERATOR_NEW | 
 |      | 
 |     RenderingWidget(); | 
 |     ~RenderingWidget() { } | 
 |  | 
 |     QWidget* createNavigationControlWidget(); | 
 | }; | 
 |  | 
 | class QuaternionDemo : public QMainWindow | 
 | { | 
 |   Q_OBJECT | 
 |   public: | 
 |     QuaternionDemo(); | 
 |   protected: | 
 |     RenderingWidget* mRenderingWidget; | 
 | }; | 
 |  | 
 | #endif // EIGEN_QUATERNION_DEMO_H |