Salome HOME
initial implementation of automatic rotation in SHAPER's OCC viewer
[modules/gui.git] / src / OCCViewer / OCCViewer_ViewPort3d.h
old mode 100755 (executable)
new mode 100644 (file)
index c0e396e..834f061
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2023  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -29,6 +29,8 @@
 #include <V3d_View.hxx>
 #include <V3d_Viewer.hxx>
 
+#include <gp_Ax1.hxx>
+
 class QColor;
 class QString;
 class QRect;
@@ -81,6 +83,12 @@ public:
   virtual void          startRotation( int, int, int, const gp_Pnt& );
   virtual void          rotate( int, int, int, const gp_Pnt& );
   virtual void          endRotation();
+
+  // Set the rotation axis and start automatic rotation
+  void                  setRotationAxis(const gp_Vec& theAxis, double theAngle, double theZAngle);
+  // Stop the automatic rotation
+  void                  stopRotation();
+
   bool                  isBusy() {return myBusy;} // check that View Port is fully initialized
 
   void                  setAdvancedZoomingEnabled( const bool theState ) { myIsAdvancedZoomingEnabled = theState; }
@@ -101,6 +109,7 @@ public slots:
   virtual bool          synchronize( OCCViewer_ViewPort* );
 
 private slots:
+  void                  updateRotation();
   void                  repaintViewAfterMove();
 
 protected:
@@ -129,6 +138,12 @@ private:
   int                   myBgImgHeight;
   int                   myBgImgWidth;
   QCursor*              myCursor;
+  // Fields for automatic rotation
+  gp_Ax1                myRotAxis;    // The rotation axis
+  double                myRotAngle;   // The angular rotation speed
+  bool                  myIsRotating; // Whether rotation animation is active
+  qint64                myLastRender; // Timestamp of last paint event
+  QTimer*               myRotTimer;   // Rotation timer
 };
 
 #ifdef WIN32