0030507: Visualization - introduce AIS_ViewController
[occt.git] / src / AIS / AIS_ViewInputBuffer.hxx
diff --git a/src/AIS/AIS_ViewInputBuffer.hxx b/src/AIS/AIS_ViewInputBuffer.hxx
new file mode 100644 (file)
index 0000000..48d2705
--- /dev/null
@@ -0,0 +1,153 @@
+// Copyright (c) 2016-2019 OPEN CASCADE SAS
+//
+// This file is part of Open CASCADE Technology software library.
+//
+// This library is free software; you can redistribute it and/or modify it under
+// the terms of the GNU Lesser General Public License version 2.1 as published
+// by the Free Software Foundation, with special exception defined in the file
+// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
+// distribution for complete text of the license and disclaimer of any warranty.
+//
+// Alternatively, this file may be used under the terms of Open CASCADE
+// commercial license or contractual agreement.
+
+#ifndef _AIS_ViewInputBuffer_HeaderFile
+#define _AIS_ViewInputBuffer_HeaderFile
+
+#include <Aspect_ScrollDelta.hxx>
+
+#include <Graphic3d_Vec2.hxx>
+#include <NCollection_Sequence.hxx>
+#include <V3d_TypeOfOrientation.hxx>
+
+//! Selection mode
+enum AIS_ViewSelectionTool
+{
+  AIS_ViewSelectionTool_Picking,    //!< pick to select
+  AIS_ViewSelectionTool_RubberBand, //!< rubber-band to select
+  AIS_ViewSelectionTool_Polygon     //!< polyline to select
+};
+
+//! Input buffer type.
+enum AIS_ViewInputBufferType
+{
+  AIS_ViewInputBufferType_UI, //!< input buffer for filling from UI thread
+  AIS_ViewInputBufferType_GL, //!< input buffer accessible  from GL thread
+};
+
+//! Auxiliary structure defining viewer events
+class AIS_ViewInputBuffer
+{
+public:
+
+  bool IsNewGesture;     //!< transition from one action to another
+
+  NCollection_Sequence<Aspect_ScrollDelta> ZoomActions; //!< the queue with zoom actions
+
+  struct _orientation
+  {
+    bool                  ToFitAll;         //!< perform FitAll operation
+    bool                  ToSetViewOrient;  //!< set new view orientation
+    V3d_TypeOfOrientation ViewOrient;       //!< new view orientation
+
+    _orientation() : ToFitAll (false), ToSetViewOrient (false), ViewOrient (V3d_Xpos) {}
+  } Orientation;
+
+  struct _highlighting
+  {
+    bool            ToHilight; //!< perform dynamic highlighting at specified point
+    Graphic3d_Vec2i Point;     //!< the new point for dynamic highlighting
+
+    _highlighting() : ToHilight (false) {}
+  } MoveTo;
+
+  struct _selection
+  {
+    AIS_ViewSelectionTool Tool;          //!< perform selection
+    bool                  IsXOR;         //!< perform shift selection
+    NCollection_Sequence<Graphic3d_Vec2i>
+                          Points;        //!< the points for selection
+    bool                  ToApplyTool;   //!< apply rubber-band selection tool
+
+    _selection() : Tool (AIS_ViewSelectionTool_Picking), IsXOR (false), ToApplyTool (false) {}
+  } Selection;
+
+  struct _panningParams
+  {
+    bool            ToStart;    //!< start panning
+    Graphic3d_Vec2i PointStart; //!< panning start point
+    bool            ToPan;      //!< perform panning
+    Graphic3d_Vec2i Delta;      //!< panning delta
+
+    _panningParams() : ToStart (false), ToPan (false) {}
+  } Panning;
+
+  struct _draggingParams
+  {
+    bool            ToStart;    //!< start dragging
+    bool            ToStop;     //!< stop  dragging
+    bool            ToAbort;    //!< abort dragging (restore previous position)
+    Graphic3d_Vec2i PointStart; //!< drag start point
+    Graphic3d_Vec2i PointTo;    //!< drag end point
+
+    _draggingParams() : ToStart (false), ToStop (false), ToAbort (false) {}
+  } Dragging;
+
+  struct _orbitRotation
+  {
+    bool            ToStart;    //!< start orbit rotation
+    Graphic3d_Vec2d PointStart; //!< orbit rotation start point
+    bool            ToRotate;   //!< perform orbit rotation
+    Graphic3d_Vec2d PointTo;    //!< orbit rotation end point
+
+    _orbitRotation() : ToStart (false), ToRotate (false) {}
+  } OrbitRotation;
+
+  struct _viewRotation
+  {
+    bool            ToStart;    //!< start view rotation
+    Graphic3d_Vec2d PointStart; //!< view rotation start point
+    bool            ToRotate;   //!< perform view rotation
+    Graphic3d_Vec2d PointTo;    //!< view rotation end point
+
+    _viewRotation() : ToStart (false), ToRotate (false) {}
+  } ViewRotation;
+
+  struct _zrotateParams
+  {
+    Graphic3d_Vec2i Point;    //!< Z rotation start point
+    double          Angle;    //!< Z rotation angle
+    bool            ToRotate; //!< start Z rotation
+
+    _zrotateParams() : Angle (0.0), ToRotate (false) {}
+  } ZRotate;
+
+public:
+
+  AIS_ViewInputBuffer()
+  : IsNewGesture (false) {}
+
+  //! Reset events buffer.
+  void Reset()
+  {
+    Orientation.ToFitAll = false;
+    Orientation.ToSetViewOrient = false;
+    MoveTo.ToHilight = false;
+    Selection.ToApplyTool = false;
+    IsNewGesture     = false;
+    ZoomActions.Clear();
+    Panning.ToStart  = false;
+    Panning.ToPan    = false;
+    Dragging.ToStart = false;
+    Dragging.ToStop  = false;
+    Dragging.ToAbort = false;
+    OrbitRotation.ToStart  = false;
+    OrbitRotation.ToRotate = false;
+    ViewRotation.ToStart   = false;
+    ViewRotation.ToRotate  = false;
+    ZRotate.ToRotate = false;
+  }
+
+};
+
+#endif // _AIS_ViewInputBuffer_HeaderFile