1 // Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 #ifndef OCCVIEWER_VIEWWINDOW_H
24 #define OCCVIEWER_VIEWWINDOW_H
26 #include "OCCViewer.h"
28 #include "SUIT_ViewWindow.h"
30 #include <V3d_Plane.hxx>
31 #include <TopAbs_ShapeEnum.hxx>
33 class QtxRectRubberBand;
35 class OCCViewer_ViewPort3d;
36 class OCCViewer_ViewSketcher;
37 class OCCViewer_AxialScaleDlg;
38 class OCCViewer_SetRotationPointDlg;
39 class OCCViewer_Viewer;
40 class OCCViewer_CubeAxesDlg;
47 double centerX; // deprecated since OCCT 6.7.1
48 double centerY; // deprecated since OCCT 6.7.1
65 // graduated trihedron
100 bool gtDrawTickmarksX;
101 bool gtDrawTickmarksY;
102 bool gtDrawTickmarksZ;
103 int gtTickmarkLengthX;
104 int gtTickmarkLengthY;
105 int gtTickmarkLengthZ;
110 centerX( 0.0 ), centerY( 0.0 ),
111 projX( 0.0 ), projY( 0.0 ), projZ( 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 ),
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 ) {}
135 typedef QList<viewAspect> viewAspectList;
138 #pragma warning( disable:4251 )
141 class OCCVIEWER_EXPORT OCCViewer_ViewWindow : public SUIT_ViewWindow
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,
157 enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE,
158 PANGLOBAL, WINDOWFIT, FITALLVIEW, FITSELECTION, RESETVIEW,
159 FRONTVIEW, BACKVIEW, TOPVIEW, BOTTOMVIEW, LEFTVIEW, RIGHTVIEW,
160 CLOCKWISEVIEW, ANTICLOCKWISEVIEW, PROJECTION };
162 enum RotationPointType{ GRAVITY, SELECTED };
164 enum SketchingType { NoSketching, Rect, Polygon };
166 enum Mode2dType { No2dMode, XYPlane, XZPlane, YZPlane };
168 enum ProjectionType { Orthographic, Perspective };
170 OCCViewer_ViewWindow(SUIT_Desktop* theDesktop, OCCViewer_Viewer* theModel);
171 virtual ~OCCViewer_ViewWindow();
173 virtual OCCViewer_ViewWindow* getView( const int ) const;
175 virtual OCCViewer_ViewPort3d* getViewPort();
177 virtual bool eventFilter(QObject* watched, QEvent* e);
179 virtual void performRestoring( const viewAspect&, bool = false );
181 virtual void initLayout();
183 virtual void updateEnabledDrawMode();
185 virtual void setCuttingPlane( bool on, const double x = 0 , const double y = 0 , const double z = 0,
186 const double dx = 0, const double dy = 0, const double dz = 1);
188 virtual void setCuttingPlane( bool on, const gp_Pln thePln );
190 virtual bool isCuttingPlane();
192 virtual QString getVisualParameters();
193 virtual void setVisualParameters( const QString& parameters );
195 virtual void initSketchers();
196 virtual OCCViewer_ViewSketcher* getSketcher( const int );
198 virtual void activateSketching( int );
200 virtual int interactionStyle() const;
201 virtual void setInteractionStyle( const int );
203 virtual int zoomingStyle() const;
204 virtual void setZoomingStyle( const int );
206 virtual bool isPreselectionEnabled() const;
207 virtual void enablePreselection( bool );
208 virtual bool isSelectionEnabled() const;
209 virtual void enableSelection( bool );
211 virtual int projectionType() const;
212 virtual void setProjectionType( int );
214 void setTransformEnabled( const OperationType, const bool );
215 bool transformEnabled( const OperationType ) const;
217 void set2dMode( Mode2dType );
218 Mode2dType get2dMode() const { return my2dMode; }
220 void setMaximized( bool, bool = true );
221 bool isMaximized() const;
222 void setReturnedTo3dView( bool = true );
224 void setSketcherStyle( bool enable );
225 bool isSketcherStyle() const;
227 virtual QColor backgroundColor() const; // obsolete
228 virtual void setBackgroundColor( const QColor& ); // obsolete
230 virtual void showStaticTrihedron( bool );
232 virtual Qtx::BackgroundData background() const;
233 virtual void setBackground( const Qtx::BackgroundData& );
235 virtual const viewAspectList& getViewAspects();
236 virtual void appendViewAspect( const viewAspect& );
237 virtual void updateViewAspects( const viewAspectList& );
238 virtual void clearViewAspects();
240 virtual SUIT_CameraProperties cameraProperties();
243 virtual void onFrontView();
244 virtual void onViewFitAll();
245 virtual void onBackView();
246 virtual void onClipping(bool on);
247 virtual void onTopView();
248 virtual void onBottomView();
249 virtual void onLeftView();
250 virtual void onRightView();
251 virtual void onClockWiseView();
252 virtual void onAntiClockWiseView();
253 virtual void onProjectionType();
254 virtual void onResetView();
255 virtual void onFitAll();
256 virtual void onFitSelection();
257 virtual void activateZoom();
258 virtual void activateWindowFit();
259 virtual void activateRotation();
260 virtual void activatePanning();
261 virtual void activateGlobalPanning();
262 virtual void onSetRotationPoint( bool on );
263 virtual void onCloneView();
264 virtual void onAxialScale();
265 virtual void onGraduatedAxes();
266 virtual void onAmbientToogle();
267 virtual void onMemorizeView();
268 virtual void onRestoreView();
269 virtual void onTrihedronShow(bool);
270 virtual void setRestoreFlag();
271 virtual void onSwitchInteractionStyle( bool on );
272 virtual void onSwitchZoomingStyle( bool on );
273 virtual void onSwitchPreselection( bool on );
274 virtual void onSwitchSelection( bool on );
276 virtual void activateSetRotationGravity();
277 virtual void activateSetRotationSelected( double theX, double theY, double theZ );
278 virtual void activateStartPointSelection( TopAbs_ShapeEnum );
279 virtual void updateGravityCoords();
281 virtual void showEvent( QShowEvent * );
282 virtual void hideEvent( QHideEvent * );
284 virtual void onMaximizedView();
285 virtual void returnTo3dView();
288 void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type);
289 void vpTransformationFinished(OCCViewer_ViewWindow::OperationType type);
290 void viewCloned( SUIT_ViewWindow* );
292 void Show( QShowEvent * );
293 void Hide( QHideEvent * );
294 void maximized( OCCViewer_ViewWindow*, bool );
295 void returnedTo3d( );
298 void synchronize( SUIT_ViewWindow* );
301 virtual QImage dumpView();
302 virtual bool dumpViewToFormat( const QImage&, const QString& fileName, const QString& format );
305 virtual QString filter() const;
307 /* Transformation selected but not started yet */
308 bool transformRequested() const;
309 bool setTransformRequested ( OperationType );
311 /* Transformation is selected and already started */
312 bool transformInProcess() const;
313 void setTransformInProcess( bool );
315 void vpMousePressEvent(QMouseEvent* theEvent);
316 void vpMouseReleaseEvent(QMouseEvent* theEvent);
317 void vpMouseMoveEvent(QMouseEvent* theEvent);
323 void createActions();
324 void createToolBar();
326 virtual OperationType getButtonState(QMouseEvent* theEvent, int theInteractionStyle);
328 viewAspect getViewParams() const;
330 bool computeGravityCenter( double& theX, double& theY, double& theZ );
332 virtual void onSketchingStarted();
333 virtual void onSketchingFinished();
335 virtual OCCViewer_ViewSketcher* createSketcher( int );
339 OCCViewer_ViewSketcher* mypSketcher;
340 QList<OCCViewer_ViewSketcher*> mySketchers;
344 OperationType myOperation;
345 OCCViewer_Viewer* myModel;
346 OCCViewer_ViewPort3d* myViewPort;
348 OCCViewer_CubeAxesDlg* myCubeAxesDlg;
350 RotationPointType myCurrPointType;
351 RotationPointType myPrevPointType;
352 gp_Pnt mySelectedPoint;
353 bool myRotationPointSelection;
362 bool myEventStarted; // set when transformation is in process
364 bool myDrawRect; // set when a rect is used for selection or magnify
365 bool myEnableDrawMode;
366 bool myPaintersRedrawing; // set to draw with external painters
367 bool IsSketcherStyle;
375 OCCViewer_AxialScaleDlg* myScalingDlg;
377 OCCViewer_SetRotationPointDlg* mySetRotationPointDlg;
378 QtxAction* mySetRotationPointAction;
380 QtxRectRubberBand* myRectBand; //!< selection rectangle rubber band
382 bool mySelectionEnabled;
383 bool myPreselectionEnabled;
384 int myInteractionStyle;
386 typedef QMap<OperationType, bool> MapOfTransformStatus;
387 MapOfTransformStatus myStatus;
391 Handle(V3d_Plane) myReserveClipPlane;
393 viewAspectList myViewAspects;
397 #pragma warning( default:4251 )