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();
278 virtual void onFrontView();
279 virtual void onViewFitAll();
280 virtual void onBackView();
281 virtual void onClipping(bool on);
282 virtual void onTopView();
283 virtual void onBottomView();
284 virtual void onLeftView();
285 virtual void onRightView();
286 virtual void onClockWiseView();
287 virtual void onAntiClockWiseView();
288 virtual void onProjectionType( QAction* theAction );
289 virtual void onStereoType( bool activate );
290 virtual void onProjectionType();
291 virtual void onResetView();
292 virtual void onFitAll();
293 virtual void onFitSelection();
294 virtual void activateZoom();
295 virtual void activateWindowFit();
296 virtual void activateRotation();
297 virtual void activatePanning();
298 virtual void activateGlobalPanning();
299 virtual void onSetRotationPoint( bool on );
300 virtual void onCloneView();
301 virtual void onAxialScale();
302 virtual void onGraduatedAxes();
303 virtual void onAmbientToogle();
304 virtual void onMemorizeView();
305 virtual void onRestoreView();
306 virtual void onTrihedronShow(bool);
307 virtual void setRestoreFlag();
308 virtual void onSwitchInteractionStyle( bool on );
309 virtual void onSwitchZoomingStyle( bool on );
310 virtual void onSwitchPreselection( bool on );
311 virtual void onSwitchSelection( bool on );
312 virtual void onRayTracing();
313 virtual void onEnvTexture();
314 virtual void onLightSource();
315 virtual void onPanning();
317 virtual void activateSetRotationGravity();
318 virtual void activateSetRotationSelected( double theX, double theY, double theZ );
319 virtual void activateStartPointSelection( TopAbs_ShapeEnum );
320 virtual void updateGravityCoords();
322 virtual void showEvent( QShowEvent * );
323 virtual void hideEvent( QHideEvent * );
325 virtual void onMaximizedView();
326 virtual void returnTo3dView();
329 void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type);
330 void vpTransformationFinished(OCCViewer_ViewWindow::OperationType type);
331 void viewCloned( SUIT_ViewWindow* );
333 void Show( QShowEvent * );
334 void Hide( QHideEvent * );
335 void maximized( OCCViewer_ViewWindow*, bool );
336 void returnedTo3d( );
339 void synchronize( SUIT_ViewWindow* );
342 virtual QImage dumpView();
343 virtual bool dumpViewToFormat( const QImage&, const QString& fileName, const QString& format );
346 virtual QString filter() const;
348 bool isOpenGlStereoSupport() const;
350 /* Transformation selected but not started yet */
351 bool transformRequested() const;
352 bool setTransformRequested ( OperationType );
354 /* Transformation is selected and already started */
355 bool transformInProcess() const;
356 void setTransformInProcess( bool );
358 void vpMousePressEvent(QMouseEvent* theEvent);
359 void vpMouseReleaseEvent(QMouseEvent* theEvent);
360 void vpMouseMoveEvent(QMouseEvent* theEvent);
366 void createActions();
367 void createToolBar();
369 virtual OperationType getButtonState(QMouseEvent* theEvent, int theInteractionStyle);
371 viewAspect getViewParams() const;
373 bool computeGravityCenter( double& theX, double& theY, double& theZ );
375 bool computeGravityCenter1(gp_XYZ& gravityCenter);
377 void ProjAndPanToGravity(V3d_TypeOfOrientation CamOri);
379 virtual void onSketchingStarted();
380 virtual void onSketchingFinished();
382 virtual OCCViewer_ViewSketcher* createSketcher( int );
386 OCCViewer_ViewSketcher* mypSketcher;
387 QList<OCCViewer_ViewSketcher*> mySketchers;
391 OperationType myOperation;
392 OCCViewer_Viewer* myModel;
393 OCCViewer_ViewPort3d* myViewPort;
395 OCCViewer_CubeAxesDlg* myCubeAxesDlg;
397 RotationPointType myCurrPointType;
398 RotationPointType myPrevPointType;
399 gp_Pnt mySelectedPoint;
400 bool myRotationPointSelection;
409 bool myEventStarted; // set when transformation is in process
411 bool myDrawRect; // set when a rect is used for selection or magnify
412 bool myEnableDrawMode;
413 bool myDrawRectEnabled;
414 bool myPaintersRedrawing; // set to draw with external painters
415 bool IsSketcherStyle;
417 bool myAutomaticZoom;
423 OCCViewer_AxialScaleDlg* myScalingDlg;
425 OCCViewer_SetRotationPointDlg* mySetRotationPointDlg;
426 QtxAction* mySetRotationPointAction;
428 QtxRectRubberBand* myRectBand; //!< selection rectangle rubber band
430 bool mySelectionEnabled;
431 bool myPreselectionEnabled;
432 int myInteractionStyle;
434 typedef QMap<OperationType, bool> MapOfTransformStatus;
435 MapOfTransformStatus myStatus;
439 Handle(V3d_Plane) myReserveClipPlane;
441 viewAspectList myViewAspects;
446 #pragma warning( default:4251 )