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 
45  virtual ~DtVrfObjectManipulationEventProcessor() override;
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() override;
74 
76  virtual void setEnabled(bool) override;
77 
79  virtual void setEditing(bool);
80 
82  virtual void setCreating(bool) override;
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 override;
140 
142  virtual bool processMouseEvent(const makVrv::DtMouseEvent& ev, makVrv::DtChannel& channel) override;
143 
144  virtual bool processKeyboardEvent(const makVrv::DtKeyEvent& ev, makVrv::DtChannel& channel) override;
145 
147  virtual void changeHeading( double mouseX, double mouseY, bool snapToGrid = false );
148  virtual void changePitch( double mouseX, double mouseY, bool snapToGrid = false );
149  virtual void changeAltitude( double mouseX, double mouseY, bool snapToGrid = false );
150  virtual void processMouseMove(makVrv::DtChannel& channel, const makVrv::DtMouseEvent& ev) override;
151 
152  virtual bool pick(makVrv::DtChannel& channel, double x, double y, makVrv::DtIntersectorResult& result,
153  makVrv::DtIntersector::IntersectProperties props) const override;
154 
155  virtual void cleanupTerrainDraggingVaraibles();
156 
158  virtual bool placePoint(makVrv::DtChannel& channel, const makVrv::DtMouseEvent&);
159 
161  virtual void changeAltitudeWithWheel(int wheelSteps) override;
162 
164  virtual void changeHeadingWithWheel( int wheelSteps );
165 
167  virtual void changePitchWithWheel( int wheelSteps );
168 
169  virtual void cancel(bool escPressed);
170  virtual void cancel() override;
171 
172  virtual void startHeadingDrag(const makVrv::DtMouseEvent&, makVrv::DtChannel& channel);
173  virtual void startPitchDrag(const makVrv::DtMouseEvent&, makVrv::DtChannel& channel);
174  virtual void startAltitudeDrag(const makVrv::DtMouseEvent&, makVrv::DtChannel& channel);
175  virtual void setupLastSnapData();
176  virtual void setupSnapTransforms();
177 
178  virtual void tick();
179 
180  virtual void executeDeferredMouseMoveEvent();
181 
182  virtual DtTaitBryan worldOrientation() const;
183 
184  protected:
185  DtTaitBryan myCurrentOrientation;
193  DtVector myStartPoint;
196  double myDragTime;
197  DtTimedSection myDragTimer;
200  std::vector<makVrv::DtElementID> myIgnoreList;
212 
214 
217  boost::optional<makVrv::DtMouseEvent> mySavedMouseMoveEvent;
221  int myAltitudeDragCounter = 0;
222 
223  typedef struct _SnapData
224  {
225  bool needsInitialization = true;
226  DtTaitBryan checkOrientation;
227  DtTaitBryan currentOrientation;
228 
229  double checkAltitude = 0.;
230  double currentAltitude = 0.;
231 
233  DtCoordTransform geocToTopoTransform;
234  DtCoordTransform topoToGeocTransform;
235 
236  } SnapData;
237 
239  };
240 
243  {
244 
245  public:
249 
251  static void registerInstance( makVrv::DtDe& de,
253 
256  };
257 
260  {
261  public:
263  DtVrfIntervisibilityEditingEventProcessor(makVrv::DtInputDriver& inputDriver, makVrv::DtDe& de, const std::string& className);
264 
266  virtual ~DtVrfIntervisibilityEditingEventProcessor() override;
267 
269  virtual void changeAltitudeWithWheel(int wheelSteps) override;
270  virtual void startAltitudeDrag(const makVrv::DtMouseEvent&, makVrv::DtChannel& channel);
271  virtual void cancel() override;
272 
273  protected:
274  virtual bool processMouseEvent(const makVrv::DtMouseEvent& ev, makVrv::DtChannel& channel) override;
275  virtual bool pick(makVrv::DtChannel& channel, double x, double y, makVrv::DtIntersectorResult& result,
276  makVrv::DtIntersector::IntersectProperties props) const override;
277  virtual void changeAltitude(double mouseX, double mouseY) override;
278  virtual bool processKeyboardEvent(const makVrv::DtKeyEvent& ev, makVrv::DtChannel& channel) override;
279  virtual bool isAltKeyDown() const;
280  virtual bool isLeftMouseButtonDown() const;
281  virtual bool isRightMouseButtonDown() const;
282  virtual bool isMiddleMouseButtonDown() const;
283 
284  protected:
289  };
290 
292  {
293  public:
294  virtual makVrv::DtBasicEditingEventProcessor* create(makVrv::DtDe&) override;
295  };
296 }
makVrv::DtSignalConnectionManager myConnections
Definition: vrfObjectManipulationEventProcessor.h:192
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:189
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:220
int myAltitudePositionY
Definition: vrfObjectManipulationEventProcessor.h:286
This class encapsulates a Key event.
Definition: DtKeyEvent.h:16
bool myHeadingAllowed
Definition: vrfObjectManipulationEventProcessor.h:186
!!!!!!!!!!
Definition: vrfObjectManipulationEventProcessor.h:259
Descriptor for a single intersection result.
Definition: DtIntersectorResult.h:21
int myAltitudePositionX
Definition: vrfObjectManipulationEventProcessor.h:285
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:210
DtVector myObserverLocation
Definition: vrfObjectManipulationEventProcessor.h:208
DtTaitBryan myCurrentOrientation
Definition: vrfObjectManipulationEventProcessor.h:185
This class encapsulates a mouse button event.
Definition: DtMouseEvent.h:19
SnapData myLastSnap
Definition: vrfObjectManipulationEventProcessor.h:238
bool myIgnoreNextMouseMove
Definition: vrfObjectManipulationEventProcessor.h:288
KeyModifier
Describe which modifier(s) are pressed.
Definition: DtKeyState.h:136
bool myAllowEventDefer
Definition: vrfObjectManipulationEventProcessor.h:211
bool myDeferMouseMoveEvents
Controls whether mouse move events will be executed immediately or saved.
Definition: vrfObjectManipulationEventProcessor.h:219
Definition: vrfObjectManipulationEventProcessor.h:223
boost::signals2::signal< void(bool)> signal_cancel
Definition: vrfObjectManipulationEventProcessor.h:124
bool myObserverEventProcessorWasEnabled
Definition: vrfObjectManipulationEventProcessor.h:287
bool myObserverEventProcessorWasEnabled
Definition: vrfObjectManipulationEventProcessor.h:205
The abstract Channel Class.
Definition: DtChannel.h:35
DtVector myStartingMousePosition
Definition: vrfObjectManipulationEventProcessor.h:201
DtVector myStartPoint
Definition: vrfObjectManipulationEventProcessor.h:193
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:209
bool myPitchAllowed
Definition: vrfObjectManipulationEventProcessor.h:187
bool myFreehand
Definition: vrfObjectManipulationEventProcessor.h:199
This file contains the declaration for the class DtMouseEvent.
Definition: vrfObjectManipulationEventProcessor.h:241
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:291
bool myEditStartedByDoubleClick
Definition: vrfObjectManipulationEventProcessor.h:206
bool myAltitudeAllowed
Definition: vrfObjectManipulationEventProcessor.h:188
double myDragTime
Definition: vrfObjectManipulationEventProcessor.h:196
Contains the DtIntervisibilityEditingEventProcessor class declaration.
DtCoordTransform topoToGeocTransform
Definition: vrfObjectManipulationEventProcessor.h:234
bool myAllowEditing
Definition: vrfObjectManipulationEventProcessor.h:198
bool myEmbarkationAllowed
Definition: vrfObjectManipulationEventProcessor.h:202
bool myIgnoreLeftMouseDown
Definition: vrfObjectManipulationEventProcessor.h:204
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:197
bool myIsPitchDragging
Definition: vrfObjectManipulationEventProcessor.h:190
Base class to provide boost signal/slot management.
bool myIgnoreNextLeftButtonRelease
Definition: vrfObjectManipulationEventProcessor.h:203
DtCoordTransform geocToTopoTransform
Definition: vrfObjectManipulationEventProcessor.h:233
DtTaitBryan currentOrientation
Definition: vrfObjectManipulationEventProcessor.h:227
int myDragTolerance
Definition: vrfObjectManipulationEventProcessor.h:194
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:76
std::vector< makVrv::DtElementID > myIgnoreList
Definition: vrfObjectManipulationEventProcessor.h:200
bool myMouseDragging
Definition: vrfObjectManipulationEventProcessor.h:191
boost::optional< makVrv::DtMouseEvent > mySavedMouseMoveEvent
Linux produces many mouse move events during a tick.
Definition: vrfObjectManipulationEventProcessor.h:217
Creator for the intervisibility event processor.
Definition: DtIntervisibilityEditingEventProcessor.h:54
bool myIsLastEventProcessing
Definition: vrfObjectManipulationEventProcessor.h:207
DtVector currentGroundLocation
Definition: vrfObjectManipulationEventProcessor.h:232
double myDragToleranceTime
Definition: vrfObjectManipulationEventProcessor.h:195
DtTaitBryan checkOrientation
Definition: vrfObjectManipulationEventProcessor.h:226

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)