00001 00002 00003 00004 00005
00006 00007 00008 00009 00010
00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 00026 00027 00028 00029 00030 00031 00032 00033 00034 00035 00036 00037 00038 00039
00055 #ifndef __vtkQtRenderWindow_h
00056 #define __vtkQtRenderWindow_h
00057
00058 #include <qgl.h>
00059 #if defined(Q_GLX)
00060 #include <qintdict.h>
00061 #define INT8 dummy_INT8
00062 #define INT32 dummy_INT32
00063 #include <GL/glx.h>
00064 #undef INT8
00065 #undef INT32
00066 #define GC GC_QQQ
00067 #include <X11/Xlib.h>
00068 #include <X11/Xutil.h>
00069 #include <X11/Xos.h>
00070 #include <X11/Xatom.h>
00071 #include <X11/Xmu/StdCmap.h>
00072 #endif
00073
00074 #include <qapplication.h>
00075 #include "vtkRenderWindow.h"
00076 #include "vtkOpenGLRenderer.h"
00077
00078 class vtkQtRenderWindowInteractor;
00079
00080 class VTK_EXPORT vtkQtRenderWindow : public QGLWidget, public vtkRenderWindow
00081 {
00082 public:
00083 vtkQtRenderWindow(QWidget *parent = 0, const char* name = 0, const QGLWidget *shareWidget = 0, WFlags f = 0);
00084 vtkQtRenderWindow(const QGLFormat &format, QWidget *parent = 0, const char *name = 0, const QGLWidget *shareWidget = 0, WFlags f = 0);
00085 ~vtkQtRenderWindow();
00086 static vtkQtRenderWindow *New();
00087 static void initApp();
00088
00089 vtkTypeMacro(vtkQtRenderWindow,vtkRenderWindow);
00090 void PrintSelf(ostream& os, vtkIndent indent);
00091
00093 virtual void *GetGenericDisplayId() {return (void *)this->GetDisplayId();};
00094 virtual void *GetGenericWindowId() {return (void *)this->WindowId;};
00095 virtual void *GetGenericDrawable() {return (void *)this->WindowId;};
00096
00098 Display *GetDisplayId();
00099
00102 void SetDisplayId(Display *);
00103 void SetDisplayId(void *);
00104
00106 Window GetWindowId();
00107
00109 void SetWindowId(Window);
00110 void SetWindowId(void *);
00111
00113 void SetWindowInfo(char *info);
00114
00116 static void SetGlobalMaximumNumberOfMultiSamples(int val);
00117 static int GetGlobalMaximumNumberOfMultiSamples();
00118
00121 vtkSetMacro(MultiSamples,int);
00122 vtkGetMacro(MultiSamples,int);
00123
00125 unsigned char *GetPixelData(int x,int y,int x2,int y2,int front);
00126 void SetPixelData(int x,int y,int x2,int y2,unsigned char *,
00127 int front);
00128
00130 float *GetRGBAPixelData(int x,int y,int x2,int y2,int front);
00131 void SetRGBAPixelData(int x,int y,int x2,int y2,float *,int front,
00132 int blend=0);
00133
00135 float *GetZbufferData( int x1, int y1, int x2, int y2 );
00136 void SetZbufferData( int x1, int y1, int x2, int y2, float *buffer );
00137
00138 00140 void Render();
00141
00143 void MakeCurrent();
00144
00146 void SetSize(int w,int h);
00147 void SetSize(int a[2]);
00148 vtkGetVector2Macro(Size,int);
00149
00150 vtkRenderWindowInteractor* MakeRenderWindowInteractor();
00151 void SetInteractor(vtkQtRenderWindowInteractor*);
00152
00153
00154 QSizePolicy sizePolicy() const;
00155 QSize sizeHint() const;
00156 QSize minimumSizeHint() const;
00157
00158 void initializeGL();
00159 void paintGL();
00160 void resizeGL(int, int);
00161
00162 virtual void mousePressEvent(QMouseEvent*);
00163 virtual void mouseReleaseEvent(QMouseEvent*);
00164 virtual void mouseMoveEvent(QMouseEvent*);
00165 virtual void keyPressEvent(QKeyEvent*);
00166 virtual void keyReleaseEvent(QKeyEvent*);
00167
00168
00169
00170
00171
00172
00173 #if 1
00174 virtual void enterEvent( QEvent * ) { setFocus(); }
00175 virtual void leaveEvent( QEvent * ) { clearFocus(); }
00176 #else
00177 virtual void enterEvent( QEvent * ) {}
00178 virtual void leaveEvent( QEvent * ) {}
00179 #endif
00180
00181 protected:
00182 int MultiSamples;
00183 long OldMonitorSetting;
00184
00185 private:
00186 vtkQtRenderWindowInteractor* qtRenWinInt;
00187 static QApplication *qtapp;
00188 Window WindowId;
00189 Display *DisplayId;
00190 int OwnWindow;
00191 int OwnDisplay;
00192 };
00193
00194 inline void vtkQtRenderWindow::Render() { updateGL(); }
00195 inline void vtkQtRenderWindow::MakeCurrent() { QGLWidget::makeCurrent(); }
00196
00197 inline void vtkQtRenderWindow::SetSize(int w,int h) { resizeGL(w, h); QGLWidget::resize(w, h); }
00198 inline void vtkQtRenderWindow::SetSize(int a[2]) { this->SetSize(a[0], a[1]); }
00199
00200 inline QSizePolicy vtkQtRenderWindow::sizePolicy() const
00201 { return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); }
00202
00203 inline QSize vtkQtRenderWindow::sizeHint() const
00204 { return QSize( 500, 500 ); }
00205
00206 inline QSize vtkQtRenderWindow::minimumSizeHint() const
00207 { return QSize( 200, 200 ); }
00208
00209 #endif // __vtkQtRenderWindow_h
00210
00211
00212