Visualization.h

Go to the documentation of this file.
00001 /**<!-------------------------------------------------------------------->
00002    @file   Visualization.h
00003    @author Travis Fischer (fisch0920@gmail.com)
00004    @date   Fall 2008
00005    
00006    @brief
00007       Extracts out non-essential functionality (visualizations, user 
00008    interaction) from Canvases
00009    <!-------------------------------------------------------------------->**/
00010 
00011 #ifndef VISUALIZATION_H_
00012 #define VISUALIZATION_H_
00013 
00014 #include <shapes/Triangle.h>
00015 #include <core/Ray.h>
00016 
00017 #include <QtGui>
00018 #include <Qt/QtOpenGL>
00019 #include <GL/glut.h>
00020 
00021 class OpenGLCanvas;
00022 class ImageCanvas;
00023 class QInputEvent;
00024 class Canvas;
00025 
00026 struct InteractionInfo {
00027    QInputEvent *event;
00028    
00029    // InteractionListeners should set this to false if they don't 
00030    // want other InteractionListeners to also be notified of the event
00031    bool propogateEvent;
00032    
00033    // InteractionListeners can use this to communicate with each other
00034    int  data;
00035    
00036    InteractionInfo(QInputEvent *e = NULL) 
00037       : event(e), propogateEvent(true), data(0)
00038    { }
00039 };
00040 
00041 /**
00042  * @brief
00043  *    Extracts out non-essential functionality (visualizations, user 
00044  * interaction, etc.) from Canvases
00045  */
00046 class InteractionListener {
00047    public:
00048       /**
00049        * Registers this listener with the parent Canvas
00050        */
00051       InteractionListener(Canvas *parent);
00052       
00053       virtual ~InteractionListener();
00054       
00055       inline Canvas *getParent() const {
00056          return m_parent;
00057       }
00058       
00059       /// initializes this InteractionListener after parent has been initialized
00060       /// @note: default implementation is empty
00061       virtual void init()
00062       { }
00063       
00064       // Callbacks upon user interaction (empty by default)
00065       virtual void mousePressEvent  (InteractionInfo &info);
00066       virtual void mouseReleaseEvent(InteractionInfo &info);
00067       virtual void mouseMoveEvent   (InteractionInfo &info);
00068       
00069       virtual void keyPressEvent    (InteractionInfo &info);
00070       virtual void keyReleaseEvent  (InteractionInfo &info);
00071       
00072       /// Called for OpenGL drawing during paintEvent in parent Canvas
00073       /// (empty by default)
00074       virtual void paintGL();
00075       
00076       /// Called during paintEvent in parent Canvas (empty by default)
00077       virtual void paint(QPainter *e);
00078       
00079    protected:
00080       Canvas *m_parent;
00081 };
00082 
00083 /**
00084  * @brief
00085  *    Provides basic Maya-inspired camera UI modifiers for trackball rotation, 
00086  * dollying (translation along look vector), and panning (translation along 
00087  * uv film plane)
00088  */
00089 class CameraUIListener : public InteractionListener {
00090    public:
00091       CameraUIListener(OpenGLCanvas *parent);
00092       
00093       virtual ~CameraUIListener();
00094       
00095       // Callbacks upon user interaction
00096       virtual void mousePressEvent  (InteractionInfo &info);
00097       virtual void mouseReleaseEvent(InteractionInfo &info);
00098       virtual void mouseMoveEvent   (InteractionInfo &info);
00099       
00100       virtual void keyPressEvent    (InteractionInfo &info);
00101       virtual void keyReleaseEvent  (InteractionInfo &info);
00102       
00103       virtual void paintGL();
00104       
00105    protected:
00106       Point2  m_lastMousePos;
00107       Point2  m_mouseDownPos;
00108       
00109       Point3  m_origEye;
00110       Vector3 m_origUp;
00111       Vector3 m_origLook;
00112       Vector3 m_origU;
00113       
00114       bool    m_visualizeAccel;
00115 };
00116 
00117 /**
00118  * @brief
00119  *    Debugging info when a pixel is clicked on an ImageCanvas
00120  */
00121 class IntersectDebugTester : public InteractionListener {
00122    public:
00123       IntersectDebugTester(Canvas *parent);
00124       
00125       virtual ~IntersectDebugTester();
00126       
00127       // Callbacks upon user interaction
00128       virtual void mousePressEvent  (InteractionInfo &info);
00129       virtual void keyPressEvent    (InteractionInfo &info);
00130       
00131    protected:
00132       unsigned m_index;
00133 };
00134 
00135 #endif // VISUALIZATION_H_
00136 

Generated on 28 Feb 2009 for Milton by doxygen 1.5.6