| // 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 |