1 // Copyright (C) 2007-2016 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();
332 void onViewParameters(bool theIsActivate);
334 void onSwitchInteractionStyle(bool theOn);
335 void onSwitchZoomingStyle(bool theOn);
337 void onSwitchPreSelectionMode(int theMode);
338 void onEnableSelection(bool theOn);
340 void onStartRecording();
341 void onPlayRecording();
342 void onPauseRecording();
343 void onStopRecording();
346 void selectionChanged();
347 void actorAdded(VTKViewer_Actor*);
348 void actorRemoved(VTKViewer_Actor*);
349 void transformed(SVTK_ViewWindow*);
352 //! Redirect the request to #SVTK_Renderer::OnFrontView
353 virtual void onFrontView();
355 //! Redirect the request to #SVTK_Renderer::OnBackView
356 virtual void onBackView();
358 //! Redirect the request to #SVTK_Renderer::OnTopView
359 virtual void onTopView();
361 //! Redirect the request to #SVTK_Renderer::OnBottomView
362 virtual void onBottomView();
364 //! Redirect the request to #SVTK_Renderer::OnRightView
365 virtual void onRightView();
367 //! Redirect the request to #SVTK_Renderer::OnLeftView
368 virtual void onLeftView();
370 //! Redirect the request to #SVTK_Renderer::onClockWiseView
371 virtual void onClockWiseView();
373 //! Redirect the request to #SVTK_Renderer::onAntiClockWiseView
374 virtual void onAntiClockWiseView();
376 //! Redirect the request to #SVTK_Renderer::OnResetView
377 virtual void onResetView();
379 //! Redirect the request to #SVTK_Renderer::OnFitAll
380 virtual void onFitAll();
382 //! Redirect the request to #SVTK_Renderer::OnFitSelection
383 virtual void onFitSelection();
385 //! Redirect the request to #SVTK_Renderer::OnFitIObjects
386 virtual void onFitIObjects(const SALOME_ListIO&);
388 //! Redirect the request to #SVTK_Renderer::OnViewTrihedron
389 virtual void onViewTrihedron(bool);
391 //! Redirect the request to #SVTK_Renderer::OnViewCubeAxes
392 virtual void onViewCubeAxes();
394 //! Redirect the request to #SVTK_Renderer::OnAdjustTrihedron
395 virtual void onAdjustTrihedron();
397 //! Redirect the request to #SVTK_Renderer::OnAdjustCubeAxes
398 virtual void onAdjustCubeAxes();
400 virtual void synchronize(SVTK_ViewWindow*);
403 void synchronize( SUIT_ViewWindow* );
404 void onKeyPressed(QKeyEvent* event);
405 void onKeyReleased(QKeyEvent* event);
406 void onMousePressed(QMouseEvent* event);
407 void onMouseDoubleClicked(QMouseEvent* event);
408 void onMouseReleased(QMouseEvent* event);
409 void onMouseMoving(QMouseEvent* event);
412 enum ProjectionType { Parallel, Projection, Stereo };
414 enum StereoType { CrystalEyes, RedBlue, Interlaced, Left, Right, Dresden, Anaglyph, Checkerboard, SplitViewPortHorizontal };
416 enum AnaglyphFilter { RedCyan, YellowBlue, GreenMagenta };
419 virtual void Initialize(SVTK_View* theView,
420 SVTK_ViewModelBase* theModel);
422 // Main process event method
423 static void ProcessEvents(vtkObject* object,
428 bool isOpenGlStereoSupport() const;
430 void doSetVisualParameters( const QString&, bool = false );
431 void SetEventDispatcher(vtkObject* theDispatcher);
433 QImage dumpViewContent();
435 virtual QString filter() const;
436 virtual bool dumpViewToFormat( const QImage& img, const QString& fileName, const QString& format );
438 virtual bool action( const int );
440 QtxAction* getAction( int ) const;
441 void createToolBar();
442 void createActions(SUIT_ResourceMgr* theResourceMgr);
444 enum { DumpId, FitAllId, FitRectId, FitSelectionId, ZoomId, PanId, GlobalPanId,
445 ChangeRotationPointId, RotationId,
446 FrontId, BackId, TopId, BottomId, LeftId, RightId, ClockWiseId, AntiClockWiseId, ResetId,
447 ViewTrihedronId, NonIsometric, GraduatedAxes, UpdateRate,
448 ParallelModeId, ProjectionModeId, StereoModeId, ViewParametersId, SynchronizeId, SwitchInteractionStyleId,
449 SwitchZoomingStyleId,
450 PreselectionId, StandardPreselectionId, DynamicPreselectionId, DisablePreselectionId,
452 StartRecordingId, PlayRecordingId, PauseRecordingId, StopRecordingId };
455 SVTK_ViewModelBase* myModel;
457 SVTK_RenderWindowInteractor* myInteractor;
458 vtkSmartPointer<SVTK_InteractorStyle> myDefaultInteractorStyle;
459 vtkSmartPointer<SVTK_KeyFreeInteractorStyle> myKeyFreeInteractorStyle;
461 QString myVisualParams; // used for delayed setting of view parameters
463 vtkSmartPointer<vtkObject> myEventDispatcher;
465 // Used to process events
466 vtkSmartPointer<vtkCallbackCommand> myEventCallbackCommand;
468 SVTK_NonIsometricDlg* myNonIsometricDlg;
469 SVTK_UpdateRateDlg* myUpdateRateDlg;
470 SVTK_CubeAxesDlg* myCubeAxesDlg;
471 SVTK_SetRotationPointDlg* mySetRotationPointDlg;
472 SVTK_ViewParameterDlg* myViewParameterDlg;
474 QSize myPreRecordingMinSize;
475 QSize myPreRecordingMaxSize;
477 SVTK_Recorder* myRecorder;
478 QtxAction* myStartAction;
479 QtxAction* myPlayAction;
480 QtxAction* myPauseAction;
481 QtxAction* myStopAction;
484 int myRecordingToolBar;
486 salomevtk::vtkPVAxesWidget* myAxesWidget;
487 Qtx::BackgroundData myBackground;
494 #pragma warning( default:4251 )