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;
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 ActionId { 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, StereoId, RayTracingId, EnvTextureId, LightSourceId,
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{ BBCENTER, SELECTED };
164 enum SketchingType { NoSketching, Rect, Polygon };
166 enum Mode2dType { No2dMode, XYPlane, XZPlane, YZPlane };
168 enum ProjectionType { Orthographic, Perspective, Stereo };
170 enum StereoType { QuadBuffer, Anaglyph, RowInterlaced, ColumnInterlaced, ChessBoard, SideBySide, OverUnder, SoftPageFlip, NumberOfModes };
172 enum AnaglyphFilter { RedCyan, YellowBlue, GreenMagenta };
174 enum FocusIODType { Absolute, Relative };
176 OCCViewer_ViewWindow(SUIT_Desktop* theDesktop, OCCViewer_Viewer* theModel);
177 virtual ~OCCViewer_ViewWindow();
179 virtual OCCViewer_ViewWindow* getView( const int ) const;
181 virtual OCCViewer_ViewPort3d* getViewPort();
183 virtual bool eventFilter(QObject* watched, QEvent* e);
185 virtual void performRestoring( const viewAspect&, bool = false );
187 virtual void initLayout();
189 virtual bool enableDrawMode( bool );
191 virtual void updateEnabledDrawMode();
193 virtual void setCuttingPlane( bool on, const double x = 0 , const double y = 0 , const double z = 0,
194 const double dx = 0, const double dy = 0, const double dz = 1);
196 virtual void setCuttingPlane( bool on, const gp_Pln thePln );
198 virtual bool isCuttingPlane();
200 virtual QString getVisualParameters();
201 virtual void setVisualParameters( const QString& parameters );
203 virtual void initSketchers();
204 virtual OCCViewer_ViewSketcher* getSketcher( const int );
206 virtual void activateSketching( int );
208 virtual int interactionStyle() const;
209 virtual void setInteractionStyle( const int );
211 virtual int zoomingStyle() const;
212 virtual void setZoomingStyle( const int );
214 virtual bool isPreselectionEnabled() const;
215 virtual void enablePreselection( bool );
216 virtual bool isSelectionEnabled() const;
217 virtual void enableSelection( bool );
219 virtual int projectionType() const;
220 virtual void setProjectionType( int );
222 virtual int stereoType() const;
223 virtual void setStereoType( const int );
225 virtual int anaglyphFilter() const;
226 virtual void setAnaglyphFilter( const int );
228 virtual void setStereographicFocus( const int, const double );
229 virtual int stereographicFocusType() const;
230 virtual double stereographicFocusValue() const;
232 virtual void setInterocularDistance( const int, const double );
233 virtual int interocularDistanceType() const;
234 virtual double interocularDistanceValue() const;
236 virtual bool isReverseStereo() const;
237 virtual void setReverseStereo( const bool );
239 virtual bool isVSync() const;
240 virtual void setVSync( const bool );
242 virtual bool isQuadBufferSupport() const;
243 virtual void setQuadBufferSupport( const bool );
245 virtual bool isAutomaticZoom() const;
246 virtual void setAutomaticZoom( const bool );
248 void setTransformEnabled( const OperationType, const bool );
249 bool transformEnabled( const OperationType ) const;
251 void set2dMode( Mode2dType );
252 Mode2dType get2dMode() const { return my2dMode; }
254 void setMaximized( bool, bool = true );
255 bool isMaximized() const;
256 void setReturnedTo3dView( bool = true );
258 void setSketcherStyle( bool enable );
259 bool isSketcherStyle() const;
261 virtual QColor backgroundColor() const; // obsolete
262 virtual void setBackgroundColor( const QColor& ); // obsolete
264 virtual void showStaticTrihedron( bool );
266 virtual Qtx::BackgroundData background() const;
267 virtual void setBackground( const Qtx::BackgroundData& );
269 virtual const viewAspectList& getViewAspects();
270 virtual void appendViewAspect( const viewAspect& );
271 virtual void updateViewAspects( const viewAspectList& );
272 virtual void clearViewAspects();
274 virtual SUIT_CameraProperties cameraProperties();
276 bool isActionVisible( ActionId theId ) const;
277 void setActionVisible( ActionId theId, bool isVisible );
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);
368 void createActions();
369 void createToolBar();
371 virtual OperationType getButtonState(QMouseEvent* theEvent, int theInteractionStyle);
373 viewAspect getViewParams() const;
375 bool computeGravityCenter( double& theX, double& theY, double& theZ );
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 )