]> SALOME platform Git repositories - modules/gui.git/blob - src/OCCViewer/OCCViewer_ViewWindow.h
Salome HOME
Issue 0022171:
[modules/gui.git] / src / OCCViewer / OCCViewer_ViewWindow.h
1 // Copyright (C) 2007-2013  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.
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
32 class QtxRectRubberBand;
33 class SUIT_Desktop;
34 class OCCViewer_ViewPort3d;
35 class OCCViewer_ViewSketcher;
36 class OCCViewer_ClippingDlg;
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;
48         double  centerY;
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
108 typedef QList<viewAspect> viewAspectList;
109
110 #ifdef WIN32
111 #pragma warning( disable:4251 )
112 #endif
113
114 class OCCVIEWER_EXPORT OCCViewer_ViewWindow : public SUIT_ViewWindow  
115 {
116   Q_OBJECT
117
118 public:
119   enum { DumpId, FitAllId, FitRectId, ZoomId, PanId, GlobalPanId,
120          ChangeRotationPointId, RotationId,
121          FrontId, BackId, TopId, BottomId, LeftId, RightId, ClockWiseId, AntiClockWiseId,
122          ResetId, CloneId, ClippingId, MemId, RestoreId,
123          TrihedronShowId, AxialScaleId, GraduatedAxesId, AmbientId,
124          SwitchInteractionStyleId, SwitchZoomingStyleId, 
125          SwitchPreselectionId, SwitchSelectionId,
126          MaximizedId, SynchronizeId, ReturnTo3dViewId,
127          UserId };
128
129   enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE, 
130                       PANGLOBAL, WINDOWFIT, FITALLVIEW, RESETVIEW,
131                       FRONTVIEW, BACKVIEW, TOPVIEW, BOTTOMVIEW, LEFTVIEW, RIGHTVIEW,
132                       CLOCKWISEVIEW, ANTICLOCKWISEVIEW };
133
134   enum RotationPointType{ GRAVITY, SELECTED };
135
136   enum SketchingType { NoSketching, Rect, Polygon };
137
138   enum Mode2dType { No2dMode, XYPlane, XZPlane, YZPlane};
139
140
141   OCCViewer_ViewWindow(SUIT_Desktop* theDesktop, OCCViewer_Viewer* theModel);
142   virtual ~OCCViewer_ViewWindow();
143
144   virtual OCCViewer_ViewWindow* getView( const int ) const;
145
146   virtual OCCViewer_ViewPort3d* getViewPort();
147
148   virtual bool eventFilter(QObject* watched, QEvent* e);
149
150   virtual void performRestoring( const viewAspect&, bool = false );
151   
152   virtual void initLayout();
153
154   virtual void updateEnabledDrawMode();
155
156   virtual void setCuttingPlane( bool on, const double x = 0 , const double y = 0 , const double z = 0,
157                                 const double dx = 0, const double dy = 0, const double dz = 1);
158
159   virtual void setCuttingPlane( bool on, const gp_Pln thePln );
160
161   virtual bool isCuttingPlane();
162
163   virtual QString   getVisualParameters();
164   virtual void      setVisualParameters( const QString& parameters );
165
166   virtual void                    initSketchers();
167   virtual OCCViewer_ViewSketcher* getSketcher( const int );
168
169   virtual void                    activateSketching( int );
170
171   virtual int                     interactionStyle() const;
172   virtual void                    setInteractionStyle( const int );
173  
174   virtual int                     zoomingStyle() const;
175   virtual void                    setZoomingStyle( const int );
176
177   virtual bool                    isPreselectionEnabled() const;
178   virtual void                    enablePreselection( bool );   
179   virtual bool                    isSelectionEnabled() const;
180   virtual void                    enableSelection( bool );
181  
182   void setTransformEnabled( const OperationType, const bool );
183   bool transformEnabled( const OperationType ) const;
184
185
186   void            set2dMode( Mode2dType );
187   Mode2dType      get2dMode() const { return my2dMode; }
188
189   void            setMaximized( bool, bool = true );
190   bool            isMaximized() const;
191   void            setReturnedTo3dView( bool = true );
192   
193   void            setSketcherStyle( bool enable );
194   bool            isSketcherStyle() const;
195
196   virtual QColor  backgroundColor() const;                      // obsolete
197   virtual void    setBackgroundColor( const QColor& );          // obsolete
198
199   virtual Qtx::BackgroundData  background() const;
200   virtual void                 setBackground( const Qtx::BackgroundData& );
201
202   virtual const   viewAspectList& getViewAspects();
203   virtual void                    appendViewAspect( const viewAspect& );
204   virtual void                    updateViewAspects( const viewAspectList& );
205   virtual void                    clearViewAspects();
206
207   virtual SUIT_CameraProperties   cameraProperties();
208
209 public slots:
210   virtual void onFrontView();
211   virtual void onViewFitAll();
212   virtual void onBackView();
213   virtual void onTopView();
214   virtual void onBottomView();
215   virtual void onLeftView();
216   virtual void onRightView();
217   virtual void onClockWiseView();
218   virtual void onAntiClockWiseView();
219   virtual void onResetView();
220   virtual void onFitAll();
221   virtual void activateZoom();
222   virtual void activateWindowFit();
223   virtual void activateRotation();
224   virtual void activatePanning();
225   virtual void activateGlobalPanning();
226   virtual void onSetRotationPoint( bool on );
227   virtual void onCloneView();
228   virtual void onClipping( bool on );
229   virtual void onAxialScale();
230   virtual void onGraduatedAxes();
231   virtual void onAmbientToogle();
232   virtual void onMemorizeView();
233   virtual void onRestoreView();
234   virtual void onTrihedronShow();
235   virtual void setRestoreFlag();
236   virtual void onSwitchInteractionStyle( bool on );
237   virtual void onSwitchZoomingStyle( bool on );
238   virtual void onSwitchPreselection( bool on );
239   virtual void onSwitchSelection( bool on );
240
241   virtual void activateSetRotationGravity();
242   virtual void activateSetRotationSelected( double theX, double theY, double theZ );
243   virtual void activateStartPointSelection();
244   virtual void updateGravityCoords();
245    
246   virtual void showEvent( QShowEvent * );
247   virtual void hideEvent( QHideEvent * );
248
249   virtual void onMaximizedView();
250   virtual void returnTo3dView();
251
252 signals:
253   void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type);
254   void vpTransformationFinished(OCCViewer_ViewWindow::OperationType type);
255   void viewCloned( SUIT_ViewWindow* );
256
257   void Show( QShowEvent * );
258   void Hide( QHideEvent * );
259   void maximized( OCCViewer_ViewWindow*, bool );
260   void returnedTo3d( );
261
262 protected slots:
263   void synchronize( SUIT_ViewWindow* );
264
265 public:
266   virtual QImage dumpView();
267   virtual bool   dumpViewToFormat( const QImage&, const QString& fileName, const QString& format );
268
269 protected:
270   virtual QString  filter() const;
271
272   /* Transformation selected but not started yet */
273   bool transformRequested() const;
274   bool setTransformRequested ( OperationType );
275
276   /* Transformation is selected and already started */
277   bool          transformInProcess() const;
278   void          setTransformInProcess( bool );
279
280   void vpMousePressEvent(QMouseEvent* theEvent);
281   void vpMouseReleaseEvent(QMouseEvent* theEvent);
282   void vpMouseMoveEvent(QMouseEvent* theEvent);
283
284   void resetState();
285   void drawRect();
286   void endDrawRect();
287
288   void createActions();
289   void createToolBar();
290  
291   virtual OperationType getButtonState(QMouseEvent* theEvent, int theInteractionStyle);
292
293   viewAspect getViewParams() const;
294
295   bool computeGravityCenter( double& theX, double& theY, double& theZ );
296
297   virtual void                          onSketchingStarted();
298   virtual void                          onSketchingFinished();
299
300   virtual OCCViewer_ViewSketcher*       createSketcher( int );
301
302   OCCViewer_ViewSketcher*               mypSketcher;
303   QList<OCCViewer_ViewSketcher*>        mySketchers;
304
305   int                                   myCurSketch;
306
307   OperationType         myOperation;
308   OCCViewer_Viewer*     myModel;
309   OCCViewer_ViewPort3d* myViewPort;
310
311   OCCViewer_CubeAxesDlg* myCubeAxesDlg;
312
313   RotationPointType     myCurrPointType;
314   RotationPointType     myPrevPointType;
315   gp_Pnt                mySelectedPoint;
316   bool                  myRotationPointSelection;
317
318   int                                   myRestoreFlag;
319
320   int                                   myStartX;
321   int                                   myStartY;
322   int                                   myCurrX;
323   int                                   myCurrY;
324
325   bool                  myEventStarted;       // set when transformation is in process 
326   bool                  myCursorIsHand;                 
327   bool                  myDrawRect;           // set when a rect is used for selection or magnify 
328   bool                  myEnableDrawMode;
329   bool                  myPaintersRedrawing;  // set to draw with external painters  
330   bool                  IsSketcherStyle;
331   bool                  myIsKeyFree;
332   
333   QCursor               myCursor;
334
335   double myCurScale;
336
337 private:
338   OCCViewer_ClippingDlg* myClippingDlg;
339   QtxAction* myClippingAction;
340
341   OCCViewer_AxialScaleDlg* myScalingDlg;
342
343   OCCViewer_SetRotationPointDlg* mySetRotationPointDlg;
344   QtxAction* mySetRotationPointAction;
345
346   QtxRectRubberBand* myRectBand; //!< selection rectangle rubber band
347
348   bool mySelectionEnabled;
349   bool myPreselectionEnabled;
350   int myInteractionStyle;
351
352   typedef QMap<OperationType, bool> MapOfTransformStatus;
353   MapOfTransformStatus myStatus;
354
355   Mode2dType my2dMode;
356
357   Handle(V3d_Plane) myReserveClippingPlane;
358
359   viewAspectList myViewAspects;
360 };
361
362 #ifdef WIN32
363 #pragma warning( default:4251 )
364 #endif
365
366 #endif