1 // Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 #ifndef SVTK_VIEWWINDOW_H
24 #define SVTK_VIEWWINDOW_H
27 #pragma warning( disable:4251 )
31 #include "SVTK_Selection.h"
33 #include "SUIT_ViewWindow.h"
35 #include "SALOME_InteractiveObject.hxx"
38 #include <vtkSmartPointer.h>
41 class SUIT_ResourceMgr;
43 class VTKViewer_Actor;
44 class VTKViewer_Trihedron;
46 class SVTK_ViewModelBase;
50 class SVTK_CubeAxesActor2D;
53 class vtkRenderWindow;
54 class vtkRenderWindowInteractor;
55 class vtkInteractorStyle;
56 class vtkCallbackCommand;
58 class SVTK_RenderWindowInteractor;
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;
71 class vtkPVAxesWidget;
80 int convertAction( const int );
83 //! Define a container for SALOME VTK view window
84 class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow
89 //! To construct #SVTK_ViewWindow instance
90 SVTK_ViewWindow(SUIT_Desktop* theDesktop);
92 virtual ~SVTK_ViewWindow();
94 virtual QImage dumpView();
96 //! To initialize #SVTK_ViewWindow instance
97 virtual void Initialize(SVTK_ViewModelBase* theModel);
100 SVTK_View* getView();
102 //! Get render window
103 vtkRenderWindow* getRenderWindow();
106 vtkRenderWindowInteractor* getInteractor() const;
108 //! Get SVTK interactor
109 SVTK_RenderWindowInteractor* GetInteractor() const;
111 //! Get current interactor style
112 vtkInteractorStyle* GetInteractorStyle() const;
114 //! Add interactor style to the stack of styles
115 void PushInteractorStyle(vtkInteractorStyle* theStyle);
117 //! Remove last interactor style from the stack of styles
118 void PopInteractorStyle();
121 vtkRenderer* getRenderer() const;
123 //! Get SVTK renderer
124 SVTK_Renderer* GetRenderer() const;
127 SVTK_Selector* GetSelector() const;
129 //! Set selection mode
130 Selection_Mode SelectionMode() const;
132 //! Change selection mode
133 virtual void SetSelectionMode(Selection_Mode theMode);
135 //! Set background color [obsolete]
136 virtual void setBackgroundColor( const QColor& );
138 //! Get background color [obsolete]
139 QColor backgroundColor() const;
142 virtual void setBackground( const Qtx::BackgroundData& );
145 Qtx::BackgroundData background() const;
147 //! Return \c true if "display trihedron" flag is set
148 bool isTrihedronDisplayed();
150 //! Return \c true if "show graduated axes" flag is set
151 bool isCubeAxesDisplayed();
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);
159 //! Redirect the request to #SVTK_View::unHighlightAll (to support old code)
160 virtual void unHighlightAll();
162 //! Redirect the request to #SVTK_View::isInViewer (to support old code)
163 bool isInViewer(const Handle(SALOME_InteractiveObject)& theIObject);
165 //! Redirect the request to #SVTK_View::isVisible (to support old code)
166 bool isVisible(const Handle(SALOME_InteractiveObject)& theIObject);
168 //! Redirect the request to #SVTK_View::FindIObject (to support old code)
169 //----------------------------------------------------------------------------
170 Handle(SALOME_InteractiveObject) FindIObject(const char* theEntry);
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);
178 //! Redirect the request to #SVTK_View::DisplayOnly (to support old code)
179 virtual void DisplayOnly(const Handle(SALOME_InteractiveObject)& theIObject);
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);
185 //! Redirect the request to #SVTK_View::DisplayAll (to support old code)
186 virtual void DisplayAll();
188 //! Redirect the request to #SVTK_View::EraseAll (to support old code)
189 virtual void EraseAll();
191 //! To repaint the viewer
192 virtual void Repaint(bool theUpdateTrihedron = true);
194 //----------------------------------------------------------------------------
195 //! Redirect the request to #SVTK_Renderer::SetScale
196 virtual void SetScale( double theScale[3] );
198 //! Redirect the request to #SVTK_Renderer::GetScale
199 virtual void GetScale( double theScale[3] );
201 //! Redirect the request to #SVTK_Renderer::AddActor
202 virtual void AddActor(VTKViewer_Actor* theActor,
203 bool theIsUpdate = false,
204 bool theIsAdjustActors = true);
206 //! Redirect the request to #SVTK_Renderer::RemoveActor
207 virtual void RemoveActor(VTKViewer_Actor* theActor,
208 bool theIsUpdate = false,
209 bool theIsAdjustActors = true);
211 //----------------------------------------------------------------------------
212 //! Redirect the request to #SVTK_Renderer::AdjustActors
213 virtual void AdjustTrihedrons(const bool theIsForced);
215 //! Redirect the request to #SVTK_Renderer::GetTrihedron
216 VTKViewer_Trihedron* GetTrihedron();
218 //! Redirect the request to #SVTK_Renderer::GetCubeAxes
219 SVTK_CubeAxesActor2D* GetCubeAxes();
221 //! Redirect the request to #SVTK_Renderer::GetTrihedronSize
222 double GetTrihedronSize() const;
224 //! Redirect the request to #SVTK_Renderer::SetTrihedronSize
225 virtual void SetTrihedronSize( const double, const bool = true );
227 //! Set incremental speed
228 virtual void SetIncrementalSpeed( const int, const int = 0 );
230 //! Set current projection mode
231 virtual void SetProjectionMode( const int );
234 virtual void SetStereoType( const int );
236 //! Sets anaglyph filter
237 virtual void SetAnaglyphFilter( const int );
239 //! Set interactive style
240 virtual void SetInteractionStyle( const int );
242 //! Set zooming style
243 virtual void SetZoomingStyle( const int );
245 //! Set preselection mode
246 virtual void SetPreSelectionMode( Preselection_Mode );
248 //! Enable/disable selection
249 virtual void SetSelectionEnabled( bool );
251 //! Customize space mouse buttons
252 virtual void SetSpacemouseButtons( const int, const int, const int );
254 //! Set selection properties
255 virtual void SetSelectionProp(const double& theRed = 1,
256 const double& theGreen = 1,
257 const double& theBlue = 0,
258 const int& theWidth = 5);
260 //! Redirect the request to #SVTK_Renderer::SetPreselectionProp
261 virtual void SetPreselectionProp(const double& theRed = 0,
262 const double& theGreen = 1,
263 const double& theBlue = 1,
264 const int& theWidth = 5);
266 //! Redirect the request to #SVTK_Renderer::SetSelectionTolerance
267 virtual void SetSelectionTolerance(const double& theTolNodes = 0.025,
268 const double& theTolCell = 0.001,
269 const double& theTolObjects = 0.025);
271 //! Get visibility status of the static trihedron
272 bool IsStaticTrihedronVisible() const;
274 //! Set visibility status of the static trihedron
275 virtual void SetStaticTrihedronVisible( const bool );
277 //! Methods to save/restore visual parameters of a view (pan, zoom, etc.)
278 virtual QString getVisualParameters();
280 virtual void setVisualParameters( const QString& parameters );
282 virtual bool eventFilter( QObject*, QEvent* );
284 virtual void RefreshDumpImage();
286 void emitTransformed();
288 //! To invoke a VTK event on #SVTK_RenderWindowInteractor instance
289 void InvokeEvent(unsigned long theEvent, void* theCallData);
291 virtual SUIT_CameraProperties cameraProperties();
294 void Show( QShowEvent * );
295 void Hide( QHideEvent * );
298 virtual void showEvent( QShowEvent * );
299 virtual void hideEvent( QHideEvent * );
300 virtual void onSelectionChanged();
302 void onChangeRotationPoint(bool theIsActivate);
304 void activateSetRotationGravity();
305 void activateSetRotationSelected(void* theData);
306 void activateStartPointSelection( Selection_Mode );
308 void onUpdateRate(bool theIsActivate);
309 void onNonIsometric(bool theIsActivate);
310 void onGraduatedAxes(bool theIsActivate);
313 void activateWindowFit();
314 void activateRotation();
315 void activatePanning();
316 void activateGlobalPanning();
318 void onPerspectiveMode();
320 void activateProjectionMode(int);
322 void activateSetFocalPointGravity();
323 void activateSetFocalPointSelected();
324 void activateStartFocalPointSelection();
326 void onViewParameters(bool theIsActivate);
328 void onSwitchInteractionStyle(bool theOn);
329 void onSwitchZoomingStyle(bool theOn);
331 void onSwitchPreSelectionMode(int theMode);
332 void onEnableSelection(bool theOn);
334 void onStartRecording();
335 void onPlayRecording();
336 void onPauseRecording();
337 void onStopRecording();
340 void selectionChanged();
341 void actorAdded(VTKViewer_Actor*);
342 void actorRemoved(VTKViewer_Actor*);
343 void transformed(SVTK_ViewWindow*);
346 //! Redirect the request to #SVTK_Renderer::OnFrontView
347 virtual void onFrontView();
349 //! Redirect the request to #SVTK_Renderer::OnBackView
350 virtual void onBackView();
352 //! Redirect the request to #SVTK_Renderer::OnTopView
353 virtual void onTopView();
355 //! Redirect the request to #SVTK_Renderer::OnBottomView
356 virtual void onBottomView();
358 //! Redirect the request to #SVTK_Renderer::OnRightView
359 virtual void onRightView();
361 //! Redirect the request to #SVTK_Renderer::OnLeftView
362 virtual void onLeftView();
364 //! Redirect the request to #SVTK_Renderer::onClockWiseView
365 virtual void onClockWiseView();
367 //! Redirect the request to #SVTK_Renderer::onAntiClockWiseView
368 virtual void onAntiClockWiseView();
370 //! Redirect the request to #SVTK_Renderer::OnResetView
371 virtual void onResetView();
373 //! Redirect the request to #SVTK_Renderer::OnFitAll
374 virtual void onFitAll();
376 //! Redirect the request to #SVTK_Renderer::OnFitSelection
377 virtual void onFitSelection();
379 //! Redirect the request to #SVTK_Renderer::OnViewTrihedron
380 virtual void onViewTrihedron(bool);
382 //! Redirect the request to #SVTK_Renderer::OnViewCubeAxes
383 virtual void onViewCubeAxes();
385 //! Redirect the request to #SVTK_Renderer::OnAdjustTrihedron
386 virtual void onAdjustTrihedron();
388 //! Redirect the request to #SVTK_Renderer::OnAdjustCubeAxes
389 virtual void onAdjustCubeAxes();
391 virtual void synchronize(SVTK_ViewWindow*);
394 void synchronize( SUIT_ViewWindow* );
395 void onKeyPressed(QKeyEvent* event);
396 void onKeyReleased(QKeyEvent* event);
397 void onMousePressed(QMouseEvent* event);
398 void onMouseDoubleClicked(QMouseEvent* event);
399 void onMouseReleased(QMouseEvent* event);
400 void onMouseMoving(QMouseEvent* event);
403 enum ProjectionType { Parallel, Projection, Stereo };
405 enum StereoType { CrystalEyes, RedBlue, Interlaced, Left, Right, Dresden, Anaglyph, Checkerboard, SplitViewPortHorizontal };
407 enum AnaglyphFilter { RedCyan, YellowBlue, GreenMagenta };
410 virtual void Initialize(SVTK_View* theView,
411 SVTK_ViewModelBase* theModel);
413 // Main process event method
414 static void ProcessEvents(vtkObject* object,
419 bool isOpenGlStereoSupport() const;
421 void doSetVisualParameters( const QString&, bool = false );
422 void SetEventDispatcher(vtkObject* theDispatcher);
424 QImage dumpViewContent();
426 virtual QString filter() const;
427 virtual bool dumpViewToFormat( const QImage& img, const QString& fileName, const QString& format );
429 virtual bool action( const int );
431 QtxAction* getAction( int ) const;
432 void createToolBar();
433 void createActions(SUIT_ResourceMgr* theResourceMgr);
435 enum { DumpId, FitAllId, FitRectId, FitSelectionId, ZoomId, PanId, GlobalPanId,
436 ChangeRotationPointId, RotationId,
437 FrontId, BackId, TopId, BottomId, LeftId, RightId, ClockWiseId, AntiClockWiseId, ResetId,
438 ViewTrihedronId, NonIsometric, GraduatedAxes, UpdateRate,
439 ParallelModeId, ProjectionModeId, StereoModeId, ViewParametersId, SynchronizeId, SwitchInteractionStyleId,
440 SwitchZoomingStyleId,
441 PreselectionId, StandardPreselectionId, DynamicPreselectionId, DisablePreselectionId,
443 StartRecordingId, PlayRecordingId, PauseRecordingId, StopRecordingId };
446 SVTK_ViewModelBase* myModel;
448 SVTK_RenderWindowInteractor* myInteractor;
449 vtkSmartPointer<SVTK_InteractorStyle> myDefaultInteractorStyle;
450 vtkSmartPointer<SVTK_KeyFreeInteractorStyle> myKeyFreeInteractorStyle;
452 QString myVisualParams; // used for delayed setting of view parameters
454 vtkSmartPointer<vtkObject> myEventDispatcher;
456 // Used to process events
457 vtkSmartPointer<vtkCallbackCommand> myEventCallbackCommand;
459 SVTK_NonIsometricDlg* myNonIsometricDlg;
460 SVTK_UpdateRateDlg* myUpdateRateDlg;
461 SVTK_CubeAxesDlg* myCubeAxesDlg;
462 SVTK_SetRotationPointDlg* mySetRotationPointDlg;
463 SVTK_ViewParameterDlg* myViewParameterDlg;
465 QSize myPreRecordingMinSize;
466 QSize myPreRecordingMaxSize;
468 SVTK_Recorder* myRecorder;
469 QtxAction* myStartAction;
470 QtxAction* myPlayAction;
471 QtxAction* myPauseAction;
472 QtxAction* myStopAction;
475 int myRecordingToolBar;
477 salomevtk::vtkPVAxesWidget* myAxesWidget;
478 Qtx::BackgroundData myBackground;
485 #pragma warning( default:4251 )