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