1 // Copyright (c) 2016-2019 OPEN CASCADE SAS 2 // 3 // This file is part of Open CASCADE Technology software library. 4 // 5 // This library is free software; you can redistribute it and/or modify it under 6 // the terms of the GNU Lesser General Public License version 2.1 as published 7 // by the Free Software Foundation, with special exception defined in the file 8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT 9 // distribution for complete text of the license and disclaimer of any warranty. 10 // 11 // Alternatively, this file may be used under the terms of Open CASCADE 12 // commercial license or contractual agreement. 13 14 #ifndef _AIS_ViewInputBuffer_HeaderFile 15 #define _AIS_ViewInputBuffer_HeaderFile 16 17 #include <Aspect_ScrollDelta.hxx> 18 19 #include <Graphic3d_Vec2.hxx> 20 #include <NCollection_Sequence.hxx> 21 #include <V3d_TypeOfOrientation.hxx> 22 23 //! Selection mode 24 enum AIS_ViewSelectionTool 25 { 26 AIS_ViewSelectionTool_Picking, //!< pick to select 27 AIS_ViewSelectionTool_RubberBand, //!< rubber-band to select 28 AIS_ViewSelectionTool_Polygon //!< polyline to select 29 }; 30 31 //! Input buffer type. 32 enum AIS_ViewInputBufferType 33 { 34 AIS_ViewInputBufferType_UI, //!< input buffer for filling from UI thread 35 AIS_ViewInputBufferType_GL, //!< input buffer accessible from GL thread 36 }; 37 38 //! Auxiliary structure defining viewer events 39 class AIS_ViewInputBuffer 40 { 41 public: 42 43 bool IsNewGesture; //!< transition from one action to another 44 45 NCollection_Sequence<Aspect_ScrollDelta> ZoomActions; //!< the queue with zoom actions 46 47 struct _orientation 48 { 49 bool ToFitAll; //!< perform FitAll operation 50 bool ToSetViewOrient; //!< set new view orientation 51 V3d_TypeOfOrientation ViewOrient; //!< new view orientation 52 _orientationAIS_ViewInputBuffer::_orientation53 _orientation() : ToFitAll (false), ToSetViewOrient (false), ViewOrient (V3d_Xpos) {} 54 } Orientation; 55 56 struct _highlighting 57 { 58 bool ToHilight; //!< perform dynamic highlighting at specified point 59 Graphic3d_Vec2i Point; //!< the new point for dynamic highlighting 60 _highlightingAIS_ViewInputBuffer::_highlighting61 _highlighting() : ToHilight (false) {} 62 } MoveTo; 63 64 struct _selection 65 { 66 AIS_ViewSelectionTool Tool; //!< perform selection 67 bool IsXOR; //!< perform shift selection 68 NCollection_Sequence<Graphic3d_Vec2i> 69 Points; //!< the points for selection 70 bool ToApplyTool; //!< apply rubber-band selection tool 71 _selectionAIS_ViewInputBuffer::_selection72 _selection() : Tool (AIS_ViewSelectionTool_Picking), IsXOR (false), ToApplyTool (false) {} 73 } Selection; 74 75 struct _panningParams 76 { 77 bool ToStart; //!< start panning 78 Graphic3d_Vec2i PointStart; //!< panning start point 79 bool ToPan; //!< perform panning 80 Graphic3d_Vec2i Delta; //!< panning delta 81 _panningParamsAIS_ViewInputBuffer::_panningParams82 _panningParams() : ToStart (false), ToPan (false) {} 83 } Panning; 84 85 struct _draggingParams 86 { 87 bool ToStart; //!< start dragging 88 bool ToStop; //!< stop dragging 89 bool ToAbort; //!< abort dragging (restore previous position) 90 Graphic3d_Vec2i PointStart; //!< drag start point 91 Graphic3d_Vec2i PointTo; //!< drag end point 92 _draggingParamsAIS_ViewInputBuffer::_draggingParams93 _draggingParams() : ToStart (false), ToStop (false), ToAbort (false) {} 94 } Dragging; 95 96 struct _orbitRotation 97 { 98 bool ToStart; //!< start orbit rotation 99 Graphic3d_Vec2d PointStart; //!< orbit rotation start point 100 bool ToRotate; //!< perform orbit rotation 101 Graphic3d_Vec2d PointTo; //!< orbit rotation end point 102 _orbitRotationAIS_ViewInputBuffer::_orbitRotation103 _orbitRotation() : ToStart (false), ToRotate (false) {} 104 } OrbitRotation; 105 106 struct _viewRotation 107 { 108 bool ToStart; //!< start view rotation 109 Graphic3d_Vec2d PointStart; //!< view rotation start point 110 bool ToRotate; //!< perform view rotation 111 Graphic3d_Vec2d PointTo; //!< view rotation end point 112 _viewRotationAIS_ViewInputBuffer::_viewRotation113 _viewRotation() : ToStart (false), ToRotate (false) {} 114 } ViewRotation; 115 116 struct _zrotateParams 117 { 118 Graphic3d_Vec2i Point; //!< Z rotation start point 119 double Angle; //!< Z rotation angle 120 bool ToRotate; //!< start Z rotation 121 _zrotateParamsAIS_ViewInputBuffer::_zrotateParams122 _zrotateParams() : Angle (0.0), ToRotate (false) {} 123 } ZRotate; 124 125 public: 126 AIS_ViewInputBuffer()127 AIS_ViewInputBuffer() 128 : IsNewGesture (false) {} 129 130 //! Reset events buffer. Reset()131 void Reset() 132 { 133 Orientation.ToFitAll = false; 134 Orientation.ToSetViewOrient = false; 135 MoveTo.ToHilight = false; 136 Selection.ToApplyTool = false; 137 IsNewGesture = false; 138 ZoomActions.Clear(); 139 Panning.ToStart = false; 140 Panning.ToPan = false; 141 Dragging.ToStart = false; 142 Dragging.ToStop = false; 143 Dragging.ToAbort = false; 144 OrbitRotation.ToStart = false; 145 OrbitRotation.ToRotate = false; 146 ViewRotation.ToStart = false; 147 ViewRotation.ToRotate = false; 148 ZRotate.ToRotate = false; 149 } 150 151 }; 152 153 #endif // _AIS_ViewInputBuffer_HeaderFile 154