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