1 // Copyright (C) 2007-2014 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, 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,
156 enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE,
157 PANGLOBAL, WINDOWFIT, FITALLVIEW, RESETVIEW,
158 FRONTVIEW, BACKVIEW, TOPVIEW, BOTTOMVIEW, LEFTVIEW, RIGHTVIEW,
159 CLOCKWISEVIEW, ANTICLOCKWISEVIEW };
161 enum RotationPointType{ GRAVITY, SELECTED };
163 enum SketchingType { NoSketching, Rect, Polygon };
165 enum Mode2dType { No2dMode, XYPlane, XZPlane, YZPlane};
168 OCCViewer_ViewWindow(SUIT_Desktop* theDesktop, OCCViewer_Viewer* theModel);
169 virtual ~OCCViewer_ViewWindow();
171 virtual OCCViewer_ViewWindow* getView( const int ) const;
173 virtual OCCViewer_ViewPort3d* getViewPort();
175 virtual bool eventFilter(QObject* watched, QEvent* e);
177 virtual void performRestoring( const viewAspect&, bool = false );
179 virtual void initLayout();
181 virtual void updateEnabledDrawMode();
183 virtual void setCuttingPlane( bool on, const double x = 0 , const double y = 0 , const double z = 0,
184 const double dx = 0, const double dy = 0, const double dz = 1);
186 virtual void setCuttingPlane( bool on, const gp_Pln thePln );
188 virtual bool isCuttingPlane();
190 virtual QString getVisualParameters();
191 virtual void setVisualParameters( const QString& parameters );
193 virtual void initSketchers();
194 virtual OCCViewer_ViewSketcher* getSketcher( const int );
196 virtual void activateSketching( int );
198 virtual int interactionStyle() const;
199 virtual void setInteractionStyle( const int );
201 virtual int zoomingStyle() const;
202 virtual void setZoomingStyle( const int );
204 virtual bool isPreselectionEnabled() const;
205 virtual void enablePreselection( bool );
206 virtual bool isSelectionEnabled() const;
207 virtual void enableSelection( bool );
209 void setTransformEnabled( const OperationType, const bool );
210 bool transformEnabled( const OperationType ) const;
213 void set2dMode( Mode2dType );
214 Mode2dType get2dMode() const { return my2dMode; }
216 void setMaximized( bool, bool = true );
217 bool isMaximized() const;
218 void setReturnedTo3dView( bool = true );
220 void setSketcherStyle( bool enable );
221 bool isSketcherStyle() const;
223 virtual QColor backgroundColor() const; // obsolete
224 virtual void setBackgroundColor( const QColor& ); // obsolete
226 virtual Qtx::BackgroundData background() const;
227 virtual void setBackground( const Qtx::BackgroundData& );
229 virtual const viewAspectList& getViewAspects();
230 virtual void appendViewAspect( const viewAspect& );
231 virtual void updateViewAspects( const viewAspectList& );
232 virtual void clearViewAspects();
234 virtual SUIT_CameraProperties cameraProperties();
237 virtual void onFrontView();
238 virtual void onViewFitAll();
239 virtual void onBackView();
240 virtual void onClipping(bool on);
241 virtual void onTopView();
242 virtual void onBottomView();
243 virtual void onLeftView();
244 virtual void onRightView();
245 virtual void onClockWiseView();
246 virtual void onAntiClockWiseView();
247 virtual void onResetView();
248 virtual void onFitAll();
249 virtual void activateZoom();
250 virtual void activateWindowFit();
251 virtual void activateRotation();
252 virtual void activatePanning();
253 virtual void activateGlobalPanning();
254 virtual void onSetRotationPoint( bool on );
255 virtual void onCloneView();
256 virtual void onAxialScale();
257 virtual void onGraduatedAxes();
258 virtual void onAmbientToogle();
259 virtual void onMemorizeView();
260 virtual void onRestoreView();
261 virtual void onTrihedronShow();
262 virtual void setRestoreFlag();
263 virtual void onSwitchInteractionStyle( bool on );
264 virtual void onSwitchZoomingStyle( bool on );
265 virtual void onSwitchPreselection( bool on );
266 virtual void onSwitchSelection( bool on );
268 virtual void activateSetRotationGravity();
269 virtual void activateSetRotationSelected( double theX, double theY, double theZ );
270 virtual void activateStartPointSelection( TopAbs_ShapeEnum );
271 virtual void updateGravityCoords();
273 virtual void showEvent( QShowEvent * );
274 virtual void hideEvent( QHideEvent * );
276 virtual void onMaximizedView();
277 virtual void returnTo3dView();
280 void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type);
281 void vpTransformationFinished(OCCViewer_ViewWindow::OperationType type);
282 void viewCloned( SUIT_ViewWindow* );
284 void Show( QShowEvent * );
285 void Hide( QHideEvent * );
286 void maximized( OCCViewer_ViewWindow*, bool );
287 void returnedTo3d( );
290 void synchronize( SUIT_ViewWindow* );
293 virtual QImage dumpView();
294 virtual bool dumpViewToFormat( const QImage&, const QString& fileName, const QString& format );
297 virtual QString filter() const;
299 /* Transformation selected but not started yet */
300 bool transformRequested() const;
301 bool setTransformRequested ( OperationType );
303 /* Transformation is selected and already started */
304 bool transformInProcess() const;
305 void setTransformInProcess( bool );
307 void vpMousePressEvent(QMouseEvent* theEvent);
308 void vpMouseReleaseEvent(QMouseEvent* theEvent);
309 void vpMouseMoveEvent(QMouseEvent* theEvent);
315 void createActions();
316 void createToolBar();
318 virtual OperationType getButtonState(QMouseEvent* theEvent, int theInteractionStyle);
320 viewAspect getViewParams() const;
322 bool computeGravityCenter( double& theX, double& theY, double& theZ );
324 virtual void onSketchingStarted();
325 virtual void onSketchingFinished();
327 virtual OCCViewer_ViewSketcher* createSketcher( int );
329 OCCViewer_ViewSketcher* mypSketcher;
330 QList<OCCViewer_ViewSketcher*> mySketchers;
334 OperationType myOperation;
335 OCCViewer_Viewer* myModel;
336 OCCViewer_ViewPort3d* myViewPort;
338 OCCViewer_CubeAxesDlg* myCubeAxesDlg;
340 RotationPointType myCurrPointType;
341 RotationPointType myPrevPointType;
342 gp_Pnt mySelectedPoint;
343 bool myRotationPointSelection;
352 bool myEventStarted; // set when transformation is in process
354 bool myDrawRect; // set when a rect is used for selection or magnify
355 bool myEnableDrawMode;
356 bool myPaintersRedrawing; // set to draw with external painters
357 bool IsSketcherStyle;
365 OCCViewer_AxialScaleDlg* myScalingDlg;
367 OCCViewer_SetRotationPointDlg* mySetRotationPointDlg;
368 QtxAction* mySetRotationPointAction;
370 QtxRectRubberBand* myRectBand; //!< selection rectangle rubber band
372 bool mySelectionEnabled;
373 bool myPreselectionEnabled;
374 int myInteractionStyle;
376 typedef QMap<OperationType, bool> MapOfTransformStatus;
377 MapOfTransformStatus myStatus;
381 Handle(V3d_Plane) myReserveClipPlane;
383 viewAspectList myViewAspects;
387 #pragma warning( default:4251 )