Version: 9.15.0
SVTK_RenderWindowInteractor.h
Go to the documentation of this file.
1 // Copyright (C) 2007-2025 CEA, EDF, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 
23 // SALOME VTKViewer : build VTK viewer into Salome desktop
24 // File :
25 // Author :
26 
27 #ifndef SVTK_RenderWindowInteractor_h
28 #define SVTK_RenderWindowInteractor_h
29 
30 #include "SVTK.h"
31 #include "SVTK_Selection.h"
32 
33 #include <vtkSmartPointer.h>
34 #include <QWidget>
35 
36 // undefining min and max because CASCADE's defines them and
37 // it clashes with std::min(), std::max()
38 #undef min
39 #undef max
40 
41 #include <stack>
42 
44 class vtkInteractorStyle;
45 class vtkCallbackCommand;
46 class vtkRenderWindow;
47 class vtkRenderer;
48 class vtkObject;
49 
50 class SVTK_Selector;
51 class SVTK_Renderer;
52 
53 #ifdef WIN32
54 #pragma warning ( disable:4251 )
55 #endif
56 
65 {
66  Q_OBJECT
67 
68  public:
70  const char* theName);
71 
73 
75  virtual
76  void
77  Initialize(vtkGenericRenderWindowInteractor* theDevice);
78 
80  GetDevice();
81 
82  vtkRenderWindow*
83  getRenderWindow();
84 
86  virtual
87  void
88  InvokeEvent(unsigned long theEvent, void* theCallData);
89 
91  virtual QPaintEngine* paintEngine() const;
92 
93  public slots:
95  virtual void show();
96 
98  virtual void polish();
99 
101  virtual void resize(int w, int h);
102 
103  protected:
104  virtual void paintEvent( QPaintEvent* );
105  virtual void resizeEvent( QResizeEvent* );
106 
107  virtual void mouseMoveEvent( QMouseEvent* );
108  virtual void mousePressEvent( QMouseEvent* );
109  virtual void mouseReleaseEvent( QMouseEvent* );
110  virtual void mouseDoubleClickEvent( QMouseEvent* );
111  virtual void wheelEvent( QWheelEvent* );
112  virtual void keyPressEvent( QKeyEvent* );
113  virtual void keyReleaseEvent( QKeyEvent* );
114  virtual void enterEvent( QEvent * );
115  virtual void leaveEvent( QEvent * );
116 
117  virtual void contextMenuEvent( QContextMenuEvent * e );
118 
119  // reimplemented from QWidget in order to set window - receiver
120  // of space mouse events.
121  virtual void focusInEvent( QFocusEvent* );
122  virtual void focusOutEvent( QFocusEvent* );
123 
125  virtual bool nativeEvent( const QByteArray&, void*, long* );
126  vtkSmartPointer<vtkRenderWindow> myRenderWindow;
127  vtkSmartPointer<vtkGenericRenderWindowInteractor> myDevice;
128 };
129 
130 
132 
141 {
142  Q_OBJECT
143 
144  public:
146  const char* theName);
147 
149 
151  virtual
152  void
153  Initialize(vtkGenericRenderWindowInteractor* theDevice,
154  SVTK_Renderer* theRenderer,
155  SVTK_Selector* theSelector);
156 
157  //----------------------------------------------------------------------------
159  SVTK_Renderer*
160  GetRenderer();
161 
163  vtkRenderer*
164  getRenderer();
165 
166  //----------------------------------------------------------------------------
169  GetInteractorStyle();
170 
172  void
173  PushInteractorStyle(vtkInteractorStyle* theStyle);
174 
176  void
177  PopInteractorStyle();
178 
179  //----------------------------------------------------------------------------
181  SVTK_Selector*
182  GetSelector();
183 
186  SelectionMode() const;
187 
189  void
190  SetSelectionMode(Selection_Mode theMode);
191 
192  public:
194  void
195  onEmitSelectionChanged();
196 
197  public:
198  signals:
199  void MouseMove( QMouseEvent* );
200  void MouseButtonPressed( QMouseEvent* );
201  void MouseButtonReleased( QMouseEvent* );
202  void MouseDoubleClicked( QMouseEvent* );
203  void ButtonPressed(const QMouseEvent *event);
204  void ButtonReleased(const QMouseEvent *event);
205  void WheelMoved( QWheelEvent* );
206  void KeyPressed( QKeyEvent* );
207  void KeyReleased( QKeyEvent* );
208  void contextMenuRequested( QContextMenuEvent *e );
209 
211 
212  protected:
213  virtual void mouseMoveEvent( QMouseEvent* );
214  virtual void mousePressEvent( QMouseEvent* );
215  virtual void mouseReleaseEvent( QMouseEvent* );
216  virtual void mouseDoubleClickEvent( QMouseEvent* );
217  virtual void wheelEvent( QWheelEvent* );
218  virtual void keyPressEvent( QKeyEvent* );
219  virtual void keyReleaseEvent( QKeyEvent* );
220 
221  void
222  SetRenderer(SVTK_Renderer *theRenderer);
223 
224  void
225  SetSelector(SVTK_Selector* theSelector);
226 
227  void
228  InitInteractorStyle(vtkInteractorStyle* theStyle);
229 
230  //----------------------------------------------------------------
231  // Main process VTK event method
232  static
233  void
234  ProcessEvents(vtkObject* theObject,
235  unsigned long theEvent,
236  void* theClientData,
237  void* theCallData);
238 
239  // Used to process VTK events
240  vtkSmartPointer<vtkCallbackCommand> myEventCallbackCommand;
241 
242  // Priority at which events are processed
243  float myPriority;
244 
245  //----------------------------------------------------------------
246  vtkSmartPointer<SVTK_Selector> mySelector;
247 
248  vtkSmartPointer<SVTK_Renderer> myRenderer;
249 
250  typedef vtkSmartPointer<vtkInteractorStyle> PInteractorStyle;
251  typedef std::stack<PInteractorStyle> TInteractorStyles;
253 };
254 
255 #ifdef WIN32
256 #pragma warning ( default:4251 )
257 #endif
258 
259 #endif
Selection_Mode
Definition: SALOME_Selection.h:27
#define SVTK_EXPORT
Definition: SVTK.h:37
Definition: SVTK_RenderWindowInteractor.h:65
vtkSmartPointer< vtkRenderWindow > myRenderWindow
Definition: SVTK_RenderWindowInteractor.h:126
vtkSmartPointer< vtkGenericRenderWindowInteractor > myDevice
Definition: SVTK_RenderWindowInteractor.h:127
Extends QVTK_RenderWindowInteractor functionality.
Definition: SVTK_RenderWindowInteractor.h:141
void KeyPressed(QKeyEvent *)
void contextMenuRequested(QContextMenuEvent *e)
vtkSmartPointer< SVTK_Renderer > myRenderer
Definition: SVTK_RenderWindowInteractor.h:248
void WheelMoved(QWheelEvent *)
void MouseMove(QMouseEvent *)
vtkSmartPointer< vtkCallbackCommand > myEventCallbackCommand
Definition: SVTK_RenderWindowInteractor.h:240
void ButtonReleased(const QMouseEvent *event)
void MouseButtonReleased(QMouseEvent *)
void MouseButtonPressed(QMouseEvent *)
vtkSmartPointer< vtkInteractorStyle > PInteractorStyle
Definition: SVTK_RenderWindowInteractor.h:250
std::stack< PInteractorStyle > TInteractorStyles
Definition: SVTK_RenderWindowInteractor.h:251
void KeyReleased(QKeyEvent *)
void MouseDoubleClicked(QMouseEvent *)
float myPriority
Definition: SVTK_RenderWindowInteractor.h:243
void ButtonPressed(const QMouseEvent *event)
TInteractorStyles myInteractorStyles
Definition: SVTK_RenderWindowInteractor.h:252
vtkSmartPointer< SVTK_Selector > mySelector
Definition: SVTK_RenderWindowInteractor.h:246
Definition: SVTK_Renderer.h:66
Define an abstract interface for selection in SVTK package.
Definition: SVTK_Selector.h:58