00001 #ifndef QVOLRENDCANVAS_H_
00002 #define QVOLRENDCANVAS_H_
00003
00004 #include <Qt/qobject.h>
00005
00006 #include <QtGui/QWidget>
00007 #include <QtOpenGL/QGLWidget>
00008 #include <QtGui/QKeyEvent>
00009 #include <QtGui/QMouseEvent>
00010
00011 #include "VEvent.h"
00012 #include "VVolume.h"
00013 #include "VSliceRenderer.h"
00014 #include "VVolumeRenderer.h"
00015 #include "VTransferFunction.h"
00016 #include "VTransferFunction2D.h"
00017 #include "VImage.h"
00018
00022 class VFramebufferObject;
00023
00027 enum MouseState
00028 {
00029 NO_DRAGGING = 0,
00030 ROTATE,
00031 ZOOM,
00032 PAN,
00033 };
00034
00035
00039 class QVolRendCanvas : public QObject, public QGLWidget
00040 {
00041 Q_OBJECT
00042
00043 public:
00044
00049 QVolRendCanvas(QWidget* parent = 0);
00050
00054 virtual ~QVolRendCanvas();
00055
00060 void setObjectName(const QString &name);
00061
00067 virtual void resizeGL( int w, int h );
00068
00073 virtual void paintEvent( QPaintEvent *e );
00074
00079 virtual void mousePressEvent ( QMouseEvent * e );
00080
00085 virtual void mouseReleaseEvent ( QMouseEvent * e );
00086
00091 virtual void mouseMoveEvent ( QMouseEvent * e );
00092
00093
00098 virtual void mouseDoubleClickEvent ( QMouseEvent * e );
00099
00100
00105 virtual void keyPressEvent ( QKeyEvent * e );
00106
00107
00112 virtual void keyReleaseEvent ( QKeyEvent * e );
00113
00119 const VMouseEvent getMouseEvent (QMouseEvent *e);
00120
00126 const VKeyboardEvent getKeyboardEvent (QKeyEvent *e);
00127
00131 virtual void redraw();
00132
00136 virtual void activate_sliceview();
00137
00141 virtual void activate_volview();
00142
00143
00148 void setActiveSaggitalSlice(int s);
00149
00150
00155 void setActiveCorronalSlice(int s);
00156
00157
00162 void setActiveTransversalSlice(int s);
00163
00168 void setApplyTFInSV(int v);
00169
00174 void setApplyTFInVV(int v);
00175
00180 void setBackColorPtr(VVector *v);
00181
00186 void rendermode_changed(int i);
00187
00192 void lightmode_changed(int i);
00193
00198 bool getLoaded(){return data_loaded;};
00199
00204 void setTransferFunctionPtr(VTransferFunction * transfunc);
00205
00210 void setTransferFunction2DPtr(VTransferFunction2D * transfunc);
00211
00215 void flipX();
00216
00220 void flipY();
00221
00225 void flipZ();
00226
00231 void modifyLight(bool val);
00232
00237 void setContourMode(bool val);
00238
00243 void setShadowMode(bool val);
00244
00250 void setClipPlane(PlanePosition plane, float value)
00251 {
00252 m_VolumeRenderer.setClipPlane(plane, value);
00253 }
00254
00261 virtual bool load_data(QString filename, int *volsize);
00262
00267 bool save_data(std::string filename);
00268
00273 virtual void saveImage(std::string filename);
00274
00279 void setOrthoProjection(bool m_orth);
00280
00285 std::vector<int> * getDataHistogram();
00286
00291 unsigned char * getData2DHistogram();
00292
00293 VVolume m_Volume;
00294 VSliceRenderer m_SliceRenderer;
00295 VVolumeRenderer m_VolumeRenderer;
00296 VTransferFunction * m_TransferFunction;
00297 VTransferFunction2D * m_TransferFunction2D;
00299 float m_bgColor[4];
00301 VVector up;
00302 VVector view;
00303 VVector side;
00305 VVector lup;
00306 VVector lview;
00307 VVector lside;
00309 VVector m_lightDir;
00310 bool m_modifyLight;
00312 VImage testImage;
00314 protected:
00315
00319 virtual void initializeGL();
00320
00324 virtual void paintGL();
00325
00326
00327 private:
00328
00334 VVector getSphereProjection(float x, float y);
00335
00341 VVector getPlaneProjection(float x, float y);
00342
00343
00344 bool sliceview_active;
00345 bool data_loaded;
00346 int apply_tf_in_sv;
00347 int apply_tf_in_vv;
00348 VFramebufferObject * m_FramebufferObject;
00349 VVector *m_BackgroundColor;
00350 VVector m_MouseLastPos;
00352 MouseState m_MouseState;
00353 RenderMode m_RenderMode;
00354 LightMode m_LightMode;
00356 VVector m_CamDat;
00357 VVector m_LookAtPoint;
00359 VVector m_Position;
00360 VVector m_LookAt;
00361 float m_Distance;
00362 VVector m_vecPosition;
00363 VVector m_PanOffset;
00365 VVector m_Rotation;
00366 float m_fAngle;
00369 };
00370 #endif