]> Creatis software - bbtk.git/blob - packages/wxvtk/src/wxVTKRenderWindowInteractor.h
ccf9b6d8280d017c717c6647514d14eea54aa075
[bbtk.git] / packages / wxvtk / src / wxVTKRenderWindowInteractor.h
1 /*=========================================================================
2
3   Program:   Visualization Toolkit
4   Module:    $RCSfile: wxVTKRenderWindowInteractor.h,v $
5   Language:  C++
6   Date:      $Date: 2011/02/17 11:01:27 $
7   Version:   $Revision: 1.3 $
8
9   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 
10   All rights reserved.
11   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
12
13      This software is distributed WITHOUT ANY WARRANTY; without even 
14      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
15      PURPOSE.  See the above copyright notice for more information.
16
17 =========================================================================*/
18
19 // .NAME  wxVTKRenderWindowInteractor - class to enable VTK to render to 
20 // and interact with wxWindow.
21 // .SECTION Description
22 //  wxVTKRenderWindowInteractor provide a VTK widget for wxWindow. This class
23 // was completely rewrote to have the 'Look & Feel' of the python version:
24 // wxVTKRenderWindowInteractor.py
25 // .SECTION Caveats 
26 //  - There is a know bug that prevent this class to works for more info see 
27 // WX_USE_X_CAPTURE. This bug only affect wxGTK from 2.3.2 to wxGTK 2.4.0.
28 //  - Furthermore this class is tempated over either wxWindows or wxGLCanvas,
29 // in wxWindows 2.3.1 and earlier, the wxGLCanvas had scroll bars, you can avoid
30 // this effect by playing with WX_BASE_CLASS at your risk (you might end up with
31 // lot of flickering.)
32 //  - This class might not be easily readable as it tried to work with VTK 3.2
33 //  and 4.x. This class doesn't support reparenting with VTK 4.2 and earlier.
34 // .SECTION see also
35 // wxVTKRenderWindowInteractor.py wxVTKRenderWindow.py
36
37 #ifndef _wxVTKRenderWindowInteractor_h_
38 #define _wxVTKRenderWindowInteractor_h_
39
40 // For compilers that support precompilation, includes "wx/wx.h".
41 #include "wx/wxprec.h"
42
43 #ifdef __BORLANDC__
44 #  pragma hdrstop
45 #endif
46
47 #ifndef WX_PRECOMP
48 #include <wx/wx.h>
49 #endif
50
51 #include <wx/timer.h>
52 #include <wx/dcclient.h>
53
54 // vtk includes
55 #include "vtkRenderWindowInteractor.h"
56 #include "vtkRenderWindow.h"
57
58 // Apparently since wxGTK 2.8.0 one can finally use wxWindow (just as in any
59 // other port):
60 // MM: tested on 2008/04/08: experienced some heavy flickering with wx-widget 2.6.0
61 // using a wxWindow instead of wxGLCanvas fixed the symptoms
62 //#if (!wxCHECK_VERSION(2, 6, 0))
63 #if (!wxCHECK_VERSION(2, 8, 0))
64 #define USE_WXGLCANVAS
65 #endif
66
67 #if defined(__WXGTK__) && defined(USE_WXGLCANVAS)
68 #  if wxUSE_GLCANVAS
69 #    include <wx/glcanvas.h>
70 #  else
71 #    error "problem of wxGLCanvas, you need to build wxWidgets with opengl"
72 #  endif //wxUSE_GLCANVAS
73 #endif //__WXGTK__
74
75 // Motif version (renamed into wxX11 for wxWindow 2.4 and newer)
76 #if defined(__WXMOTIF__) 
77 # error This GUI is not supported by wxVTKRenderWindowInteractor for now
78 #endif
79
80 // wx forward declarations
81 class wxPaintEvent;
82 class wxMouseEvent;
83 class wxTimerEvent;
84 class wxKeyEvent;
85 class wxSizeEvent;
86
87 //=======================================================================
88 // LG : NAMESPACE IS NECESSARY TO AVOID CONFLICTING SYMBOLS IN DYN LIBS
89 namespace bbwxvtk
90 {
91
92
93 #if defined(__WXGTK__) && defined(USE_WXGLCANVAS)
94 class wxVTKRenderWindowInteractor : public wxGLCanvas, public vtkRenderWindowInteractor
95 #else
96 class wxVTKRenderWindowInteractor : public wxWindow, public vtkRenderWindowInteractor
97 #endif //__WXGTK__
98 {
99   DECLARE_DYNAMIC_CLASS(wxVTKRenderWindowInteractor)
100   
101   public:
102     //constructors
103     wxVTKRenderWindowInteractor();
104
105     wxVTKRenderWindowInteractor(wxWindow *parent,
106                                 wxWindowID id,
107                                 const wxPoint &pos = wxDefaultPosition,
108                                 const wxSize &size = wxDefaultSize,
109                                 long style = wxWANTS_CHARS | wxNO_FULL_REPAINT_ON_RESIZE,
110                                 const wxString &name = wxPanelNameStr);
111     vtkTypeRevisionMacro(wxVTKRenderWindowInteractor,vtkRenderWindowInteractor);
112     static wxVTKRenderWindowInteractor * New();
113     void PrintSelf(ostream& os, vtkIndent indent);
114
115           //destructor
116     ~wxVTKRenderWindowInteractor();
117
118     // vtkRenderWindowInteractor overrides
119     void Initialize();
120     void Enable();
121     bool Enable(bool enable);
122     void Disable();
123     void Start();
124     void UpdateSize(int x, int y);
125     int CreateTimer(int timertype);
126     int DestroyTimer();
127     void TerminateApp() {};
128
129     // event handlers
130     void OnPaint(wxPaintEvent &event);
131     void OnEraseBackground (wxEraseEvent& event);
132     void OnMotion(wxMouseEvent &event);
133
134     void OnButtonDown(wxMouseEvent &event);
135     void OnButtonUp(wxMouseEvent &event);
136 #if !(VTK_MAJOR_VERSION == 3 && VTK_MINOR_VERSION == 1)
137     void OnEnter(wxMouseEvent &event);
138     void OnLeave(wxMouseEvent &event);
139     void OnKeyDown(wxKeyEvent &event);
140     void OnKeyUp(wxKeyEvent &event);
141     void OnChar(wxKeyEvent &event);
142 #endif
143     void OnTimer(wxTimerEvent &event);
144     void OnSize(wxSizeEvent &event);
145     void OnMouseWheel(wxMouseEvent& event);
146
147     void Render();
148     void SetRenderWhenDisabled(int newValue);
149
150     // Description:
151     // Prescribe that the window be created in a stereo-capable mode. This
152     // method must be called before the window is realized. Default if off.
153     vtkGetMacro(Stereo,int);
154     vtkBooleanMacro(Stereo,int);
155     virtual void SetStereo(int capable);
156
157     // Description:
158     // As CaptureMouse could be a problem sometimes on a window box
159     // This method allow to set or not the CaptureMouse.
160     // This method actually will works only if WX_USE_X_CAPTURE was set to 1
161     vtkSetMacro(UseCaptureMouse,int);
162     vtkBooleanMacro(UseCaptureMouse,int);
163
164   protected:
165     wxTimer timer;
166     int ActiveButton;
167     int RenderAllowed;
168     long GetHandleHack();
169     int Stereo;
170     
171   private:
172     long Handle;
173     bool Created;
174     int RenderWhenDisabled;
175     int UseCaptureMouse;
176
177     DECLARE_EVENT_TABLE()
178 };
179
180
181 // LG : EO namespace bbwxvtk
182 //======================================================================
183
184 #endif //_wxVTKRenderWindowInteractor_h_