X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSVTK%2FSVTK_InteractorStyle.h;h=dd514356d46d202f22001766710013a3427769b1;hb=e6caa123c65e3c4a3017364ec5bb4225fd898465;hp=064b6a2dedb912cca326eb45af3aa828f9235713;hpb=399155730966dfc225fbb24f66204b05664385f2;p=modules%2Fgui.git diff --git a/src/SVTK/SVTK_InteractorStyle.h b/src/SVTK/SVTK_InteractorStyle.h index 064b6a2de..dd514356d 100644 --- a/src/SVTK/SVTK_InteractorStyle.h +++ b/src/SVTK/SVTK_InteractorStyle.h @@ -1,30 +1,28 @@ -// SALOME VTKViewer : build VTK viewer into Salome desktop +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. -// -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + +// SALOME VTKViewer : build VTK viewer into Salome desktop // File : SVTK_InteractorStyle.h // Author : Christophe ATTANASIO -// Module : SALOME -// $Header$ #ifndef __SVTK_InteractorStyle_h #define __SVTK_InteractorStyle_h @@ -38,19 +36,24 @@ #include #include -#include -#include +#include +#include #include #include + +#ifdef WIN32 +#pragma warning ( disable:4251 ) +#endif + // -//! Control the value of increment in SALOME way. +//! Control the value of increment in arithmetic progression mode. /*! This class controls of value of increment, - for pan/rotate/zoom operations in SALOME way + for pan/rotate/zoom operations in arithmetic progression mode */ -class SVTK_ControllerIncrement : public vtkObject{ +class SVTK_EXPORT SVTK_ControllerIncrement : public vtkObject{ public: vtkTypeMacro(SVTK_ControllerIncrement, vtkObject); static SVTK_ControllerIncrement* New(); @@ -75,13 +78,37 @@ class SVTK_ControllerIncrement : public vtkObject{ SVTK_ControllerIncrement(const SVTK_ControllerIncrement&);//Not implemented void operator=(const SVTK_ControllerIncrement&); //Not implemented }; + +// +//! Control the value of increment in geometric progression mode. +/*! + This class controls of value of increment, + for pan/rotate/zoom operations in geometric progression mode. +*/ +class SVTK_EXPORT SVTK_GeomControllerIncrement : public SVTK_ControllerIncrement{ + public: + vtkTypeMacro(SVTK_GeomControllerIncrement, SVTK_ControllerIncrement); + static SVTK_GeomControllerIncrement* New(); + + //! Increace the increment value by add 1 + virtual int Increase(); + + //! Decreace the increment value by subtract 1 + virtual int Decrease(); + protected: + SVTK_GeomControllerIncrement(); + virtual ~SVTK_GeomControllerIncrement(); + private: + SVTK_GeomControllerIncrement(const SVTK_GeomControllerIncrement&);//Not implemented + void operator=(const SVTK_GeomControllerIncrement&); //Not implemented +}; // //! Control the behaviour of KeyDown event in SALOME way. /*! This class controls the behaviour of KeyDown event in SALOME way */ -class SVTK_ControllerOnKeyDown : public vtkObject{ +class SVTK_EXPORT SVTK_ControllerOnKeyDown : public vtkObject{ public: vtkTypeMacro(SVTK_ControllerOnKeyDown, vtkObject); static SVTK_ControllerOnKeyDown* New(); @@ -98,13 +125,16 @@ class SVTK_ControllerOnKeyDown : public vtkObject{ void operator=(const SVTK_ControllerOnKeyDown&); //Not implemented }; -class vtkCell; -class vtkPicker; +class vtkPointPicker; +class vtkTDxInteractorStyle; class SALOME_Actor; class SVTK_Selector; class SVTK_GenericRenderWindowInteractor; +class SVTK_Actor; + +class QRubberBand; #define VTK_INTERACTOR_STYLE_CAMERA_NONE 0 #define VTK_INTERACTOR_STYLE_CAMERA_ROTATE 1 @@ -114,6 +144,9 @@ class SVTK_GenericRenderWindowInteractor; #define VTK_INTERACTOR_STYLE_CAMERA_FIT 5 #define VTK_INTERACTOR_STYLE_CAMERA_SELECT 6 #define VTK_INTERACTOR_STYLE_CAMERA_GLOBAL_PAN 7 +#define VTK_INTERACTOR_STYLE_CAMERA_SELECT_ROTATION_POINT 8 + +enum PolygonState { Disable, Start, InProcess, Finished, Closed, NotValid }; //! Introduce SALOME way of user interaction /*! @@ -128,81 +161,65 @@ class SVTK_EXPORT SVTK_InteractorStyle: public vtkInteractorStyle typedef boost::shared_ptr PSelectionEvent; - + void SetTDxStyle(vtkTDxInteractorStyle*){} //! Generate special #SVTK_SelectionEvent - virtual - SVTK_SelectionEvent* - GetSelectionEvent(); + virtual SVTK_SelectionEvent* GetSelectionEvent(); //! Generate special #SVTK_SelectionEvent with flipped Y coordinate - virtual - SVTK_SelectionEvent* - GetSelectionEventFlipY(); + virtual SVTK_SelectionEvent* GetSelectionEventFlipY(); //! Redefined in order to add an observer (callback) for custom event (space mouse event) - virtual - void - SetInteractor( vtkRenderWindowInteractor* ); + virtual void SetInteractor( vtkRenderWindowInteractor* ); //! To invoke #vtkRenderWindowInteractor::CreateTimer - virtual - void - Render(); + virtual void Render(); //! To implement cached rendering - virtual - void - OnTimer(); + virtual void OnTimer(); //! To reset reset view - virtual - void - OnConfigure(); + virtual void OnConfigure(); //! To handle mouse move event - virtual - void - OnMouseMove(); + virtual void OnMouseMove(); //! To handle left mouse button down event (reimplemented from #vtkInteractorStyle) - virtual - void - OnLeftButtonDown(); + virtual void OnLeftButtonDown(); //! To handle left mouse button up event (reimplemented from #vtkInteractorStyle) - virtual - void - OnLeftButtonUp(); + virtual void OnLeftButtonUp(); //! To handle middle mouse button down event (reimplemented from #vtkInteractorStyle) - virtual - void - OnMiddleButtonDown(); + virtual void OnMiddleButtonDown(); //! To handle middle mouse button up event (reimplemented from #vtkInteractorStyle) - virtual - void - OnMiddleButtonUp(); + virtual void OnMiddleButtonUp(); //! To handle right mouse button down event (reimplemented from #vtkInteractorStyle) - virtual - void - OnRightButtonDown(); + virtual void OnRightButtonDown(); //! To handle right mouse button up event (reimplemented from #vtkInteractorStyle) - virtual - void - OnRightButtonUp(); + virtual void OnRightButtonUp(); + + //! To handle mouse wheel forward event (reimplemented from #vtkInteractorStyle) + virtual void OnMouseWheelForward(); + + //! To handle mouse wheel backward event (reimplemented from #vtkInteractorStyle) + virtual void OnMouseWheelBackward(); + + //! To handle mouse button double click event + virtual void OnMouseButtonDoubleClick(); //! To handle keyboard event (reimplemented from #vtkInteractorStyle) - virtual - void - OnChar(); + virtual void OnChar(); //! To set current increment controller void SetControllerIncrement(SVTK_ControllerIncrement*); + //! To modify current increment controller + void SetIncrementSpeed(const int, const int = 0); + //! To get current increment controller SVTK_ControllerIncrement* ControllerIncrement(); @@ -220,7 +237,18 @@ class SVTK_EXPORT SVTK_InteractorStyle: public vtkInteractorStyle SVTK_Selector* GetSelector(); - protected: + int CurrentState() const { return State; } + PolygonState GetPolygonState() const { return myPoligonState; } + void SetPolygonState( const PolygonState& thePolygonState ) + { myPoligonState = thePolygonState; } + + void SetAdvancedZoomingEnabled( const bool theState ) { myIsAdvancedZoomingEnabled = theState; } + bool IsAdvancedZoomingEnabled() const { return myIsAdvancedZoomingEnabled; } + + //! releaze myLastHighlitedActor and myLastPreHighlitedActor + void FreeActors(); + + protected: SVTK_InteractorStyle(); ~SVTK_InteractorStyle(); @@ -257,9 +285,9 @@ class SVTK_EXPORT SVTK_InteractorStyle: public vtkInteractorStyle static void ProcessEvents(vtkObject* object, - unsigned long event, - void* clientData, - void* callData ); + unsigned long event, + void* clientData, + void* callData ); float MotionFactor; float RadianToDegree; // constant: for conv from deg to rad @@ -273,6 +301,9 @@ class SVTK_EXPORT SVTK_InteractorStyle: public vtkInteractorStyle void startFitArea(); void startSpin(); + void startPointSelection(); + void startFocalPointSelection(); + protected: void loadCursors(); void startOperation(int operation); @@ -287,6 +318,11 @@ class SVTK_EXPORT SVTK_InteractorStyle: public vtkInteractorStyle void DominantCombinedSwitch(); + void drawRect(); + void endDrawRect(); + void drawPolygon(); + void endDrawPolygon(); + protected: QCursor myDefCursor; QCursor myPanCursor; @@ -319,7 +355,32 @@ class SVTK_EXPORT SVTK_InteractorStyle: public vtkInteractorStyle PSelectionEvent mySelectionEvent; - vtkSmartPointer myPicker; + unsigned long myCurrRotationPointType; + unsigned long myPrevRotationPointType; + + unsigned long myCurrFocalPointType; + unsigned long myPrevFocalPointType; + + double myRotationPointX; + double myRotationPointY; + double myRotationPointZ; + + vtkSmartPointer myHighlightSelectionPointActor; + vtkSmartPointer myPointPicker; + + double myBBCenter[3]; + bool myBBFirstCheck; + + QRubberBand* myRectBand; //!< selection rectangle rubber band + QtxPolyRubberBand* myPolygonBand; //!< polygonal selection + QVector myPolygonPoints; + PolygonState myPoligonState; + + bool myIsAdvancedZoomingEnabled; }; +#ifdef WIN32 +#pragma warning ( default:4251 ) +#endif + #endif