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, StereoId,
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, 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 void updateEnabledDrawMode();
191 virtual void setCuttingPlane( bool on, const double x = 0 , const double y = 0 , const double z = 0,
192 const double dx = 0, const double dy = 0, const double dz = 1);
194 virtual void setCuttingPlane( bool on, const gp_Pln thePln );
196 virtual bool isCuttingPlane();
198 virtual QString getVisualParameters();
199 virtual void setVisualParameters( const QString& parameters );
201 virtual void initSketchers();
202 virtual OCCViewer_ViewSketcher* getSketcher( const int );
204 virtual void activateSketching( int );
206 virtual int interactionStyle() const;
207 virtual void setInteractionStyle( const int );
209 virtual int zoomingStyle() const;
210 virtual void setZoomingStyle( const int );
212 virtual bool isPreselectionEnabled() const;
213 virtual void enablePreselection( bool );
214 virtual bool isSelectionEnabled() const;
215 virtual void enableSelection( bool );
217 virtual int projectionType() const;
218 virtual void setProjectionType( int );
220 virtual int stereoType() const;
221 virtual void setStereoType( const int );
223 virtual int anaglyphFilter() const;
224 virtual void setAnaglyphFilter( const int );
226 virtual void setStereographicFocus( const int, const double );
227 virtual int stereographicFocusType() const;
228 virtual double stereographicFocusValue() const;
230 virtual void setInterocularDistance( const int, const double );
231 virtual int interocularDistanceType() const;
232 virtual double interocularDistanceValue() const;
234 virtual bool isReverseStereo() const;
235 virtual void setReverseStereo( const bool );
237 virtual bool isVSync() const;
238 virtual void setVSync( const bool );
240 virtual bool isQuadBufferSupport() const;
241 virtual void setQuadBufferSupport( const bool );
243 void setTransformEnabled( const OperationType, const bool );
244 bool transformEnabled( const OperationType ) const;
246 void set2dMode( Mode2dType );
247 Mode2dType get2dMode() const { return my2dMode; }
249 void setMaximized( bool, bool = true );
250 bool isMaximized() const;
251 void setReturnedTo3dView( bool = true );
253 void setSketcherStyle( bool enable );
254 bool isSketcherStyle() const;
256 virtual QColor backgroundColor() const; // obsolete
257 virtual void setBackgroundColor( const QColor& ); // obsolete
259 virtual void showStaticTrihedron( bool );
261 virtual Qtx::BackgroundData background() const;
262 virtual void setBackground( const Qtx::BackgroundData& );
264 virtual const viewAspectList& getViewAspects();
265 virtual void appendViewAspect( const viewAspect& );
266 virtual void updateViewAspects( const viewAspectList& );
267 virtual void clearViewAspects();
269 virtual SUIT_CameraProperties cameraProperties();
272 virtual void onFrontView();
273 virtual void onViewFitAll();
274 virtual void onBackView();
275 virtual void onClipping(bool on);
276 virtual void onTopView();
277 virtual void onBottomView();
278 virtual void onLeftView();
279 virtual void onRightView();
280 virtual void onClockWiseView();
281 virtual void onAntiClockWiseView();
282 virtual void onProjectionType( QAction* theAction );
283 virtual void onStereoType( bool activate );
284 virtual void onProjectionType();
285 virtual void onResetView();
286 virtual void onFitAll();
287 virtual void onFitSelection();
288 virtual void activateZoom();
289 virtual void activateWindowFit();
290 virtual void activateRotation();
291 virtual void activatePanning();
292 virtual void activateGlobalPanning();
293 virtual void onSetRotationPoint( bool on );
294 virtual void onCloneView();
295 virtual void onAxialScale();
296 virtual void onGraduatedAxes();
297 virtual void onAmbientToogle();
298 virtual void onMemorizeView();
299 virtual void onRestoreView();
300 virtual void onTrihedronShow(bool);
301 virtual void setRestoreFlag();
302 virtual void onSwitchInteractionStyle( bool on );
303 virtual void onSwitchZoomingStyle( bool on );
304 virtual void onSwitchPreselection( bool on );
305 virtual void onSwitchSelection( bool on );
307 virtual void activateSetRotationGravity();
308 virtual void activateSetRotationSelected( double theX, double theY, double theZ );
309 virtual void activateStartPointSelection( TopAbs_ShapeEnum );
310 virtual void updateGravityCoords();
312 virtual void showEvent( QShowEvent * );
313 virtual void hideEvent( QHideEvent * );
315 virtual void onMaximizedView();
316 virtual void returnTo3dView();
319 void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type);
320 void vpTransformationFinished(OCCViewer_ViewWindow::OperationType type);
321 void viewCloned( SUIT_ViewWindow* );
323 void Show( QShowEvent * );
324 void Hide( QHideEvent * );
325 void maximized( OCCViewer_ViewWindow*, bool );
326 void returnedTo3d( );
329 void synchronize( SUIT_ViewWindow* );
332 virtual QImage dumpView();
333 virtual bool dumpViewToFormat( const QImage&, const QString& fileName, const QString& format );
336 virtual QString filter() const;
338 bool isOpenGlStereoSupport() const;
340 /* Transformation selected but not started yet */
341 bool transformRequested() const;
342 bool setTransformRequested ( OperationType );
344 /* Transformation is selected and already started */
345 bool transformInProcess() const;
346 void setTransformInProcess( bool );
348 void vpMousePressEvent(QMouseEvent* theEvent);
349 void vpMouseReleaseEvent(QMouseEvent* theEvent);
350 void vpMouseMoveEvent(QMouseEvent* theEvent);
356 void createActions();
357 void createToolBar();
359 virtual OperationType getButtonState(QMouseEvent* theEvent, int theInteractionStyle);
361 viewAspect getViewParams() const;
363 bool computeGravityCenter( double& theX, double& theY, double& theZ );
365 virtual void onSketchingStarted();
366 virtual void onSketchingFinished();
368 virtual OCCViewer_ViewSketcher* createSketcher( int );
372 OCCViewer_ViewSketcher* mypSketcher;
373 QList<OCCViewer_ViewSketcher*> mySketchers;
377 OperationType myOperation;
378 OCCViewer_Viewer* myModel;
379 OCCViewer_ViewPort3d* myViewPort;
381 OCCViewer_CubeAxesDlg* myCubeAxesDlg;
383 RotationPointType myCurrPointType;
384 RotationPointType myPrevPointType;
385 gp_Pnt mySelectedPoint;
386 bool myRotationPointSelection;
395 bool myEventStarted; // set when transformation is in process
397 bool myDrawRect; // set when a rect is used for selection or magnify
398 bool myEnableDrawMode;
399 bool myPaintersRedrawing; // set to draw with external painters
400 bool IsSketcherStyle;
408 OCCViewer_AxialScaleDlg* myScalingDlg;
410 OCCViewer_SetRotationPointDlg* mySetRotationPointDlg;
411 QtxAction* mySetRotationPointAction;
413 QtxRectRubberBand* myRectBand; //!< selection rectangle rubber band
415 bool mySelectionEnabled;
416 bool myPreselectionEnabled;
417 int myInteractionStyle;
419 typedef QMap<OperationType, bool> MapOfTransformStatus;
420 MapOfTransformStatus myStatus;
424 Handle(V3d_Plane) myReserveClipPlane;
426 viewAspectList myViewAspects;
430 #pragma warning( default:4251 )