VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
vrfObjectManipulationEventProcessor.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2014 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
8 
10 
11 #pragma once
12 
13 #include <vrfGuiCore/vrfGuiCore.h>
14 
15 
16 #include <boost/optional.hpp>
17 
21 
22 #include <vrvCore/DtUniqueID.h>
23 #include <vrvCore/DtMouseEvent.h>
24 #include <vrvCore/DtKeyEvent.h>
25 
26 #include <matrix/vlVector.h>
27 #include <matrix/vlQuaternion.h>
28 #include <matrix/vlTaitBryan.h>
29 #include <matrix/coordTransform.h>
30 #include <matrix/topoCoord.h>
31 
32 #include <vlutil/vlPerformanceStats.h>
33 
34 namespace makVrf
35 {
39  {
40  public:
42  DtVrfObjectManipulationEventProcessor( makVrv::DtDe&, const std::string& driverName = "DtVrfObjectManipulationEventProcessor" );
43 
46 
49  virtual void setCurrentHeading( double heading );
50 
53  virtual void setCurrentPitch( double pitch );
54 
56  virtual void setHeadingAllowed(bool);
57  virtual bool headingAllowed() const;
58 
60  virtual void setPitchAllowed(bool);
61  virtual bool pitchAllowed() const;
62 
64  virtual void setAltitudeAllowed(bool);
65  virtual bool altitudeAllowed() const;
66 
68  virtual double currentHeading() const;
69 
71  virtual double currentPitch() const;
72 
73  virtual const std::string& className();
74 
76  virtual void setEnabled(bool);
77 
79  virtual void setEditing(bool);
80 
82  virtual void setCreating(bool);
83 
84  virtual void setAllowEventDefer(bool);
85  bool allowEventDefer() const
86  {
87  return myAllowEventDefer;
88  }
89 
91  virtual void setIgnoreNextLeftButtonRelease(bool b);
92  virtual void setEditStartedByDoubleClick(bool b);
93 
96  virtual void setDragTolerance(int);
97  virtual int dragTolerance() const;
98 
101  virtual void setFreehand(bool);
102  virtual bool freehand() const;
103 
106  void setDragToleranceTime(double);
107  double dragToleranceTime() const;
108 
110  virtual void setIgnoreList(const std::vector<makVrv::DtElementID>&);
111  const std::vector<makVrv::DtElementID>& ignoreList() const;
112 
115  virtual void setEmbarkationAllowed(bool);
116  virtual bool embarkationAllowed() const;
117 
119  boost::signals2::signal<void ( double )> signal_headingChanged;
120 
122  boost::signals2::signal<void ( double )> signal_pitchChanged;
123 
124  boost::signals2::signal<void (bool)> signal_cancel;
125 
127  virtual bool isShiftKeyDown() const;
128  virtual bool isControlKeyDown() const;
129  virtual bool isFunctionKeyDown() const;
130  virtual bool isAltKeyDown() const;
131  virtual bool isLeftMouseButtonDown() const;
132  virtual bool isRightMouseButtonDown() const;
133  virtual bool isMiddleMouseButtonDown() const;
134 
135  protected:
136  virtual bool checkModifiersReleased(const makVrv::DtKeyState::KeyModifier& ev, makVrv::DtChannel& channel, bool mouseDown);
137  virtual bool checkModifiersEnabled(const makVrv::DtMouseEvent& ev, makVrv::DtChannel& channel);
138 
139  virtual makVrv::DtIntersector::IntersectProperties intersectorPickMask() const;
140 
142  virtual bool processMouseEvent(const makVrv::DtMouseEvent& ev, makVrv::DtChannel& channel);
143 
144  virtual bool processKeyboardEvent(const makVrv::DtKeyEvent& ev,
145  makVrv::DtChannel& channel);
146 
148  virtual void changeHeading( double mouseX, double mouseY, bool snapToGrid = false );
149  virtual void changePitch( double mouseX, double mouseY, bool snapToGrid = false );
150  virtual void changeAltitude( double mouseX, double mouseY, bool snapToGrid = false );
151  virtual void processMouseMove(makVrv::DtChannel& channel, const makVrv::DtMouseEvent& ev) override;
152 
153  virtual bool pick(makVrv::DtChannel& channel, double x, double y, makVrv::DtIntersectorResult& result,
155 
156  virtual void cleanupTerrainDraggingVaraibles();
157 
159  virtual bool placePoint(makVrv::DtChannel& channel, const makVrv::DtMouseEvent&);
160 
162  virtual void changeAltitudeWithWheel( int wheelSteps );
163 
165  virtual void changeHeadingWithWheel( int wheelSteps );
166 
168  virtual void changePitchWithWheel( int wheelSteps );
169 
170  virtual void cancel(bool escPressed);
171  virtual void cancel();
172 
173  virtual void startHeadingDrag(const makVrv::DtMouseEvent&, makVrv::DtChannel& channel);
174  virtual void startPitchDrag(const makVrv::DtMouseEvent&, makVrv::DtChannel& channel);
175  virtual void startAltitudeDrag(const makVrv::DtMouseEvent&, makVrv::DtChannel& channel);
176  virtual void setupLastSnapData();
177  virtual void setupSnapTransforms();
178 
179  virtual void tick();
180 
181  virtual void executeDeferredMouseMoveEvent();
182 
183  virtual DtTaitBryan worldOrientation() const;
184 
185  protected:
186  DtTaitBryan myCurrentOrientation;
197  double myDragTime;
201  std::vector<makVrv::DtElementID> myIgnoreList;
213 
215 
218  boost::optional<makVrv::DtMouseEvent> mySavedMouseMoveEvent;
222  int myAltitudeDragCounter = 0;
223 
224  typedef struct _SnapData
225  {
226  bool needsInitialization = true;
227  DtTaitBryan checkOrientation;
228  DtTaitBryan currentOrientation;
229 
230  double checkAltitude = 0.;
231  double currentAltitude = 0.;
232 
234  DtCoordTransform geocToTopoTransform;
235  DtCoordTransform topoToGeocTransform;
236 
237  } SnapData;
238 
240  };
241 
244  {
245 
246  public:
250 
252  static void registerInstance( makVrv::DtDe& de,
254 
257  };
258 
261  {
262  public:
264  DtVrfIntervisibilityEditingEventProcessor(makVrv::DtInputDriver& inputDriver, makVrv::DtDe& de, const std::string& className);
265 
268 
270  virtual void changeAltitudeWithWheel( int wheelSteps );
271  virtual void startAltitudeDrag(const makVrv::DtMouseEvent&, makVrv::DtChannel& channel);
272  virtual void cancel();
273 
274  protected:
275  virtual bool processMouseEvent( const makVrv::DtMouseEvent& ev, makVrv::DtChannel& channel);
276  virtual bool pick(makVrv::DtChannel& channel, double x, double y, makVrv::DtIntersectorResult& result,
278  virtual void changeAltitude( double mouseX, double mouseY );
279  virtual bool processKeyboardEvent(const makVrv::DtKeyEvent& ev, makVrv::DtChannel& channel);
280  virtual bool isAltKeyDown() const;
281  virtual bool isLeftMouseButtonDown() const;
282  virtual bool isRightMouseButtonDown() const;
283  virtual bool isMiddleMouseButtonDown() const;
284 
285  protected:
290  };
291 
293  {
294  public:
296  };
297 }
makVrv::DtSignalConnectionManager myConnections
Definition: vrfObjectManipulationEventProcessor.h:193
IntersectProperties
The IntersectProperties enum is a flag set that indicates the types of nodes to be considered for int...
Definition: DtIntersector.h:31
boost::signals2::signal< void(double)> signal_pitchChanged
signal that the pitch of the object has changed
Definition: vrfObjectManipulationEventProcessor.h:122
bool myIsHeadingDragging
Definition: vrfObjectManipulationEventProcessor.h:190
Manage the tick and mouse events when editing or placing a Vrf object.
Definition: vrfObjectManipulationEventProcessor.h:37
bool allowEventDefer() const
Definition: vrfObjectManipulationEventProcessor.h:85
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
bool myRightMouseButtonDown
Definition: vrfObjectManipulationEventProcessor.h:221
int myAltitudePositionY
Definition: vrfObjectManipulationEventProcessor.h:287
This class encapsulates a Key event.
Definition: DtKeyEvent.h:16
bool myHeadingAllowed
Definition: vrfObjectManipulationEventProcessor.h:187
!!!!!!!!!!
Definition: vrfObjectManipulationEventProcessor.h:260
Descriptor for a single intersection result.
Definition: DtIntersectorResult.h:21
int myAltitudePositionX
Definition: vrfObjectManipulationEventProcessor.h:286
The Simple event processor will emit signals whenever a mouse or keyboard event occurs that would cau...
Definition: DtBasicEditingEventProcessor.h:48
#define DT_DLL_VRFGUICORE
Contains DLL export macros.
Definition: vrfGuiCore.h:25
bool mySetAtLeastOneEvent
Definition: vrfObjectManipulationEventProcessor.h:211
DtVector myObserverLocation
Definition: vrfObjectManipulationEventProcessor.h:209
DtTaitBryan myCurrentOrientation
Definition: vrfObjectManipulationEventProcessor.h:186
This class encapsulates a mouse button event.
Definition: DtMouseEvent.h:19
SnapData myLastSnap
Definition: vrfObjectManipulationEventProcessor.h:239
bool myIgnoreNextMouseMove
Definition: vrfObjectManipulationEventProcessor.h:289
KeyModifier
Describe which modifier(s) are pressed.
Definition: DtKeyState.h:136
bool myAllowEventDefer
Definition: vrfObjectManipulationEventProcessor.h:212
bool myDeferMouseMoveEvents
Controls whether mouse move events will be executed immediately or saved.
Definition: vrfObjectManipulationEventProcessor.h:220
Definition: vrfObjectManipulationEventProcessor.h:224
boost::signals2::signal< void(bool)> signal_cancel
Definition: vrfObjectManipulationEventProcessor.h:124
bool myObserverEventProcessorWasEnabled
Definition: vrfObjectManipulationEventProcessor.h:288
bool myObserverEventProcessorWasEnabled
Definition: vrfObjectManipulationEventProcessor.h:206
The abstract Channel Class.
Definition: DtChannel.h:35
DtVector myStartingMousePosition
Definition: vrfObjectManipulationEventProcessor.h:202
DtVector myStartPoint
Definition: vrfObjectManipulationEventProcessor.h:194
boost::signals2::signal< void(double)> signal_headingChanged
signal that the heading of the object has changed
Definition: vrfObjectManipulationEventProcessor.h:119
Contains makVrv::DtVirtualBaseClass class.
makVrv::DtMouseEvent myLastMouseEvent
Definition: vrfObjectManipulationEventProcessor.h:210
bool myPitchAllowed
Definition: vrfObjectManipulationEventProcessor.h:188
bool myFreehand
Definition: vrfObjectManipulationEventProcessor.h:200
This file contains the declaration for the class DtMouseEvent.
Definition: vrfObjectManipulationEventProcessor.h:242
This class&#39;s main responsibility is to handle keyboard and mouse events from OSG (Qt events are route...
Definition: DtInputDriver.h:43
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
Definition: vrfObjectManipulationEventProcessor.h:292
bool myEditStartedByDoubleClick
Definition: vrfObjectManipulationEventProcessor.h:207
bool myAltitudeAllowed
Definition: vrfObjectManipulationEventProcessor.h:189
double myDragTime
Definition: vrfObjectManipulationEventProcessor.h:197
Contains the DtIntervisibilityEditingEventProcessor class declaration.
DtCoordTransform topoToGeocTransform
Definition: vrfObjectManipulationEventProcessor.h:235
bool myAllowEditing
Definition: vrfObjectManipulationEventProcessor.h:199
bool myEmbarkationAllowed
Definition: vrfObjectManipulationEventProcessor.h:203
bool myIgnoreLeftMouseDown
Definition: vrfObjectManipulationEventProcessor.h:205
The DtIntervisibilityEditingEventProcessor is overriding to support the canEdit method to determine i...
Definition: DtIntervisibilityEditingEventProcessor.h:24
This file contains the declaration for the class DtKeyEvent.
DtTimedSection myDragTimer
Definition: vrfObjectManipulationEventProcessor.h:198
bool myIsPitchDragging
Definition: vrfObjectManipulationEventProcessor.h:191
Base class to provide boost signal/slot management.
bool myIgnoreNextLeftButtonRelease
Definition: vrfObjectManipulationEventProcessor.h:204
DtCoordTransform geocToTopoTransform
Definition: vrfObjectManipulationEventProcessor.h:234
DtTaitBryan currentOrientation
Definition: vrfObjectManipulationEventProcessor.h:228
int myDragTolerance
Definition: vrfObjectManipulationEventProcessor.h:195
Contains makVrv::DtUniqueID type.
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:72
std::vector< makVrv::DtElementID > myIgnoreList
Definition: vrfObjectManipulationEventProcessor.h:201
bool myMouseDragging
Definition: vrfObjectManipulationEventProcessor.h:192
boost::optional< makVrv::DtMouseEvent > mySavedMouseMoveEvent
Linux produces many mouse move events during a tick.
Definition: vrfObjectManipulationEventProcessor.h:218
Creator for the intervisibility event processor.
Definition: DtIntervisibilityEditingEventProcessor.h:54
bool myIsLastEventProcessing
Definition: vrfObjectManipulationEventProcessor.h:208
DtVector currentGroundLocation
Definition: vrfObjectManipulationEventProcessor.h:233
double myDragToleranceTime
Definition: vrfObjectManipulationEventProcessor.h:196
DtTaitBryan checkOrientation
Definition: vrfObjectManipulationEventProcessor.h:227

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)