Salome HOME
Merge modifications for HYDRO project (origin/hydro/imps_2017_salome_83 branch)
[modules/gui.git] / src / OCCViewer / OCCViewer_ViewWindow.h
1 // Copyright (C) 2007-2016  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 OCCVIEWER_VIEWWINDOW_H
24 #define OCCVIEWER_VIEWWINDOW_H
25
26 #include "OCCViewer.h"
27 #include "Qtx.h"
28 #include "SUIT_ViewWindow.h"
29 #include <gp_Pnt.hxx>
30 #include <V3d_Plane.hxx>
31 #include <TopAbs_ShapeEnum.hxx>
32
33 class QtxRectRubberBand;
34 class SUIT_Desktop;
35 class OCCViewer_ViewPort3d;
36 class OCCViewer_ViewSketcher;
37 class OCCViewer_AxialScaleDlg;
38 class OCCViewer_SetRotationPointDlg;
39 class OCCViewer_Viewer;
40 class OCCViewer_CubeAxesDlg;
41 class QtxAction;
42
43 struct viewAspect
44 {
45 public:
46   double    scale;
47   double  centerX; // deprecated since OCCT 6.7.1
48   double  centerY; // deprecated since OCCT 6.7.1
49   double    projX;
50   double    projY;
51   double    projZ;
52   double    twist;
53   double      atX;
54   double      atY;
55   double      atZ;
56   double     eyeX;
57   double     eyeY;
58   double     eyeZ;
59   double   scaleX;
60   double   scaleY;
61   double   scaleZ;
62   QString    name;
63   bool     isVisible;
64   double   size;
65   // graduated trihedron
66   bool    gtIsVisible;
67   bool    gtDrawNameX;
68   bool    gtDrawNameY;
69   bool    gtDrawNameZ;
70   QString gtNameX;
71   QString gtNameY;
72   QString gtNameZ;
73   int     gtNameColorRX;
74   int     gtNameColorGX;
75   int     gtNameColorBX;
76   int     gtNameColorRY;
77   int     gtNameColorGY;
78   int     gtNameColorBY;
79   int     gtNameColorRZ;
80   int     gtNameColorGZ;
81   int     gtNameColorBZ;
82   bool    gtDrawValuesX;
83   bool    gtDrawValuesY;
84   bool    gtDrawValuesZ;
85   int     gtNbValuesX;
86   int     gtNbValuesY;
87   int     gtNbValuesZ;
88   int     gtOffsetX;
89   int     gtOffsetY;
90   int     gtOffsetZ;
91   int     gtColorRX;
92   int     gtColorGX;
93   int     gtColorBX;
94   int     gtColorRY;
95   int     gtColorGY;
96   int     gtColorBY;
97   int     gtColorRZ;
98   int     gtColorGZ;
99   int     gtColorBZ;
100   bool    gtDrawTickmarksX;
101   bool    gtDrawTickmarksY;
102   bool    gtDrawTickmarksZ;
103   int     gtTickmarkLengthX;
104   int     gtTickmarkLengthY;
105   int     gtTickmarkLengthZ;
106
107 public:
108   viewAspect()
109   : scale( 0.0 ),
110     centerX( 0.0 ), centerY( 0.0 ),
111     projX( 0.0 ), projY( 0.0 ), projZ( 0.0 ),
112     twist( 0.0 ),
113     atX( 0.0 ), atY( 0.0 ), atZ( 0.0 ),
114     eyeX( 0.0 ), eyeY( 0.0 ), eyeZ( 0.0 ),
115     scaleX( 0.0 ), scaleY( 0.0 ), scaleZ( 0.0 ),
116     name(),
117     isVisible( false ),
118     size( 0.0 ),
119     gtIsVisible( false ),
120     gtDrawNameX( false ), gtDrawNameY( false ), gtDrawNameZ( false ),
121     gtNameX(), gtNameY(), gtNameZ(), 
122     gtNameColorRX( 0 ), gtNameColorGX( 0 ), gtNameColorBX( 0 ),
123     gtNameColorRY( 0 ), gtNameColorGY( 0 ), gtNameColorBY( 0 ),
124     gtNameColorRZ( 0 ), gtNameColorGZ( 0 ), gtNameColorBZ( 0 ),
125     gtDrawValuesX( false ), gtDrawValuesY( false ), gtDrawValuesZ( false ),
126     gtNbValuesX( 0 ), gtNbValuesY( 0 ), gtNbValuesZ( 0 ),
127     gtOffsetX( 0 ), gtOffsetY( 0 ), gtOffsetZ( 0 ),
128     gtColorRX( 0 ), gtColorGX( 0 ), gtColorBX( 0 ),
129     gtColorRY( 0 ), gtColorGY( 0 ), gtColorBY( 0 ),
130     gtColorRZ( 0 ), gtColorGZ( 0 ), gtColorBZ( 0 ),
131     gtDrawTickmarksX( false ), gtDrawTickmarksY( false ), gtDrawTickmarksZ( false ),
132     gtTickmarkLengthX( 0 ), gtTickmarkLengthY( 0 ), gtTickmarkLengthZ( 0 ) {}
133 };
134
135 typedef QList<viewAspect> viewAspectList;
136
137 #ifdef WIN32
138 #pragma warning( disable:4251 )
139 #endif
140
141 class OCCVIEWER_EXPORT OCCViewer_ViewWindow : public SUIT_ViewWindow  
142 {
143   Q_OBJECT
144
145 public:
146   enum ActionId { DumpId, FitAllId, FitRectId, FitSelectionId, ZoomId, PanId, GlobalPanId,
147          ChangeRotationPointId, RotationId,
148          FrontId, BackId, TopId, BottomId, LeftId, RightId, ClockWiseId, AntiClockWiseId,
149          ResetId, CloneId, ClippingId, MemId, RestoreId,
150          TrihedronShowId, AxialScaleId, GraduatedAxesId, AmbientId,
151          SwitchInteractionStyleId, SwitchZoomingStyleId, 
152          SwitchPreselectionId, SwitchSelectionId,
153          MaximizedId, SynchronizeId, ReturnTo3dViewId,
154          OrthographicId, PerspectiveId, StereoId, RayTracingId, EnvTextureId, LightSourceId,
155          UserId };
156
157   enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE, 
158                       PANGLOBAL, WINDOWFIT, FITALLVIEW, FITSELECTION, RESETVIEW,
159                       FRONTVIEW, BACKVIEW, TOPVIEW, BOTTOMVIEW, LEFTVIEW, RIGHTVIEW,
160                       CLOCKWISEVIEW, ANTICLOCKWISEVIEW, PROJECTION };
161
162   enum RotationPointType{ BBCENTER, SELECTED };
163
164   enum SketchingType { NoSketching, Rect, Polygon };
165
166   enum Mode2dType { No2dMode, XYPlane, XZPlane, YZPlane };
167
168   enum ProjectionType { Orthographic, Perspective, Stereo };
169   
170   enum StereoType { QuadBuffer, Anaglyph, RowInterlaced, ColumnInterlaced, ChessBoard, SideBySide, OverUnder, SoftPageFlip, NumberOfModes };
171
172   enum AnaglyphFilter { RedCyan, YellowBlue, GreenMagenta };
173
174   enum FocusIODType { Absolute, Relative };
175
176   OCCViewer_ViewWindow(SUIT_Desktop* theDesktop, OCCViewer_Viewer* theModel);
177   virtual ~OCCViewer_ViewWindow();
178
179   virtual OCCViewer_ViewWindow* getView( const int ) const;
180
181   virtual OCCViewer_ViewPort3d* getViewPort();
182
183   virtual bool eventFilter(QObject* watched, QEvent* e);
184
185   virtual void performRestoring( const viewAspect&, bool = false );
186   
187   virtual void initLayout();
188
189   virtual bool enableDrawMode( bool );
190
191   virtual void updateEnabledDrawMode();
192
193   virtual void setCuttingPlane( bool on, const double x = 0 , const double y = 0 , const double z = 0,
194                                 const double dx = 0, const double dy = 0, const double dz = 1);
195
196   virtual void setCuttingPlane( bool on, const gp_Pln thePln );
197
198   virtual bool isCuttingPlane();
199
200   virtual QString   getVisualParameters();
201   virtual void      setVisualParameters( const QString& parameters );
202
203   virtual void                    initSketchers();
204   virtual OCCViewer_ViewSketcher* getSketcher( const int );
205
206   virtual void                    activateSketching( int );
207
208   virtual int                     interactionStyle() const;
209   virtual void                    setInteractionStyle( const int );
210  
211   virtual int                     zoomingStyle() const;
212   virtual void                    setZoomingStyle( const int );
213
214   virtual bool                    isPreselectionEnabled() const;
215   virtual void                    enablePreselection( bool );   
216   virtual bool                    isSelectionEnabled() const;
217   virtual void                    enableSelection( bool );
218  
219   virtual int                     projectionType() const;
220   virtual void                    setProjectionType( int );
221
222   virtual int                     stereoType() const;
223   virtual void                    setStereoType( const int );
224
225   virtual int                     anaglyphFilter() const;
226   virtual void                    setAnaglyphFilter( const int );
227
228   virtual void                    setStereographicFocus( const int, const double );
229   virtual int                     stereographicFocusType() const;
230   virtual double                  stereographicFocusValue() const;
231
232   virtual void                    setInterocularDistance( const int, const double );
233   virtual int                     interocularDistanceType() const;
234   virtual double                  interocularDistanceValue() const;
235
236   virtual bool                    isReverseStereo() const;
237   virtual void                    setReverseStereo( const bool );
238
239   virtual bool                    isVSync() const;
240   virtual void                    setVSync( const bool );
241
242   virtual bool                    isQuadBufferSupport() const;
243   virtual void                    setQuadBufferSupport( const bool );
244
245   virtual bool                    isAutomaticZoom() const;
246   virtual void                    setAutomaticZoom( const bool );
247
248   void setTransformEnabled( const OperationType, const bool );
249   bool transformEnabled( const OperationType ) const;
250
251   void            set2dMode( Mode2dType );
252   Mode2dType      get2dMode() const { return my2dMode; }
253
254   void            setMaximized( bool, bool = true );
255   bool            isMaximized() const;
256   void            setReturnedTo3dView( bool = true );
257   
258   void            setSketcherStyle( bool enable );
259   bool            isSketcherStyle() const;
260
261   virtual QColor  backgroundColor() const;                      // obsolete
262   virtual void    setBackgroundColor( const QColor& );          // obsolete
263
264   virtual void    showStaticTrihedron( bool );
265
266   virtual Qtx::BackgroundData  background() const;
267   virtual void                 setBackground( const Qtx::BackgroundData& );
268
269   virtual const   viewAspectList& getViewAspects();
270   virtual void                    appendViewAspect( const viewAspect& );
271   virtual void                    updateViewAspects( const viewAspectList& );
272   virtual void                    clearViewAspects();
273
274   virtual SUIT_CameraProperties   cameraProperties();
275
276   bool isActionVisible( ActionId theId ) const;
277   void setActionVisible( ActionId theId, bool isVisible );
278
279   void resetState();
280
281 public slots:
282   virtual void onFrontView();
283   virtual void onViewFitAll();
284   virtual void onBackView();
285   virtual void onClipping(bool on);
286   virtual void onTopView();
287   virtual void onBottomView();
288   virtual void onLeftView();
289   virtual void onRightView();
290   virtual void onClockWiseView();
291   virtual void onAntiClockWiseView();
292   virtual void onProjectionType( QAction* theAction );
293   virtual void onStereoType( bool activate );
294   virtual void onProjectionType();
295   virtual void onResetView();
296   virtual void onFitAll();
297   virtual void onFitSelection();
298   virtual void activateZoom();
299   virtual void activateWindowFit();
300   virtual void activateRotation();
301   virtual void activatePanning();
302   virtual void activateGlobalPanning();
303   virtual void onSetRotationPoint( bool on );
304   virtual void onCloneView();
305   virtual void onAxialScale();
306   virtual void onGraduatedAxes();
307   virtual void onAmbientToogle();
308   virtual void onMemorizeView();
309   virtual void onRestoreView();
310   virtual void onTrihedronShow(bool);
311   virtual void setRestoreFlag();
312   virtual void onSwitchInteractionStyle( bool on );
313   virtual void onSwitchZoomingStyle( bool on );
314   virtual void onSwitchPreselection( bool on );
315   virtual void onSwitchSelection( bool on );
316   virtual void onRayTracing();
317   virtual void onEnvTexture();
318   virtual void onLightSource();
319   virtual void onPanning();
320
321   virtual void activateSetRotationGravity();
322   virtual void activateSetRotationSelected( double theX, double theY, double theZ );
323   virtual void activateStartPointSelection( TopAbs_ShapeEnum );
324   virtual void updateGravityCoords();
325    
326   virtual void showEvent( QShowEvent * );
327   virtual void hideEvent( QHideEvent * );
328
329   virtual void onMaximizedView();
330   virtual void returnTo3dView();
331
332 signals:
333   void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type);
334   void vpTransformationFinished(OCCViewer_ViewWindow::OperationType type);
335   void viewCloned( SUIT_ViewWindow* );
336
337   void Show( QShowEvent * );
338   void Hide( QHideEvent * );
339   void maximized( OCCViewer_ViewWindow*, bool );
340   void returnedTo3d( );
341
342 protected slots:
343   void synchronize( SUIT_ViewWindow* );
344
345 public:
346   virtual QImage dumpView();
347   virtual bool   dumpViewToFormat( const QImage&, const QString& fileName, const QString& format );
348
349 protected:
350   virtual QString  filter() const;
351
352   bool isOpenGlStereoSupport() const;
353
354   /* Transformation selected but not started yet */
355   bool transformRequested() const;
356   bool setTransformRequested ( OperationType );
357
358   /* Transformation is selected and already started */
359   bool          transformInProcess() const;
360   void          setTransformInProcess( bool );
361
362   void vpMousePressEvent(QMouseEvent* theEvent);
363   void vpMouseReleaseEvent(QMouseEvent* theEvent);
364   void vpMouseMoveEvent(QMouseEvent* theEvent);
365
366   void drawRect();
367   void endDrawRect();
368
369   void createActions();
370   void createToolBar();
371
372   virtual OperationType getButtonState(QMouseEvent* theEvent, int theInteractionStyle);
373
374   viewAspect getViewParams() const;
375
376   bool computeGravityCenter( double& theX, double& theY, double& theZ );
377
378   void projAndPanToGravity(V3d_TypeOfOrientation CamOri);
379
380   virtual void                          onSketchingStarted();
381   virtual void                          onSketchingFinished();
382
383   virtual OCCViewer_ViewSketcher*       createSketcher( int );
384
385   void                                  saveCursor();
386
387   OCCViewer_ViewSketcher*               mypSketcher;
388   QList<OCCViewer_ViewSketcher*>        mySketchers;
389
390   int                                   myCurSketch;
391
392   OperationType         myOperation;
393   OCCViewer_Viewer*     myModel;
394   OCCViewer_ViewPort3d* myViewPort;
395
396   OCCViewer_CubeAxesDlg* myCubeAxesDlg;
397
398   RotationPointType     myCurrPointType;
399   RotationPointType     myPrevPointType;
400   gp_Pnt                mySelectedPoint;
401   bool                  myRotationPointSelection;
402
403   int                                   myRestoreFlag;
404
405   int                                   myStartX;
406   int                                   myStartY;
407   int                                   myCurrX;
408   int                                   myCurrY;
409
410   bool                  myEventStarted;       // set when transformation is in process 
411   bool                  myCursorIsHand;                 
412   bool                  myDrawRect;           // set when a rect is used for selection or magnify 
413   bool                  myEnableDrawMode;
414   bool                  myDrawRectEnabled;
415   bool                  myPaintersRedrawing;  // set to draw with external painters  
416   bool                  IsSketcherStyle;
417   bool                  myIsKeyFree;
418   bool                  myAutomaticZoom;
419   QCursor               myCursor;
420
421   double myCurScale;
422
423 private:
424   OCCViewer_AxialScaleDlg* myScalingDlg;
425
426   OCCViewer_SetRotationPointDlg* mySetRotationPointDlg;
427   QtxAction* mySetRotationPointAction;
428
429   QtxRectRubberBand* myRectBand; //!< selection rectangle rubber band
430
431   bool mySelectionEnabled;
432   bool myPreselectionEnabled;
433   int myInteractionStyle;
434
435   typedef QMap<OperationType, bool> MapOfTransformStatus;
436   MapOfTransformStatus myStatus;
437
438   Mode2dType my2dMode;
439
440   Handle(V3d_Plane) myReserveClipPlane;
441
442   viewAspectList myViewAspects;
443   bool myPanningByBtn;
444 };
445
446 #ifdef WIN32
447 #pragma warning( default:4251 )
448 #endif
449
450 #endif