1 // Copyright (C) 2007-2016 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;
48 double centerX; // deprecated since OCCT 6.7.1
49 double centerY; // deprecated since OCCT 6.7.1
66 // graduated trihedron
101 bool gtDrawTickmarksX;
102 bool gtDrawTickmarksY;
103 bool gtDrawTickmarksZ;
104 int gtTickmarkLengthX;
105 int gtTickmarkLengthY;
106 int gtTickmarkLengthZ;
111 centerX( 0.0 ), centerY( 0.0 ),
112 projX( 0.0 ), projY( 0.0 ), projZ( 0.0 ),
114 atX( 0.0 ), atY( 0.0 ), atZ( 0.0 ),
115 eyeX( 0.0 ), eyeY( 0.0 ), eyeZ( 0.0 ),
116 scaleX( 0.0 ), scaleY( 0.0 ), scaleZ( 0.0 ),
120 gtIsVisible( false ),
121 gtDrawNameX( false ), gtDrawNameY( false ), gtDrawNameZ( false ),
122 gtNameX(), gtNameY(), gtNameZ(),
123 gtNameColorRX( 0 ), gtNameColorGX( 0 ), gtNameColorBX( 0 ),
124 gtNameColorRY( 0 ), gtNameColorGY( 0 ), gtNameColorBY( 0 ),
125 gtNameColorRZ( 0 ), gtNameColorGZ( 0 ), gtNameColorBZ( 0 ),
126 gtDrawValuesX( false ), gtDrawValuesY( false ), gtDrawValuesZ( false ),
127 gtNbValuesX( 0 ), gtNbValuesY( 0 ), gtNbValuesZ( 0 ),
128 gtOffsetX( 0 ), gtOffsetY( 0 ), gtOffsetZ( 0 ),
129 gtColorRX( 0 ), gtColorGX( 0 ), gtColorBX( 0 ),
130 gtColorRY( 0 ), gtColorGY( 0 ), gtColorBY( 0 ),
131 gtColorRZ( 0 ), gtColorGZ( 0 ), gtColorBZ( 0 ),
132 gtDrawTickmarksX( false ), gtDrawTickmarksY( false ), gtDrawTickmarksZ( false ),
133 gtTickmarkLengthX( 0 ), gtTickmarkLengthY( 0 ), gtTickmarkLengthZ( 0 ) {}
136 typedef QList<viewAspect> viewAspectList;
139 #pragma warning( disable:4251 )
142 class OCCVIEWER_EXPORT OCCViewer_ViewWindow : public SUIT_ViewWindow
147 enum { DumpId, FitAllId, FitRectId, FitSelectionId, ZoomId, PanId, GlobalPanId,
148 ChangeRotationPointId, RotationId,
149 FrontId, BackId, TopId, BottomId, LeftId, RightId, ClockWiseId, AntiClockWiseId,
150 ResetId, CloneId, ClippingId, MemId, RestoreId,
151 TrihedronShowId, AxialScaleId, GraduatedAxesId, AmbientId,
152 SwitchInteractionStyleId, SwitchZoomingStyleId,
153 SwitchPreselectionId, SwitchSelectionId,
154 MaximizedId, SynchronizeId, ReturnTo3dViewId,
155 OrthographicId, PerspectiveId, StereoId, RayTracingId, EnvTextureId, LightSourceId,
158 enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE,
159 PANGLOBAL, WINDOWFIT, FITALLVIEW, FITSELECTION, RESETVIEW,
160 FRONTVIEW, BACKVIEW, TOPVIEW, BOTTOMVIEW, LEFTVIEW, RIGHTVIEW,
161 CLOCKWISEVIEW, ANTICLOCKWISEVIEW, PROJECTION };
163 enum RotationPointType{ BBCENTER, SELECTED };
165 enum SketchingType { NoSketching, Rect, Polygon };
167 enum Mode2dType { No2dMode, XYPlane, XZPlane, YZPlane };
169 enum ProjectionType { Orthographic, Perspective, Stereo };
171 enum StereoType { QuadBuffer, Anaglyph, RowInterlaced, ColumnInterlaced, ChessBoard, SideBySide, OverUnder, SoftPageFlip, NumberOfModes };
173 enum AnaglyphFilter { RedCyan, YellowBlue, GreenMagenta };
175 enum FocusIODType { Absolute, Relative };
177 OCCViewer_ViewWindow(SUIT_Desktop* theDesktop, OCCViewer_Viewer* theModel);
178 virtual ~OCCViewer_ViewWindow();
180 virtual OCCViewer_ViewWindow* getView( const int ) const;
182 virtual OCCViewer_ViewPort3d* getViewPort();
184 virtual bool eventFilter(QObject* watched, QEvent* e);
186 virtual void performRestoring( const viewAspect&, bool = false );
188 virtual void initLayout();
190 virtual bool enableDrawMode( bool );
192 virtual void updateEnabledDrawMode();
194 virtual void setCuttingPlane( bool on, const double x = 0 , const double y = 0 , const double z = 0,
195 const double dx = 0, const double dy = 0, const double dz = 1);
197 virtual void setCuttingPlane( bool on, const gp_Pln thePln );
199 virtual bool isCuttingPlane();
201 virtual QString getVisualParameters();
202 virtual void setVisualParameters( const QString& parameters );
204 virtual void initSketchers();
205 virtual OCCViewer_ViewSketcher* getSketcher( const int );
207 virtual void activateSketching( int );
209 virtual int interactionStyle() const;
210 virtual void setInteractionStyle( const int );
212 virtual int zoomingStyle() const;
213 virtual void setZoomingStyle( const int );
215 virtual bool isPreselectionEnabled() const;
216 virtual void enablePreselection( bool );
217 virtual bool isSelectionEnabled() const;
218 virtual void enableSelection( bool );
220 virtual int projectionType() const;
221 virtual void setProjectionType( int );
223 virtual int stereoType() const;
224 virtual void setStereoType( const int );
226 virtual int anaglyphFilter() const;
227 virtual void setAnaglyphFilter( const int );
229 virtual void setStereographicFocus( const int, const double );
230 virtual int stereographicFocusType() const;
231 virtual double stereographicFocusValue() const;
233 virtual void setInterocularDistance( const int, const double );
234 virtual int interocularDistanceType() const;
235 virtual double interocularDistanceValue() const;
237 virtual bool isReverseStereo() const;
238 virtual void setReverseStereo( const bool );
240 virtual bool isVSync() const;
241 virtual void setVSync( const bool );
243 virtual bool isQuadBufferSupport() const;
244 virtual void setQuadBufferSupport( const bool );
246 virtual bool isAutomaticZoom() const;
247 virtual void setAutomaticZoom( const bool );
249 void setTransformEnabled( const OperationType, const bool );
250 bool transformEnabled( const OperationType ) const;
252 void set2dMode( Mode2dType );
253 Mode2dType get2dMode() const { return my2dMode; }
255 void setMaximized( bool, bool = true );
256 bool isMaximized() const;
257 void setReturnedTo3dView( bool = true );
259 void setSketcherStyle( bool enable );
260 bool isSketcherStyle() const;
262 virtual QColor backgroundColor() const; // obsolete
263 virtual void setBackgroundColor( const QColor& ); // obsolete
265 virtual void showStaticTrihedron( bool );
267 virtual Qtx::BackgroundData background() const;
268 virtual void setBackground( const Qtx::BackgroundData& );
270 virtual const viewAspectList& getViewAspects();
271 virtual void appendViewAspect( const viewAspect& );
272 virtual void updateViewAspects( const viewAspectList& );
273 virtual void clearViewAspects();
275 virtual SUIT_CameraProperties cameraProperties();
280 virtual void onFrontView();
281 virtual void onViewFitAll();
282 virtual void onBackView();
283 virtual void onClipping(bool on);
284 virtual void onTopView();
285 virtual void onBottomView();
286 virtual void onLeftView();
287 virtual void onRightView();
288 virtual void onClockWiseView();
289 virtual void onAntiClockWiseView();
290 virtual void onProjectionType( QAction* theAction );
291 virtual void onStereoType( bool activate );
292 virtual void onProjectionType();
293 virtual void onResetView();
294 virtual void onFitAll();
295 virtual void onFitSelection();
296 virtual void activateZoom();
297 virtual void activateWindowFit();
298 virtual void activateRotation();
299 virtual void activatePanning();
300 virtual void activateGlobalPanning();
301 virtual void onSetRotationPoint( bool on );
302 virtual void onCloneView();
303 virtual void onAxialScale();
304 virtual void onGraduatedAxes();
305 virtual void onAmbientToogle();
306 virtual void onMemorizeView();
307 virtual void onRestoreView();
308 virtual void onTrihedronShow(bool);
309 virtual void setRestoreFlag();
310 virtual void onSwitchInteractionStyle( bool on );
311 virtual void onSwitchZoomingStyle( bool on );
312 virtual void onSwitchPreselection( bool on );
313 virtual void onSwitchSelection( bool on );
314 virtual void onRayTracing();
315 virtual void onEnvTexture();
316 virtual void onLightSource();
317 virtual void onPanning();
319 virtual void activateSetRotationGravity();
320 virtual void activateSetRotationSelected( double theX, double theY, double theZ );
321 virtual void activateStartPointSelection( TopAbs_ShapeEnum );
322 virtual void updateGravityCoords();
324 virtual void showEvent( QShowEvent * );
325 virtual void hideEvent( QHideEvent * );
327 virtual void onMaximizedView();
328 virtual void returnTo3dView();
331 void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type);
332 void vpTransformationFinished(OCCViewer_ViewWindow::OperationType type);
333 void viewCloned( SUIT_ViewWindow* );
335 void Show( QShowEvent * );
336 void Hide( QHideEvent * );
337 void maximized( OCCViewer_ViewWindow*, bool );
338 void returnedTo3d( );
341 void synchronize( SUIT_ViewWindow* );
344 virtual QImage dumpView();
345 virtual bool dumpViewToFormat( const QImage&, const QString& fileName, const QString& format );
348 virtual QString filter() const;
350 bool isOpenGlStereoSupport() const;
352 /* Transformation selected but not started yet */
353 bool transformRequested() const;
354 bool setTransformRequested ( OperationType );
356 /* Transformation is selected and already started */
357 bool transformInProcess() const;
358 void setTransformInProcess( bool );
360 void vpMousePressEvent(QMouseEvent* theEvent);
361 void vpMouseReleaseEvent(QMouseEvent* theEvent);
362 void vpMouseMoveEvent(QMouseEvent* theEvent);
367 void createActions();
368 void createToolBar();
370 virtual OperationType getButtonState(QMouseEvent* theEvent, int theInteractionStyle);
372 viewAspect getViewParams() const;
374 bool computeGravityCenter( double& theX, double& theY, double& theZ );
376 bool computeGravityCenter1(gp_XYZ& gravityCenter);
378 void ProjAndPanToGravity(V3d_TypeOfOrientation CamOri);
380 virtual void onSketchingStarted();
381 virtual void onSketchingFinished();
383 virtual OCCViewer_ViewSketcher* createSketcher( int );
387 OCCViewer_ViewSketcher* mypSketcher;
388 QList<OCCViewer_ViewSketcher*> mySketchers;
392 OperationType myOperation;
393 OCCViewer_Viewer* myModel;
394 OCCViewer_ViewPort3d* myViewPort;
396 OCCViewer_CubeAxesDlg* myCubeAxesDlg;
398 RotationPointType myCurrPointType;
399 RotationPointType myPrevPointType;
400 gp_Pnt mySelectedPoint;
401 bool myRotationPointSelection;
410 bool myEventStarted; // set when transformation is in process
412 bool myDrawRect; // set when a rect is used for selection or magnify
413 bool myEnableDrawMode;
414 bool myDrawRectEnabled;
415 bool myPaintersRedrawing; // set to draw with external painters
416 bool IsSketcherStyle;
418 bool myAutomaticZoom;
424 OCCViewer_AxialScaleDlg* myScalingDlg;
426 OCCViewer_SetRotationPointDlg* mySetRotationPointDlg;
427 QtxAction* mySetRotationPointAction;
429 QtxRectRubberBand* myRectBand; //!< selection rectangle rubber band
431 bool mySelectionEnabled;
432 bool myPreselectionEnabled;
433 int myInteractionStyle;
435 typedef QMap<OperationType, bool> MapOfTransformStatus;
436 MapOfTransformStatus myStatus;
440 Handle(V3d_Plane) myReserveClipPlane;
442 viewAspectList myViewAspects;
447 #pragma warning( default:4251 )