Version: 9.15.0
VTKViewer_InteractorStyle.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 : VTKViewer_InteractorStyle.h
25 // Author : Christophe ATTANASIO
26 // Module : SALOME
27 //
28 #ifndef __VTKViewer_InteractorStyle_h
29 #define __VTKViewer_InteractorStyle_h
30 
31 #include <vtkInteractorStyle.h>
32 
33 class vtkCell;
35 class vtkTDxInteractorStyle;
36 
37 #include <QObject>
38 #include <QCursor>
39 
40 class QRubberBand;
41 
42 #include <map>
43 
44 #include "VTKViewer.h"
45 
46 #include "VTKViewer_Filter.h"
47 
48 class VTKViewer_Actor;
52 
53 #define VTK_INTERACTOR_STYLE_CAMERA_NONE 0
54 #define VTK_INTERACTOR_STYLE_CAMERA_ROTATE 1
55 #define VTK_INTERACTOR_STYLE_CAMERA_PAN 2
56 #define VTK_INTERACTOR_STYLE_CAMERA_ZOOM 3
57 #define VTK_INTERACTOR_STYLE_CAMERA_SPIN 4
58 #define VTK_INTERACTOR_STYLE_CAMERA_FIT 5
59 #define VTK_INTERACTOR_STYLE_CAMERA_SELECT 6
60 #define VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN 7
61 
62 #ifdef WIN32
63 #pragma warning ( disable:4251 )
64 #endif
65 
72 {
73  public:
76 
77  virtual void SetInteractor(vtkRenderWindowInteractor *theInteractor);
78  void setViewWnd(VTKViewer_ViewWindow* theViewWnd);
79  void setGUIWindow(QWidget* theWindow);
80 
81  void setTriedron(VTKViewer_Trihedron* theTrihedron);
82  void setPreselectionProp(const double& theRed = 0, const double& theGreen = 1,
83  const double& theBlue = 1, const int& theWidth = 5);
84 
85  // Generic event bindings must be overridden in subclasses
86  void OnMouseMove (int ctrl, int shift, int x, int y);
87  void OnLeftButtonDown(int ctrl, int shift, int x, int y);
88  void OnLeftButtonUp (int ctrl, int shift, int x, int y);
89  void OnMiddleButtonDown(int ctrl, int shift, int x, int y);
90  void OnMiddleButtonUp (int ctrl, int shift, int x, int y);
91  void OnRightButtonDown(int ctrl, int shift, int x, int y);
92  void OnRightButtonUp (int ctrl, int shift, int x, int y);
93 
94  void OnSelectionModeChanged();
95 
96  void ViewFitAll();
97  void ViewFitSelection();
98 
99  void SetFilter( const Handle( VTKViewer_Filter)& );
100  Handle(VTKViewer_Filter) GetFilter( const int );
101  bool IsFilterPresent( const int );
102  void RemoveFilter( const int );
103  bool IsValid( VTKViewer_Actor* theActor,
104  const vtkIdType theId,
105  const bool theIsNode = false );
106 
107  void IncrementalPan ( const int incrX, const int incrY );
108  void IncrementalZoom ( const int incr );
109  void IncrementalRotate( const int incrX, const int incrY );
110 
111  int CurrentState() const { return State; }
112 
113  protected:
118 
119  void RotateXY(int dx, int dy);
120  void PanXY(int x, int y, int oldX, int oldY);
121  void DollyXY(int dx, int dy);
122  void SpinXY(int dx, int dy, int oldX, int oldY);
123  void fitRect(const int left, const int top, const int right, const int bottom);
124  void Place(const int theX, const int theY);
125  void TranslateView(int toX, int toY, int fromX, int fromY);
126  bool IsInRect(vtkActor* theActor,
127  const int left, const int top,
128  const int right, const int bottom);
129  bool IsInRect(vtkCell* theCell,
130  const int left, const int top,
131  const int right, const int bottom);
132  bool IsInRect(double* thePoint,
133  const int left, const int top,
134  const int right, const int bottom);
135 
136  int State;
137  double MotionFactor;
138  double RadianToDegree; // constant: for conv from deg to rad
139  double myScale;
140 
141  VTKViewer_Actor *myPreViewActor, *myPreSelectionActor, *mySelectedActor;
142 
143  vtkIdType myElemId;
144  int myEdgeId;
145  vtkIdType myNodeId;
146 
147  public:
148  bool eventFilter(QObject* object, QEvent* event);
149  void startZoom();
150  void startPan();
151  void startGlobalPan();
152  void startRotate();
153  void startFitArea();
154  void startSpin();
155  void SetTDxStyle(vtkTDxInteractorStyle* /*tdxStyle*/) {}
156  bool needsRedrawing();
157 
158  protected:
159  void loadCursors();
160  void startOperation(int operation);
161  virtual void onStartOperation();
162  virtual void onFinishOperation();
163  virtual void onOperation(QPoint mousePos);
164  virtual void onCursorMove(QPoint /*mousePos*/);
165  virtual void setCursor(const int operation);
166 
167  void drawRect();
168  void endDrawRect();
169 
170  protected:
171  QCursor myDefCursor;
172  QCursor myPanCursor;
173  QCursor myZoomCursor;
174  QCursor myRotateCursor;
175  QCursor mySpinCursor;
176  QCursor myHandCursor;
178  QPoint myPoint;
179  QPoint myOtherPoint;
183 
188 
190 
191  QRubberBand* myRectBand;
192 
196  double DeltaAzimuth;
197  int LastPos[2];
199 };
200 
201 #ifdef WIN32
202 #pragma warning ( default:4251 )
203 #endif
204 
205 #endif
Handle(TDocStd_Application) CAF_Application
Get OCAF application.
Definition: CAF_Application.cxx:97
#define VTKVIEWER_EXPORT
Definition: VTKViewer.h:33
For more information see QT documentation.
Definition: SUIT_Application.h:42
Definition: VTKViewer_Actor.h:79
Definition: VTKViewer_Filter.cxx:29
Definition: VTKViewer_InteractorStyle.h:72
vtkIdType myNodeId
Definition: VTKViewer_InteractorStyle.h:145
static VTKViewer_InteractorStyle * New()
VTKViewer_Trihedron * m_Trihedron
Definition: VTKViewer_InteractorStyle.h:186
QPoint myPoint
Definition: VTKViewer_InteractorStyle.h:178
std::map< int, Handle(VTKViewer_Filter) > myFilters
Definition: VTKViewer_InteractorStyle.h:189
QCursor myHandCursor
Definition: VTKViewer_InteractorStyle.h:176
Handle(VTKViewer_Filter) GetFilter(const int)
VTKViewer_RenderWindowInteractor * m_Interactor
Definition: VTKViewer_InteractorStyle.h:184
bool myShiftState
Definition: VTKViewer_InteractorStyle.h:181
vtkIdType myElemId
Definition: VTKViewer_InteractorStyle.h:143
double DeltaElevation
Definition: VTKViewer_InteractorStyle.h:195
double myScale
Definition: VTKViewer_InteractorStyle.h:139
QCursor mySpinCursor
Definition: VTKViewer_InteractorStyle.h:175
void SetTDxStyle(vtkTDxInteractorStyle *)
Definition: VTKViewer_InteractorStyle.h:155
QCursor myRotateCursor
Definition: VTKViewer_InteractorStyle.h:174
double DeltaAzimuth
Definition: VTKViewer_InteractorStyle.h:196
int ForcedState
Definition: VTKViewer_InteractorStyle.h:182
bool myCursorState
Definition: VTKViewer_InteractorStyle.h:180
double RadianToDegree
Definition: VTKViewer_InteractorStyle.h:138
int myEdgeId
Definition: VTKViewer_InteractorStyle.h:144
VTKViewer_Actor * myPreSelectionActor
Definition: VTKViewer_InteractorStyle.h:141
QWidget * myGUIWindow
Definition: VTKViewer_InteractorStyle.h:187
double MotionFactor
Definition: VTKViewer_InteractorStyle.h:137
QCursor myZoomCursor
Definition: VTKViewer_InteractorStyle.h:173
QCursor myGlobalPanCursor
Definition: VTKViewer_InteractorStyle.h:177
void operator=(const VTKViewer_InteractorStyle &)
Definition: VTKViewer_InteractorStyle.h:117
QRubberBand * myRectBand
selection rectangle rubber band
Definition: VTKViewer_InteractorStyle.h:191
vtkTypeMacro(VTKViewer_InteractorStyle, vtkInteractorStyle) virtual void SetInteractor(vtkRenderWindowInteractor *theInteractor)
QPoint myOtherPoint
Definition: VTKViewer_InteractorStyle.h:179
QCursor myDefCursor
Definition: VTKViewer_InteractorStyle.h:171
int State
Definition: VTKViewer_InteractorStyle.h:136
QCursor myPanCursor
Definition: VTKViewer_InteractorStyle.h:172
VTKViewer_ViewWindow * m_ViewWnd
Definition: VTKViewer_InteractorStyle.h:185
VTKViewer_InteractorStyle(const VTKViewer_InteractorStyle &)
Definition: VTKViewer_InteractorStyle.h:116
int CurrentState() const
Definition: VTKViewer_InteractorStyle.h:111
Definition: VTKViewer_RenderWindowInteractor.h:58
Definition: VTKViewer_Trihedron.h:145
Definition: VTKViewer_ViewWindow.h:47