Salome HOME
0052660: Plot2D Viewer: Plot2d_Curve can't be selected
[modules/gui.git] / src / SVTK / SVTK_ViewWindow.h
1 // Copyright (C) 2007-2015  CEA/DEN, EDF R&D, 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 #ifndef SVTK_VIEWWINDOW_H
24 #define SVTK_VIEWWINDOW_H
25
26 #ifdef WIN32
27 #pragma warning( disable:4251 )
28 #endif
29
30 #include "SVTK.h"
31 #include "SVTK_Selection.h"
32 #include "Qtx.h"
33 #include "SUIT_ViewWindow.h"
34
35 #include "SALOME_InteractiveObject.hxx"
36
37 #include <QImage>
38 #include <vtkSmartPointer.h>
39
40 class SUIT_Desktop;
41 class SUIT_ResourceMgr;
42
43 class VTKViewer_Actor;
44 class VTKViewer_Trihedron;
45
46 class SVTK_ViewModelBase;
47 class SVTK_Selector;
48 class SVTK_View;
49
50 class SVTK_CubeAxesActor2D;
51
52 class vtkRenderer;
53 class vtkRenderWindow;
54 class vtkRenderWindowInteractor;
55 class vtkInteractorStyle;
56 class vtkCallbackCommand;
57
58 class SVTK_RenderWindowInteractor;
59 class SVTK_Renderer;
60 class SVTK_NonIsometricDlg;
61 class SVTK_UpdateRateDlg;
62 class SVTK_CubeAxesDlg;
63 class SVTK_SetRotationPointDlg;
64 class SVTK_InteractorStyle;
65 class SVTK_KeyFreeInteractorStyle;
66 class SVTK_ViewParameterDlg;
67 class SVTK_Recorder;
68
69 namespace salomevtk
70 {
71   class vtkPVAxesWidget;
72 }
73
74 class vtkObject;
75 class QtxAction;
76
77 namespace SVTK
78 {
79   SVTK_EXPORT
80     int convertAction( const int );
81 }
82
83 //! Define a container for SALOME VTK view window
84 class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow
85 {
86   Q_OBJECT;
87
88  public:
89   //! To construct #SVTK_ViewWindow instance
90   SVTK_ViewWindow(SUIT_Desktop* theDesktop);
91
92   virtual ~SVTK_ViewWindow();
93   
94   virtual QImage dumpView();
95
96   //! To initialize #SVTK_ViewWindow instance
97   virtual void Initialize(SVTK_ViewModelBase* theModel);
98
99   //! Get #SVTK_View
100   SVTK_View* getView();
101
102   //! Get render window
103   vtkRenderWindow* getRenderWindow();
104
105   //! Get interactor
106   vtkRenderWindowInteractor* getInteractor() const;
107
108   //! Get SVTK interactor
109   SVTK_RenderWindowInteractor*  GetInteractor() const;
110
111   //! Get current interactor style
112   vtkInteractorStyle* GetInteractorStyle() const;
113
114   //! Add interactor style to the stack of styles
115   void PushInteractorStyle(vtkInteractorStyle* theStyle);
116
117   //! Remove last interactor style from the stack of styles
118   void PopInteractorStyle();
119
120   //! Get renderer
121   vtkRenderer* getRenderer() const;
122   
123   //! Get SVTK renderer
124   SVTK_Renderer* GetRenderer() const;
125
126   //! Get selector
127   SVTK_Selector* GetSelector() const;
128   
129   //! Set selection mode
130   Selection_Mode SelectionMode() const;
131   
132   //! Change selection mode
133   virtual void SetSelectionMode(Selection_Mode theMode);
134
135   //! Set background color [obsolete] 
136   virtual void setBackgroundColor( const QColor& );
137
138   //! Get background color [obsolete]
139   QColor backgroundColor() const;
140
141   //! Set background
142   virtual void setBackground( const Qtx::BackgroundData& );
143
144   //! Get background
145   Qtx::BackgroundData background() const;
146
147   //! Return \c true if "display trihedron" flag is set
148   bool isTrihedronDisplayed();
149
150   //! Return \c true if "show graduated axes" flag is set
151   bool isCubeAxesDisplayed();
152  
153   /*  interactive object management */
154   //! Redirect the request to #SVTK_View::highlight (to support old code)
155   virtual void highlight(const Handle(SALOME_InteractiveObject)& theIO, 
156                          bool theIsHighlight = true, 
157                          bool theIsUpdate = true);
158
159   //! Redirect the request to #SVTK_View::unHighlightAll (to support old code)
160   virtual void unHighlightAll();
161
162   //! Redirect the request to #SVTK_View::isInViewer (to support old code)
163   bool isInViewer(const Handle(SALOME_InteractiveObject)& theIObject);
164
165   //! Redirect the request to #SVTK_View::isVisible (to support old code)
166   bool isVisible(const Handle(SALOME_InteractiveObject)& theIObject);
167
168   //! Redirect the request to #SVTK_View::FindIObject (to support old code)
169   //----------------------------------------------------------------------------
170   Handle(SALOME_InteractiveObject) FindIObject(const char* theEntry);
171   
172   /* display */         
173   //----------------------------------------------------------------------------
174   //! Redirect the request to #SVTK_View::Display (to support old code)
175   virtual void Display(const Handle(SALOME_InteractiveObject)& theIObject,
176                        bool theImmediatly = true);
177
178   //! Redirect the request to #SVTK_View::DisplayOnly (to support old code)
179   virtual void DisplayOnly(const Handle(SALOME_InteractiveObject)& theIObject);
180
181   //! Redirect the request to #SVTK_View::Erase (to support old code)
182   virtual void Erase(const Handle(SALOME_InteractiveObject)& theIObject,
183                      bool theImmediatly = true);
184
185   //! Redirect the request to #SVTK_View::DisplayAll (to support old code)
186   virtual void DisplayAll();
187
188   //! Redirect the request to #SVTK_View::EraseAll (to support old code)
189   virtual void EraseAll();
190
191   //! To repaint the viewer
192   virtual void Repaint(bool theUpdateTrihedron = true);
193
194   //----------------------------------------------------------------------------
195   //! Redirect the request to #SVTK_Renderer::SetScale
196   virtual void SetScale( double theScale[3] );
197
198   //! Redirect the request to #SVTK_Renderer::GetScale
199   virtual void GetScale( double theScale[3] );
200
201   //! Redirect the request to #SVTK_Renderer::AddActor
202   virtual void AddActor(VTKViewer_Actor* theActor,
203                         bool theIsUpdate = false,
204                         bool theIsAdjustActors = true);
205
206   //! Redirect the request to #SVTK_Renderer::RemoveActor
207   virtual void RemoveActor(VTKViewer_Actor* theActor,
208                            bool theIsUpdate = false,
209                            bool theIsAdjustActors = true);
210
211   //----------------------------------------------------------------------------
212   //! Redirect the request to #SVTK_Renderer::AdjustActors
213   virtual void AdjustTrihedrons(const bool theIsForced);
214
215   //! Redirect the request to #SVTK_Renderer::GetTrihedron
216   VTKViewer_Trihedron* GetTrihedron();
217
218   //! Redirect the request to #SVTK_Renderer::GetCubeAxes
219   SVTK_CubeAxesActor2D* GetCubeAxes();
220
221   //! Redirect the request to #SVTK_Renderer::GetTrihedronSize
222   double GetTrihedronSize() const;
223
224   //! Redirect the request to #SVTK_Renderer::SetTrihedronSize
225   virtual void SetTrihedronSize( const double, const bool = true );
226
227   //! Set incremental speed
228   virtual void SetIncrementalSpeed( const int, const int = 0 );
229
230   //! Set current projection mode
231   virtual void SetProjectionMode( const int );
232
233   //! Set interactive style
234   virtual void SetInteractionStyle( const int );
235
236   //! Set zooming style
237   virtual void SetZoomingStyle( const int );
238
239   //! Set preselection mode
240   virtual void SetPreSelectionMode( Preselection_Mode );
241
242   //! Enable/disable selection
243   virtual void SetSelectionEnabled( bool );
244
245   //! Customize space mouse buttons
246   virtual void SetSpacemouseButtons( const int, const int, const int );
247
248   //! Set selection properties
249   virtual void SetSelectionProp(const double& theRed = 1, 
250                                 const double& theGreen = 1,
251                                 const double& theBlue = 0, 
252                                 const int& theWidth = 5);
253
254   //! Redirect the request to #SVTK_Renderer::SetPreselectionProp
255   virtual void SetPreselectionProp(const double& theRed = 0, 
256                                    const double& theGreen = 1,
257                                    const double& theBlue = 1, 
258                                    const int& theWidth = 5);
259
260   //! Redirect the request to #SVTK_Renderer::SetSelectionTolerance
261   virtual void SetSelectionTolerance(const double& theTolNodes = 0.025, 
262                                      const double& theTolCell = 0.001,
263                                      const double& theTolObjects = 0.025);
264
265   //! Get visibility status of the static trihedron
266   bool IsStaticTrihedronVisible() const;
267
268   //! Set visibility status of the static trihedron
269   virtual void SetStaticTrihedronVisible( const bool );
270
271   //! Methods to save/restore visual parameters of a view (pan, zoom, etc.)
272   virtual QString getVisualParameters();
273   
274   virtual void setVisualParameters( const QString& parameters );
275
276   virtual bool eventFilter( QObject*, QEvent* );
277
278   virtual void RefreshDumpImage();
279
280   void emitTransformed();
281
282   //! To invoke a VTK event on #SVTK_RenderWindowInteractor instance
283   void InvokeEvent(unsigned long theEvent, void* theCallData);
284   
285   virtual SUIT_CameraProperties cameraProperties();
286   
287  signals:
288   void Show( QShowEvent * );
289   void Hide( QHideEvent * );
290
291 public slots:
292   virtual void showEvent( QShowEvent * );
293   virtual void hideEvent( QHideEvent * );
294   virtual void onSelectionChanged();
295
296   void onChangeRotationPoint(bool theIsActivate);
297
298   void activateSetRotationGravity();
299   void activateSetRotationSelected(void* theData);
300   void activateStartPointSelection( Selection_Mode );
301
302   void onUpdateRate(bool theIsActivate);
303   void onNonIsometric(bool theIsActivate);
304   void onGraduatedAxes(bool theIsActivate);
305
306   void activateZoom();
307   void activateWindowFit();
308   void activateRotation();
309   void activatePanning(); 
310   void activateGlobalPanning(); 
311
312   void onPerspectiveMode();
313
314   void activateProjectionMode(int);
315
316   void activateSetFocalPointGravity();
317   void activateSetFocalPointSelected();
318   void activateStartFocalPointSelection();
319
320   void onViewParameters(bool theIsActivate);
321
322   void onSwitchInteractionStyle(bool theOn);
323   void onSwitchZoomingStyle(bool theOn);
324
325   void onSwitchPreSelectionMode(int theMode);
326   void onEnableSelection(bool theOn);
327
328   void onStartRecording();
329   void onPlayRecording();
330   void onPauseRecording();
331   void onStopRecording();
332
333 signals:
334  void selectionChanged();
335  void actorAdded(VTKViewer_Actor*);
336  void actorRemoved(VTKViewer_Actor*);
337  void transformed(SVTK_ViewWindow*);
338
339 public slots:
340   //! Redirect the request to #SVTK_Renderer::OnFrontView
341   virtual void onFrontView(); 
342
343   //! Redirect the request to #SVTK_Renderer::OnBackView
344   virtual void onBackView(); 
345
346   //! Redirect the request to #SVTK_Renderer::OnTopView
347   virtual void onTopView();
348
349   //! Redirect the request to #SVTK_Renderer::OnBottomView
350   virtual void onBottomView();
351
352   //! Redirect the request to #SVTK_Renderer::OnRightView
353   virtual void onRightView(); 
354
355   //! Redirect the request to #SVTK_Renderer::OnLeftView
356   virtual void onLeftView();     
357
358   //! Redirect the request to #SVTK_Renderer::onClockWiseView
359   virtual void onClockWiseView();
360
361   //! Redirect the request to #SVTK_Renderer::onAntiClockWiseView
362   virtual void onAntiClockWiseView();
363
364   //! Redirect the request to #SVTK_Renderer::OnResetView
365   virtual void onResetView();     
366
367   //! Redirect the request to #SVTK_Renderer::OnFitAll
368   virtual void onFitAll();
369
370   //! Redirect the request to #SVTK_Renderer::OnViewTrihedron
371   virtual void onViewTrihedron(bool); 
372
373   //! Redirect the request to #SVTK_Renderer::OnViewCubeAxes
374   virtual void onViewCubeAxes();
375
376   //! Redirect the request to #SVTK_Renderer::OnAdjustTrihedron
377   virtual void onAdjustTrihedron();
378
379   //! Redirect the request to #SVTK_Renderer::OnAdjustCubeAxes
380   virtual void onAdjustCubeAxes();
381   
382   virtual void synchronize(SVTK_ViewWindow*);
383     
384 protected slots:
385   void synchronize( SUIT_ViewWindow* );
386   void onKeyPressed(QKeyEvent* event);
387   void onKeyReleased(QKeyEvent* event);
388   void onMousePressed(QMouseEvent* event);
389   void onMouseDoubleClicked(QMouseEvent* event);
390   void onMouseReleased(QMouseEvent* event);
391   void onMouseMoving(QMouseEvent* event);
392
393 protected:
394   virtual void Initialize(SVTK_View* theView,
395                           SVTK_ViewModelBase* theModel);
396
397   // Main process event method
398   static void ProcessEvents(vtkObject* object,
399                             unsigned long event,
400                             void* clientdata,
401                             void* calldata);
402
403   void doSetVisualParameters( const QString&, bool = false );
404   void SetEventDispatcher(vtkObject* theDispatcher);
405
406   QImage dumpViewContent();
407
408   virtual QString filter() const;
409   virtual bool dumpViewToFormat( const QImage& img, const QString& fileName, const QString& format );
410   
411   virtual bool action( const int );
412   
413   QtxAction* getAction( int ) const;
414   void createToolBar();
415   void createActions(SUIT_ResourceMgr* theResourceMgr);
416
417   enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId, 
418          ChangeRotationPointId, RotationId,
419          FrontId, BackId, TopId, BottomId, LeftId, RightId, ClockWiseId, AntiClockWiseId, ResetId,
420          ViewTrihedronId, NonIsometric, GraduatedAxes, UpdateRate,
421          ParallelModeId, ProjectionModeId, ViewParametersId, SynchronizeId, SwitchInteractionStyleId,
422          SwitchZoomingStyleId, 
423          PreselectionId, StandardPreselectionId, DynamicPreselectionId, DisablePreselectionId, 
424          EnableSelectionId,
425          StartRecordingId, PlayRecordingId, PauseRecordingId, StopRecordingId };
426
427   SVTK_View* myView;
428   SVTK_ViewModelBase* myModel;
429
430   SVTK_RenderWindowInteractor* myInteractor;
431   vtkSmartPointer<SVTK_InteractorStyle> myDefaultInteractorStyle;
432   vtkSmartPointer<SVTK_KeyFreeInteractorStyle> myKeyFreeInteractorStyle;
433
434   QString myVisualParams; // used for delayed setting of view parameters 
435
436   vtkSmartPointer<vtkObject> myEventDispatcher;
437
438   // Used to process events
439   vtkSmartPointer<vtkCallbackCommand> myEventCallbackCommand;
440
441   SVTK_NonIsometricDlg* myNonIsometricDlg;
442   SVTK_UpdateRateDlg* myUpdateRateDlg;
443   SVTK_CubeAxesDlg* myCubeAxesDlg;
444   SVTK_SetRotationPointDlg* mySetRotationPointDlg;
445   SVTK_ViewParameterDlg* myViewParameterDlg;
446
447   QSize myPreRecordingMinSize;
448   QSize myPreRecordingMaxSize;
449
450   SVTK_Recorder* myRecorder;
451   QtxAction* myStartAction;
452   QtxAction* myPlayAction;
453   QtxAction* myPauseAction;
454   QtxAction* myStopAction;
455
456   int myToolBar;
457   int myRecordingToolBar;
458
459   salomevtk::vtkPVAxesWidget* myAxesWidget;
460   Qtx::BackgroundData myBackground;
461
462 private:
463   QImage myDumpImage;
464 };
465
466 #ifdef WIN32
467 #pragma warning( default:4251 )
468 #endif
469
470 #endif