#ifndef _QGLVIEWERWIDGET_H_ #define _QGLVIEWERWIDGET_H_ #include #include #include #include #pragma warning(disable: 4003) #include "gmtl/gmtl.h" class QGLViewerWidget : public QGLWidget { Q_OBJECT public: QGLViewerWidget(QWidget* pParent=0, const QGLWidget* pShareWidget=0, Qt::WindowFlags f=0); void setClearColor(const QColor& color) { m_clearColor = color; } QColor clearColor() const { return m_clearColor; } void setView(const gmtl::Vec3f& center, const gmtl::Quatf& rot, float distance); void setPerspective(bool bPerspective) { m_bPerspective = bPerspective; } bool isPerspective() const { return m_bPerspective; } void setFovy(float fovy) { m_fovy = fovy; } float fovy() const { return m_fovy; } void setZNear(float znear) { m_znear = znear; } float znear() const { return m_znear; } void setZFar(float zfar) { m_zfar = zfar; } float zfar() const { return m_zfar; } void setGridVisible(bool bVisible) { if (bVisible != m_bGridVisible) { m_bGridVisible = bVisible; emit gridVisibilityChanged(bVisible); } } bool isGridVisible() const { return m_bGridVisible; } void setAxisVisible(bool bVisible) { if (bVisible != m_bAxisVisible) { m_bAxisVisible = bVisible; emit axisVisibilityChanged(bVisible); } } bool isAxisVisible() const { return m_bAxisVisible; } void setSceneSize(float sceneSize) { m_sceneSize = sceneSize; } float sceneSize() const { return m_sceneSize; } void setGridSize(float gridSize) { m_gridSize = gridSize; } float gridSize() const { return m_gridSize; } void setGridSubdivision(int subdiv) { m_gridSubdiv = subdiv; } float gridSubdivision() const { return m_gridSubdiv; } void centerView(); void viewAll(); void stop(); void setInertia(bool bInertia) { m_bInertia = bInertia; if (!m_bInertia) stop(); } bool isInertia() const { return m_bInertia; } bool isAnimating() const { return m_bAnimating; } void initFromDOMElement(const QDomElement& element); QDomElement domElement(const QString& name, QDomDocument& doc) const; protected: virtual void init(); virtual void draw(); virtual void idle(); virtual void initializeGL(); virtual void paintGL(); virtual void mousePressEvent(QMouseEvent* pEvent); virtual void mouseMoveEvent(QMouseEvent* pEvent); virtual void mouseReleaseEvent(QMouseEvent* pEvent); virtual void wheelEvent(QWheelEvent* pEvent); virtual void keyReleaseEvent(QKeyEvent* pEvent); void drawGrid(); void drawAxis(); protected slots: void timeout(); signals: void cameraChanged(const gmtl::Vec3f& center, const gmtl::Quatf& rot, float distance); void axisVisibilityChanged(bool bVisible); void gridVisibilityChanged(bool bVisible); protected: QColor m_clearColor; gmtl::Matrix44f m_matrix; gmtl::Vec3f m_center; gmtl::Quatf m_rot; float m_distance; float m_orthoScale; gmtl::Vec3f m_pivotCenter; gmtl::Quatf m_pivotRot; float m_pivotDistance; float m_pivotOrthoScale; bool m_bPerspective; float m_fovy; float m_znear; float m_zfar; QPoint m_lastMousePos; QTime m_lastTime; bool m_bInertia; float m_animX; float m_animY; bool m_bAnimating; bool m_bGridVisible; bool m_bAxisVisible; float m_sceneSize; float m_gridSize; int m_gridSubdiv; QTimer m_timer; }; #endif // _QGLVIEWERWIDGET_H_