Salome HOME
dff660d7233df0ba2aa3ab9bc365aa9186917b33
[modules/gui.git] / src / OCCViewer / OCCViewer_ViewWindow.h
1 // Copyright (C) 2007-2015  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 { 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,
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{ GRAVITY, 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 void updateEnabledDrawMode();
190
191   virtual void setCuttingPlane( bool on, const double x = 0 , const double y = 0 , const double z = 0,
192                                 const double dx = 0, const double dy = 0, const double dz = 1);
193
194   virtual void setCuttingPlane( bool on, const gp_Pln thePln );
195
196   virtual bool isCuttingPlane();
197
198   virtual QString   getVisualParameters();
199   virtual void      setVisualParameters( const QString& parameters );
200
201   virtual void                    initSketchers();
202   virtual OCCViewer_ViewSketcher* getSketcher( const int );
203
204   virtual void                    activateSketching( int );
205
206   virtual int                     interactionStyle() const;
207   virtual void                    setInteractionStyle( const int );
208  
209   virtual int                     zoomingStyle() const;
210   virtual void                    setZoomingStyle( const int );
211
212   virtual bool                    isPreselectionEnabled() const;
213   virtual void                    enablePreselection( bool );   
214   virtual bool                    isSelectionEnabled() const;
215   virtual void                    enableSelection( bool );
216  
217   virtual int                     projectionType() const;
218   virtual void                    setProjectionType( int );
219
220   virtual int                     stereoType() const;
221   virtual void                    setStereoType( const int );
222
223   virtual int                     anaglyphFilter() const;
224   virtual void                    setAnaglyphFilter( const int );
225
226   virtual void                    setStereographicFocus( const int, const double );
227   virtual int                     stereographicFocusType() const;
228   virtual double                  stereographicFocusValue() const;
229
230   virtual void                    setInterocularDistance( const int, const double );
231   virtual int                     interocularDistanceType() const;
232   virtual double                  interocularDistanceValue() const;
233
234   virtual bool                    isReverseStereo() const;
235   virtual void                    setReverseStereo( const bool );
236
237   virtual bool                    isVSync() const;
238   virtual void                    setVSync( const bool );
239
240   virtual bool                    isQuadBufferSupport() const;
241   virtual void                    setQuadBufferSupport( const bool );
242
243   void setTransformEnabled( const OperationType, const bool );
244   bool transformEnabled( const OperationType ) const;
245
246   void            set2dMode( Mode2dType );
247   Mode2dType      get2dMode() const { return my2dMode; }
248
249   void            setMaximized( bool, bool = true );
250   bool            isMaximized() const;
251   void            setReturnedTo3dView( bool = true );
252   
253   void            setSketcherStyle( bool enable );
254   bool            isSketcherStyle() const;
255
256   virtual QColor  backgroundColor() const;                      // obsolete
257   virtual void    setBackgroundColor( const QColor& );          // obsolete
258
259   virtual void    showStaticTrihedron( bool );
260
261   virtual Qtx::BackgroundData  background() const;
262   virtual void                 setBackground( const Qtx::BackgroundData& );
263
264   virtual const   viewAspectList& getViewAspects();
265   virtual void                    appendViewAspect( const viewAspect& );
266   virtual void                    updateViewAspects( const viewAspectList& );
267   virtual void                    clearViewAspects();
268
269   virtual SUIT_CameraProperties   cameraProperties();
270
271 public slots:
272   virtual void onFrontView();
273   virtual void onViewFitAll();
274   virtual void onBackView();
275   virtual void onClipping(bool on);
276   virtual void onTopView();
277   virtual void onBottomView();
278   virtual void onLeftView();
279   virtual void onRightView();
280   virtual void onClockWiseView();
281   virtual void onAntiClockWiseView();
282   virtual void onProjectionType( QAction* theAction );
283   virtual void onStereoType( bool activate );
284   virtual void onProjectionType();
285   virtual void onResetView();
286   virtual void onFitAll();
287   virtual void onFitSelection();
288   virtual void activateZoom();
289   virtual void activateWindowFit();
290   virtual void activateRotation();
291   virtual void activatePanning();
292   virtual void activateGlobalPanning();
293   virtual void onSetRotationPoint( bool on );
294   virtual void onCloneView();
295   virtual void onAxialScale();
296   virtual void onGraduatedAxes();
297   virtual void onAmbientToogle();
298   virtual void onMemorizeView();
299   virtual void onRestoreView();
300   virtual void onTrihedronShow(bool);
301   virtual void setRestoreFlag();
302   virtual void onSwitchInteractionStyle( bool on );
303   virtual void onSwitchZoomingStyle( bool on );
304   virtual void onSwitchPreselection( bool on );
305   virtual void onSwitchSelection( bool on );
306
307   virtual void activateSetRotationGravity();
308   virtual void activateSetRotationSelected( double theX, double theY, double theZ );
309   virtual void activateStartPointSelection( TopAbs_ShapeEnum );
310   virtual void updateGravityCoords();
311    
312   virtual void showEvent( QShowEvent * );
313   virtual void hideEvent( QHideEvent * );
314
315   virtual void onMaximizedView();
316   virtual void returnTo3dView();
317
318 signals:
319   void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type);
320   void vpTransformationFinished(OCCViewer_ViewWindow::OperationType type);
321   void viewCloned( SUIT_ViewWindow* );
322
323   void Show( QShowEvent * );
324   void Hide( QHideEvent * );
325   void maximized( OCCViewer_ViewWindow*, bool );
326   void returnedTo3d( );
327
328 protected slots:
329   void synchronize( SUIT_ViewWindow* );
330
331 public:
332   virtual QImage dumpView();
333   virtual bool   dumpViewToFormat( const QImage&, const QString& fileName, const QString& format );
334
335 protected:
336   virtual QString  filter() const;
337
338   bool isOpenGlStereoSupport() const;
339
340   /* Transformation selected but not started yet */
341   bool transformRequested() const;
342   bool setTransformRequested ( OperationType );
343
344   /* Transformation is selected and already started */
345   bool          transformInProcess() const;
346   void          setTransformInProcess( bool );
347
348   void vpMousePressEvent(QMouseEvent* theEvent);
349   void vpMouseReleaseEvent(QMouseEvent* theEvent);
350   void vpMouseMoveEvent(QMouseEvent* theEvent);
351
352   void resetState();
353   void drawRect();
354   void endDrawRect();
355
356   void createActions();
357   void createToolBar();
358
359   virtual OperationType getButtonState(QMouseEvent* theEvent, int theInteractionStyle);
360
361   viewAspect getViewParams() const;
362
363   bool computeGravityCenter( double& theX, double& theY, double& theZ );
364
365   virtual void                          onSketchingStarted();
366   virtual void                          onSketchingFinished();
367
368   virtual OCCViewer_ViewSketcher*       createSketcher( int );
369
370   void                                  saveCursor();
371
372   OCCViewer_ViewSketcher*               mypSketcher;
373   QList<OCCViewer_ViewSketcher*>        mySketchers;
374
375   int                                   myCurSketch;
376
377   OperationType         myOperation;
378   OCCViewer_Viewer*     myModel;
379   OCCViewer_ViewPort3d* myViewPort;
380
381   OCCViewer_CubeAxesDlg* myCubeAxesDlg;
382
383   RotationPointType     myCurrPointType;
384   RotationPointType     myPrevPointType;
385   gp_Pnt                mySelectedPoint;
386   bool                  myRotationPointSelection;
387
388   int                                   myRestoreFlag;
389
390   int                                   myStartX;
391   int                                   myStartY;
392   int                                   myCurrX;
393   int                                   myCurrY;
394
395   bool                  myEventStarted;       // set when transformation is in process 
396   bool                  myCursorIsHand;                 
397   bool                  myDrawRect;           // set when a rect is used for selection or magnify 
398   bool                  myEnableDrawMode;
399   bool                  myPaintersRedrawing;  // set to draw with external painters  
400   bool                  IsSketcherStyle;
401   bool                  myIsKeyFree;
402   
403   QCursor               myCursor;
404
405   double myCurScale;
406
407 private:
408   OCCViewer_AxialScaleDlg* myScalingDlg;
409
410   OCCViewer_SetRotationPointDlg* mySetRotationPointDlg;
411   QtxAction* mySetRotationPointAction;
412
413   QtxRectRubberBand* myRectBand; //!< selection rectangle rubber band
414
415   bool mySelectionEnabled;
416   bool myPreselectionEnabled;
417   int myInteractionStyle;
418
419   typedef QMap<OperationType, bool> MapOfTransformStatus;
420   MapOfTransformStatus myStatus;
421
422   Mode2dType my2dMode;
423
424   Handle(V3d_Plane) myReserveClipPlane;
425
426   viewAspectList myViewAspects;
427 };
428
429 #ifdef WIN32
430 #pragma warning( default:4251 )
431 #endif
432
433 #endif