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
1.5.6