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