1 // Copyright (C) 2007-2021 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"
36 #include "SALOME_ListIO.hxx"
39 #include <vtkSmartPointer.h>
42 class SUIT_ResourceMgr;
44 class VTKViewer_Actor;
45 class VTKViewer_Trihedron;
47 class SVTK_ViewModelBase;
51 class SVTK_CubeAxesActor2D;
54 class vtkRenderWindow;
55 class vtkRenderWindowInteractor;
56 class vtkInteractorStyle;
57 class vtkCallbackCommand;
59 class SVTK_RenderWindowInteractor;
61 class SVTK_NonIsometricDlg;
62 class SVTK_UpdateRateDlg;
63 class SVTK_CubeAxesDlg;
64 class SVTK_SetRotationPointDlg;
65 class SVTK_InteractorStyle;
66 class SVTK_KeyFreeInteractorStyle;
67 class SVTK_ViewParameterDlg;
72 class vtkPVAxesWidget;
81 int convertAction( const int );
84 //! Define a container for SALOME VTK view window
85 class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow
90 //! To construct #SVTK_ViewWindow instance
91 SVTK_ViewWindow(SUIT_Desktop* theDesktop);
93 virtual ~SVTK_ViewWindow();
95 virtual QImage dumpView();
97 //! To initialize #SVTK_ViewWindow instance
98 virtual void Initialize(SVTK_ViewModelBase* theModel);
101 SVTK_View* getView();
103 //! Get render window
104 vtkRenderWindow* getRenderWindow();
107 vtkRenderWindowInteractor* getInteractor() const;
109 //! Get SVTK interactor
110 SVTK_RenderWindowInteractor* GetInteractor() const;
112 //! Get current interactor style
113 vtkInteractorStyle* GetInteractorStyle() const;
115 //! Add interactor style to the stack of styles
116 void PushInteractorStyle(vtkInteractorStyle* theStyle);
118 //! Remove last interactor style from the stack of styles
119 void PopInteractorStyle();
122 vtkRenderer* getRenderer() const;
124 //! Get SVTK renderer
125 SVTK_Renderer* GetRenderer() const;
128 SVTK_Selector* GetSelector() const;
130 //! Set selection mode
131 Selection_Mode SelectionMode() const;
133 //! Change selection mode
134 virtual void SetSelectionMode(Selection_Mode theMode);
136 //! Set background color [obsolete]
137 virtual void setBackgroundColor( const QColor& );
139 //! Get background color [obsolete]
140 QColor backgroundColor() const;
143 virtual void setBackground( const Qtx::BackgroundData& );
146 Qtx::BackgroundData background() const;
148 //! Return \c true if "display trihedron" flag is set
149 bool isTrihedronDisplayed();
151 //! Return \c true if "show graduated axes" flag is set
152 bool isCubeAxesDisplayed();
154 /* interactive object management */
155 //! Redirect the request to #SVTK_View::highlight (to support old code)
156 virtual void highlight(const Handle(SALOME_InteractiveObject)& theIO,
157 bool theIsHighlight = true,
158 bool theIsUpdate = true);
160 //! Redirect the request to #SVTK_View::unHighlightAll (to support old code)
161 virtual void unHighlightAll();
163 //! Redirect the request to #SVTK_View::isInViewer (to support old code)
164 bool isInViewer(const Handle(SALOME_InteractiveObject)& theIObject);
166 //! Redirect the request to #SVTK_View::isVisible (to support old code)
167 bool isVisible(const Handle(SALOME_InteractiveObject)& theIObject);
169 //! Redirect the request to #SVTK_View::FindIObject (to support old code)
170 //----------------------------------------------------------------------------
171 Handle(SALOME_InteractiveObject) FindIObject(const char* theEntry);
174 //----------------------------------------------------------------------------
175 //! Redirect the request to #SVTK_View::Display (to support old code)
176 virtual void Display(const Handle(SALOME_InteractiveObject)& theIObject,
177 bool theImmediatly = true);
179 //! Redirect the request to #SVTK_View::DisplayOnly (to support old code)
180 virtual void DisplayOnly(const Handle(SALOME_InteractiveObject)& theIObject);
182 //! Redirect the request to #SVTK_View::Erase (to support old code)
183 virtual void Erase(const Handle(SALOME_InteractiveObject)& theIObject,
184 bool theImmediatly = true);
186 //! Redirect the request to #SVTK_View::DisplayAll (to support old code)
187 virtual void DisplayAll();
189 //! Redirect the request to #SVTK_View::EraseAll (to support old code)
190 virtual void EraseAll();
192 //! To repaint the viewer
193 virtual void Repaint(bool theUpdateTrihedron = true);
195 //----------------------------------------------------------------------------
196 //! Redirect the request to #SVTK_Renderer::SetScale
197 virtual void SetScale( double theScale[3] );
199 //! Redirect the request to #SVTK_Renderer::GetScale
200 virtual void GetScale( double theScale[3] );
202 //! Redirect the request to #SVTK_Renderer::AddActor
203 virtual void AddActor(VTKViewer_Actor* theActor,
204 bool theIsUpdate = false,
205 bool theIsAdjustActors = true);
207 //! Redirect the request to #SVTK_Renderer::RemoveActor
208 virtual void RemoveActor(VTKViewer_Actor* theActor,
209 bool theIsUpdate = false,
210 bool theIsAdjustActors = true);
212 //----------------------------------------------------------------------------
213 //! Redirect the request to #SVTK_Renderer::AdjustActors
214 virtual void AdjustTrihedrons(const bool theIsForced);
216 //! Redirect the request to #SVTK_Renderer::GetTrihedron
217 VTKViewer_Trihedron* GetTrihedron();
219 //! Redirect the request to #SVTK_Renderer::GetCubeAxes
220 SVTK_CubeAxesActor2D* GetCubeAxes();
222 //! Redirect the request to #SVTK_Renderer::GetTrihedronSize
223 double GetTrihedronSize() const;
225 //! Redirect the request to #SVTK_Renderer::SetTrihedronSize
226 virtual void SetTrihedronSize( const double, const bool = true );
228 //! Set incremental speed
229 virtual void SetIncrementalSpeed( const int, const int = 0 );
231 //! Set current projection mode
232 virtual void SetProjectionMode( const int );
235 virtual void SetStereoType( const int );
237 //! Sets anaglyph filter
238 virtual void SetAnaglyphFilter( const int );
240 //! Set support quad-buffered stereo
241 virtual void SetQuadBufferSupport( const bool );
243 //! Set interactive style
244 virtual void SetInteractionStyle( const int );
246 //! Set zooming style
247 virtual void SetZoomingStyle( const int );
249 //! Set preselection mode
250 virtual void SetPreSelectionMode( Preselection_Mode );
252 //! Enable/disable selection
253 virtual void SetSelectionEnabled( bool );
255 //! Customize space mouse buttons
256 virtual void SetSpacemouseButtons( const int, const int, const int );
258 //! Set selection properties
259 virtual void SetSelectionProp(const double& theRed = 1,
260 const double& theGreen = 1,
261 const double& theBlue = 0,
262 const int& theWidth = 5);
264 //! Redirect the request to #SVTK_Renderer::SetPreselectionProp
265 virtual void SetPreselectionProp(const double& theRed = 0,
266 const double& theGreen = 1,
267 const double& theBlue = 1,
268 const int& theWidth = 5);
270 //! Redirect the request to #SVTK_Renderer::SetSelectionTolerance
271 virtual void SetSelectionTolerance(const double& theTolNodes = 0.025,
272 const double& theTolCell = 0.001,
273 const double& theTolObjects = 0.025);
275 //! Get visibility status of the static trihedron
276 bool IsStaticTrihedronVisible() const;
278 //! Set visibility status of the static trihedron
279 virtual void SetStaticTrihedronVisible( const bool );
281 //! Methods to save/restore visual parameters of a view (pan, zoom, etc.)
282 virtual QString getVisualParameters();
284 virtual void setVisualParameters( const QString& parameters );
286 virtual bool eventFilter( QObject*, QEvent* );
288 virtual void RefreshDumpImage();
290 void emitTransformed();
292 //! To invoke a VTK event on #SVTK_RenderWindowInteractor instance
293 void InvokeEvent(unsigned long theEvent, void* theCallData);
295 virtual SUIT_CameraProperties cameraProperties();
298 void Show( QShowEvent * );
299 void Hide( QHideEvent * );
302 virtual void showEvent( QShowEvent * );
303 virtual void hideEvent( QHideEvent * );
304 virtual void onSelectionChanged();
306 void onChangeRotationPoint(bool theIsActivate);
308 void activateSetRotationGravity();
309 void activateSetRotationSelected(void* theData);
310 void activateStartPointSelection( Selection_Mode );
312 void onUpdateRate(bool theIsActivate);
313 void onNonIsometric(bool theIsActivate);
314 void onGraduatedAxes(bool theIsActivate);
317 void activateWindowFit();
318 void activateRotation();
319 void activatePanning();
320 void activateGlobalPanning();
322 void onProjectionMode( QAction* theAction );
323 void onStereoMode( bool activate );
324 void onProjectionMode();
326 void activateProjectionMode(int);
328 void activateSetFocalPointGravity();
329 void activateSetFocalPointSelected();
330 void activateStartFocalPointSelection();
331 void activateInteractiveSelection();
332 void deactivateCurrectOperation();
334 void onViewParameters(bool theIsActivate);
336 void onSwitchInteractionStyle(bool theOn);
337 void onSwitchZoomingStyle(bool theOn);
339 void onSwitchPreSelectionMode(int theMode);
340 void onEnableSelection(bool theOn);
342 void onStartRecording();
343 void onPlayRecording();
344 void onPauseRecording();
345 void onStopRecording();
348 void selectionChanged();
349 void actorAdded(VTKViewer_Actor*);
350 void actorRemoved(VTKViewer_Actor*);
351 void transformed(SVTK_ViewWindow*);
354 //! Redirect the request to #SVTK_Renderer::OnFrontView
355 virtual void onFrontView();
357 //! Redirect the request to #SVTK_Renderer::OnBackView
358 virtual void onBackView();
360 //! Redirect the request to #SVTK_Renderer::OnTopView
361 virtual void onTopView();
363 //! Redirect the request to #SVTK_Renderer::OnBottomView
364 virtual void onBottomView();
366 //! Redirect the request to #SVTK_Renderer::OnRightView
367 virtual void onRightView();
369 //! Redirect the request to #SVTK_Renderer::OnLeftView
370 virtual void onLeftView();
372 //! Redirect the request to #SVTK_Renderer::onClockWiseView
373 virtual void onClockWiseView();
375 //! Redirect the request to #SVTK_Renderer::onAntiClockWiseView
376 virtual void onAntiClockWiseView();
378 //! Redirect the request to #SVTK_Renderer::OnResetView
379 virtual void onResetView();
381 //! Redirect the request to #SVTK_Renderer::OnFitAll
382 virtual void onFitAll();
384 //! Redirect the request to #SVTK_Renderer::OnFitSelection
385 virtual void onFitSelection();
387 //! Redirect the request to #SVTK_Renderer::OnFitIObjects
388 virtual void onFitIObjects(const SALOME_ListIO&);
390 //! Redirect the request to #SVTK_Renderer::OnViewTrihedron
391 virtual void onViewTrihedron(bool);
393 //! Redirect the request to #SVTK_Renderer::OnViewCubeAxes
394 virtual void onViewCubeAxes();
396 //! Redirect the request to #SVTK_Renderer::OnAdjustTrihedron
397 virtual void onAdjustTrihedron();
399 //! Redirect the request to #SVTK_Renderer::OnAdjustCubeAxes
400 virtual void onAdjustCubeAxes();
402 virtual void synchronize(SVTK_ViewWindow*);
405 void synchronize( SUIT_ViewWindow* );
406 void onKeyPressed(QKeyEvent* event);
407 void onKeyReleased(QKeyEvent* event);
408 void onMousePressed(QMouseEvent* event);
409 void onMouseDoubleClicked(QMouseEvent* event);
410 void onMouseReleased(QMouseEvent* event);
411 void onMouseMoving(QMouseEvent* event);
414 enum ProjectionType { Parallel, Projection, Stereo };
416 enum StereoType { CrystalEyes, RedBlue, Interlaced, Left, Right, Dresden, Anaglyph, Checkerboard, SplitViewPortHorizontal };
418 enum AnaglyphFilter { RedCyan, YellowBlue, GreenMagenta };
422 virtual void resizeEvent( QResizeEvent* );
424 virtual void Initialize(SVTK_View* theView,
425 SVTK_ViewModelBase* theModel);
427 // Main process event method
428 static void ProcessEvents(vtkObject* object,
433 bool isOpenGlStereoSupport() const;
435 void doSetVisualParameters( const QString&, bool = false );
436 void SetEventDispatcher(vtkObject* theDispatcher);
438 QImage dumpViewContent();
440 virtual QString filter() const;
441 virtual bool dumpViewToFormat( const QImage& img, const QString& fileName, const QString& format );
443 virtual bool action( const int );
445 QtxAction* getAction( int ) const;
446 void createToolBar();
447 void createActions(SUIT_ResourceMgr* theResourceMgr);
449 enum { DumpId, FitAllId, FitRectId, FitSelectionId, ZoomId, PanId, GlobalPanId,
450 ChangeRotationPointId, RotationId,
451 FrontId, BackId, TopId, BottomId, LeftId, RightId, ClockWiseId, AntiClockWiseId, ResetId,
452 ViewTrihedronId, NonIsometric, GraduatedAxes, UpdateRate,
453 ParallelModeId, ProjectionModeId, StereoModeId, ViewParametersId, SynchronizeId, SwitchInteractionStyleId,
454 SwitchZoomingStyleId,
455 PreselectionId, StandardPreselectionId, DynamicPreselectionId, DisablePreselectionId,
457 StartRecordingId, PlayRecordingId, PauseRecordingId, StopRecordingId };
460 SVTK_ViewModelBase* myModel;
462 SVTK_RenderWindowInteractor* myInteractor;
463 vtkSmartPointer<SVTK_InteractorStyle> myDefaultInteractorStyle;
464 vtkSmartPointer<SVTK_KeyFreeInteractorStyle> myKeyFreeInteractorStyle;
466 QString myVisualParams; // used for delayed setting of view parameters
468 vtkSmartPointer<vtkObject> myEventDispatcher;
470 // Used to process events
471 vtkSmartPointer<vtkCallbackCommand> myEventCallbackCommand;
473 SVTK_NonIsometricDlg* myNonIsometricDlg;
474 SVTK_UpdateRateDlg* myUpdateRateDlg;
475 SVTK_CubeAxesDlg* myCubeAxesDlg;
476 SVTK_SetRotationPointDlg* mySetRotationPointDlg;
477 SVTK_ViewParameterDlg* myViewParameterDlg;
479 QSize myPreRecordingMinSize;
480 QSize myPreRecordingMaxSize;
482 SVTK_Recorder* myRecorder;
483 QtxAction* myStartAction;
484 QtxAction* myPlayAction;
485 QtxAction* myPauseAction;
486 QtxAction* myStopAction;
489 int myRecordingToolBar;
491 salomevtk::vtkPVAxesWidget* myAxesWidget;
492 Qtx::BackgroundData myBackground;
499 #pragma warning( default:4251 )