Salome HOME
Merge modifications for HYDRO project (origin/hydro/imps_2017 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 public slots:
280   virtual void onFrontView();
281   virtual void onViewFitAll();
282   virtual void onBackView();
283   virtual void onClipping(bool on);
284   virtual void onTopView();
285   virtual void onBottomView();
286   virtual void onLeftView();
287   virtual void onRightView();
288   virtual void onClockWiseView();
289   virtual void onAntiClockWiseView();
290   virtual void onProjectionType( QAction* theAction );
291   virtual void onStereoType( bool activate );
292   virtual void onProjectionType();
293   virtual void onResetView();
294   virtual void onFitAll();
295   virtual void onFitSelection();
296   virtual void activateZoom();
297   virtual void activateWindowFit();
298   virtual void activateRotation();
299   virtual void activatePanning();
300   virtual void activateGlobalPanning();
301   virtual void onSetRotationPoint( bool on );
302   virtual void onCloneView();
303   virtual void onAxialScale();
304   virtual void onGraduatedAxes();
305   virtual void onAmbientToogle();
306   virtual void onMemorizeView();
307   virtual void onRestoreView();
308   virtual void onTrihedronShow(bool);
309   virtual void setRestoreFlag();
310   virtual void onSwitchInteractionStyle( bool on );
311   virtual void onSwitchZoomingStyle( bool on );
312   virtual void onSwitchPreselection( bool on );
313   virtual void onSwitchSelection( bool on );
314   virtual void onRayTracing();
315   virtual void onEnvTexture();
316   virtual void onLightSource();
317   virtual void onPanning();
318
319   virtual void activateSetRotationGravity();
320   virtual void activateSetRotationSelected( double theX, double theY, double theZ );
321   virtual void activateStartPointSelection( TopAbs_ShapeEnum );
322   virtual void updateGravityCoords();
323    
324   virtual void showEvent( QShowEvent * );
325   virtual void hideEvent( QHideEvent * );
326
327   virtual void onMaximizedView();
328   virtual void returnTo3dView();
329
330 signals:
331   void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type);
332   void vpTransformationFinished(OCCViewer_ViewWindow::OperationType type);
333   void viewCloned( SUIT_ViewWindow* );
334
335   void Show( QShowEvent * );
336   void Hide( QHideEvent * );
337   void maximized( OCCViewer_ViewWindow*, bool );
338   void returnedTo3d( );
339
340 protected slots:
341   void synchronize( SUIT_ViewWindow* );
342
343 public:
344   virtual QImage dumpView();
345   virtual bool   dumpViewToFormat( const QImage&, const QString& fileName, const QString& format );
346
347 protected:
348   virtual QString  filter() const;
349
350   bool isOpenGlStereoSupport() const;
351
352   /* Transformation selected but not started yet */
353   bool transformRequested() const;
354   bool setTransformRequested ( OperationType );
355
356   /* Transformation is selected and already started */
357   bool          transformInProcess() const;
358   void          setTransformInProcess( bool );
359
360   void vpMousePressEvent(QMouseEvent* theEvent);
361   void vpMouseReleaseEvent(QMouseEvent* theEvent);
362   void vpMouseMoveEvent(QMouseEvent* theEvent);
363
364   void resetState();
365   void drawRect();
366   void endDrawRect();
367
368   void createActions();
369   void createToolBar();
370
371   virtual OperationType getButtonState(QMouseEvent* theEvent, int theInteractionStyle);
372
373   viewAspect getViewParams() const;
374
375   bool computeGravityCenter( double& theX, double& theY, double& theZ );
376
377   void projAndPanToGravity(V3d_TypeOfOrientation CamOri);
378
379   virtual void                          onSketchingStarted();
380   virtual void                          onSketchingFinished();
381
382   virtual OCCViewer_ViewSketcher*       createSketcher( int );
383
384   void                                  saveCursor();
385
386   OCCViewer_ViewSketcher*               mypSketcher;
387   QList<OCCViewer_ViewSketcher*>        mySketchers;
388
389   int                                   myCurSketch;
390
391   OperationType         myOperation;
392   OCCViewer_Viewer*     myModel;
393   OCCViewer_ViewPort3d* myViewPort;
394
395   OCCViewer_CubeAxesDlg* myCubeAxesDlg;
396
397   RotationPointType     myCurrPointType;
398   RotationPointType     myPrevPointType;
399   gp_Pnt                mySelectedPoint;
400   bool                  myRotationPointSelection;
401
402   int                                   myRestoreFlag;
403
404   int                                   myStartX;
405   int                                   myStartY;
406   int                                   myCurrX;
407   int                                   myCurrY;
408
409   bool                  myEventStarted;       // set when transformation is in process 
410   bool                  myCursorIsHand;                 
411   bool                  myDrawRect;           // set when a rect is used for selection or magnify 
412   bool                  myEnableDrawMode;
413   bool                  myDrawRectEnabled;
414   bool                  myPaintersRedrawing;  // set to draw with external painters  
415   bool                  IsSketcherStyle;
416   bool                  myIsKeyFree;
417   bool                  myAutomaticZoom;
418   QCursor               myCursor;
419
420   double myCurScale;
421
422 private:
423   OCCViewer_AxialScaleDlg* myScalingDlg;
424
425   OCCViewer_SetRotationPointDlg* mySetRotationPointDlg;
426   QtxAction* mySetRotationPointAction;
427
428   QtxRectRubberBand* myRectBand; //!< selection rectangle rubber band
429
430   bool mySelectionEnabled;
431   bool myPreselectionEnabled;
432   int myInteractionStyle;
433
434   typedef QMap<OperationType, bool> MapOfTransformStatus;
435   MapOfTransformStatus myStatus;
436
437   Mode2dType my2dMode;
438
439   Handle(V3d_Plane) myReserveClipPlane;
440
441   viewAspectList myViewAspects;
442   bool myPanningByBtn;
443 };
444
445 #ifdef WIN32
446 #pragma warning( default:4251 )
447 #endif
448
449 #endif