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