]> SALOME platform Git repositories - modules/gui.git/blob - src/SVTK/SVTK_ViewWindow.h
Salome HOME
9d27ced4f5cf4cdde0df97e51cb6a3cb9bee39b2
[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::OnFitSelection
371   virtual void onFitSelection();
372
373   //! Redirect the request to #SVTK_Renderer::OnViewTrihedron
374   virtual void onViewTrihedron(bool); 
375
376   //! Redirect the request to #SVTK_Renderer::OnViewCubeAxes
377   virtual void onViewCubeAxes();
378
379   //! Redirect the request to #SVTK_Renderer::OnAdjustTrihedron
380   virtual void onAdjustTrihedron();
381
382   //! Redirect the request to #SVTK_Renderer::OnAdjustCubeAxes
383   virtual void onAdjustCubeAxes();
384   
385   virtual void synchronize(SVTK_ViewWindow*);
386     
387 protected slots:
388   void synchronize( SUIT_ViewWindow* );
389   void onKeyPressed(QKeyEvent* event);
390   void onKeyReleased(QKeyEvent* event);
391   void onMousePressed(QMouseEvent* event);
392   void onMouseDoubleClicked(QMouseEvent* event);
393   void onMouseReleased(QMouseEvent* event);
394   void onMouseMoving(QMouseEvent* event);
395
396 protected:
397   virtual void Initialize(SVTK_View* theView,
398                           SVTK_ViewModelBase* theModel);
399
400   // Main process event method
401   static void ProcessEvents(vtkObject* object,
402                             unsigned long event,
403                             void* clientdata,
404                             void* calldata);
405
406   void doSetVisualParameters( const QString&, bool = false );
407   void SetEventDispatcher(vtkObject* theDispatcher);
408
409   QImage dumpViewContent();
410
411   virtual QString filter() const;
412   virtual bool dumpViewToFormat( const QImage& img, const QString& fileName, const QString& format );
413   
414   virtual bool action( const int );
415   
416   QtxAction* getAction( int ) const;
417   void createToolBar();
418   void createActions(SUIT_ResourceMgr* theResourceMgr);
419
420   enum { DumpId, FitAllId, FitRectId, FitSelectionId, ZoomId, PanId, GlobalPanId,
421          ChangeRotationPointId, RotationId,
422          FrontId, BackId, TopId, BottomId, LeftId, RightId, ClockWiseId, AntiClockWiseId, ResetId,
423          ViewTrihedronId, NonIsometric, GraduatedAxes, UpdateRate,
424          ParallelModeId, ProjectionModeId, ViewParametersId, SynchronizeId, SwitchInteractionStyleId,
425          SwitchZoomingStyleId, 
426          PreselectionId, StandardPreselectionId, DynamicPreselectionId, DisablePreselectionId, 
427          EnableSelectionId,
428          StartRecordingId, PlayRecordingId, PauseRecordingId, StopRecordingId };
429
430   SVTK_View* myView;
431   SVTK_ViewModelBase* myModel;
432
433   SVTK_RenderWindowInteractor* myInteractor;
434   vtkSmartPointer<SVTK_InteractorStyle> myDefaultInteractorStyle;
435   vtkSmartPointer<SVTK_KeyFreeInteractorStyle> myKeyFreeInteractorStyle;
436
437   QString myVisualParams; // used for delayed setting of view parameters 
438
439   vtkSmartPointer<vtkObject> myEventDispatcher;
440
441   // Used to process events
442   vtkSmartPointer<vtkCallbackCommand> myEventCallbackCommand;
443
444   SVTK_NonIsometricDlg* myNonIsometricDlg;
445   SVTK_UpdateRateDlg* myUpdateRateDlg;
446   SVTK_CubeAxesDlg* myCubeAxesDlg;
447   SVTK_SetRotationPointDlg* mySetRotationPointDlg;
448   SVTK_ViewParameterDlg* myViewParameterDlg;
449
450   QSize myPreRecordingMinSize;
451   QSize myPreRecordingMaxSize;
452
453   SVTK_Recorder* myRecorder;
454   QtxAction* myStartAction;
455   QtxAction* myPlayAction;
456   QtxAction* myPauseAction;
457   QtxAction* myStopAction;
458
459   int myToolBar;
460   int myRecordingToolBar;
461
462   salomevtk::vtkPVAxesWidget* myAxesWidget;
463   Qtx::BackgroundData myBackground;
464
465 private:
466   QImage myDumpImage;
467 };
468
469 #ifdef WIN32
470 #pragma warning( default:4251 )
471 #endif
472
473 #endif