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