VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtObserverAnimator.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2024 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvCore/vrvCore.h>
13 
14 #include <vrvCore/DtUniqueID.h>
16 
17 #include <vrvUtil/DtQuat.h>
20 
22 
23 #include <matrix/vlVector.h>
24 #include <matrix/vlTaitBryan.h>
25 
26 #include <string>
27 
28 namespace makVrv
29 {
30  class DtDe;
31  class DtObserver;
32  class DtEaser;
33  class DtCoordinateSystem;
34 
41  {
43 
44  public:
45 
47  virtual ~DtObserverAnimator();
48 
49  public:
50 
53  virtual void tick();
54 
57  virtual bool isDone() const;
58 
60  virtual DtObserver* observer() const;
61 
62  protected:
63 
66  struct EntityInfo
67  {
68  bool isValid;
70  DtVector geoPos;
71  DtTaitBryan geoOri;
72  DtVector cigPos;
73  DtTaitBryan cigOri;
74  };
75 
76  protected:
77 
80  DtObserverAnimator(DtDe& de, DtObserver& obs, DtVector geocEndPos,
81  DtTaitBryan geocEndOri, double endZoom, float smoothTime = 3.0f);
82 
85  DtObserverAnimator(DtDe& de, DtObserver& obs, DtVector cigEndPos,
86  DtQuat cigEndOri, double endZoom, float smoothTime = 3.0f);
87 
90  DtObserverAnimator(DtDe& de, DtObserver& obs, DtVector relativeEndPos,
91  DtQuat relativeEndOri, double endZoom, DtUniqueID attachedTo,
92  DtUniqueID secondaryAttachedTo,
93  DtObserverObject::AttachType attachedType, float smoothTime = 3.0f);
94 
97  makArchives::DtObserverStateRecord& rec, float smoothTime = 3.0f);
98 
99  protected:
100 
103  virtual EntityInfo entityInfo(makVrv::DtDe& de,
104  const std::string& displayName);
105  virtual EntityInfo entityInfo(makVrv::DtDe& de, DtUniqueID elementId);
106 
110  virtual void updateTargets();
111 
112  // onInit is not virtual, because it is called by the constructor
113  void onInit();
114 
117  virtual void updateObserver();
118 
121  virtual DtVector calcTargetPosition();
122 
125  virtual DtQuat calcTargetOrientation();
126 
129  virtual void calculateUpVector();
130 
137  virtual void interpolatePosition(double t);
138 
148  virtual void interpolateOrientation(double t);
149 
155  virtual void interpolateZoom(double t);
156 
159  virtual void finish();
160 
162  virtual void slot_coordinateSystemChanged();
163 
173  virtual inline bool shouldLinearlyInterpolateOrientation() const;
174 
175  //helper functions to assist with the animation
178  virtual double altitude(const DtVector& geoPos);
180  virtual DtVector surfaceAt(const DtVector& geoPos);
182  virtual DtVector clampAltitude(const DtVector& geoPos);
185  virtual DtVector bounce(double dt, DtVector start, DtVector end);
189  virtual double altitudeContrib();
193  virtual double phase1Contrib(double t);
197  virtual double phase3Contrib(double t);
200  virtual double calculatePercentage(double s, double e, double t);
203  virtual double calculateEasedPercent(double t);
204 
206  void initCoordinateSystem();
207 
208  protected:
209 
211 
215 
216  bool myIsDone;
217 
223 
224  //these are all geocentric locations
225  DtVector myStartPosition;
228  DtVector myEndPosition;
230 
231  DtVector myUpVector;
232 
233  //these are IG orientations
238 
239  //for trying to find a target location when the attachment point is on
240  //a moving target
243 
244  //Animator needs to know if it is a 2D mode so it can use view resolution instead of zoom
246 
247  double myStartZoom;
249  double myEndZoom;
250 
251  double myStartTime;
253  double myEndTime;
254 
257 
260 
262 
265  DtCoordinateSystem* myCoordinateSystem = nullptr;
266  };
267 
270  {
271  public:
272 
275  static DtObserverAnimatorCreator& instance(DtDe& de);
276 
278  static void registerInstance(DtDe& de, DtObserverAnimatorCreator* anInstance);
279 
280  public:
281 
283  //functionality.
284  virtual DtObserverAnimator* create(DtObserver& obs, DtVector geocEndPos,
285  DtTaitBryan geocEndOri, double endZoom, float smoothTime = 3.0f);
286 
288  //functionality.
289  virtual DtObserverAnimator* create(DtObserver& obs, DtVector cigEndPos,
290  DtQuat cigEndOri, double endZoom, float smoothTime = 3.0f);
291 
293  //functionality.
294  virtual DtObserverAnimator* create(DtObserver& obs, DtVector relativeEndPos,
295  DtQuat relativeEndOri, double endZoom, DtUniqueID attachedTo,
296  DtUniqueID secondaryAttachedTo,
297  DtObserverObject::AttachType attachedType, float smoothTime = 3.0f);
298 
300  //functionality.
301  virtual DtObserverAnimator* create(DtObserver& obs,
302  makArchives::DtObserverStateRecord& rec, float smoothTime = 3.0f);
303 
304  protected:
305 
307 
308  protected:
310  };
311 
312 } //makVrv::
DtEaser * myEaser
Definition: DtObserverAnimator.h:210
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
double myStartTime
Definition: DtObserverAnimator.h:251
DtVector myPreviousPosition
Definition: DtObserverAnimator.h:226
bool myIsAttached
Definition: DtObserverAnimator.h:219
DtQuat myTargetOrientation
Definition: DtObserverAnimator.h:242
DtQuat myCurrentOrientation
Definition: DtObserverAnimator.h:235
double myEndTime
Definition: DtObserverAnimator.h:253
bool myShouldFaceEarth
Definition: DtObserverAnimator.h:259
float mySmoothTime
Definition: DtObserverAnimator.h:214
DtVector geoPos
Definition: DtObserverAnimator.h:70
double myCurrentZoom
Definition: DtObserverAnimator.h:248
makVrv::DtDe & myDe
Definition: DtObserverAnimator.h:212
DtQuat myEndOrientation
Definition: DtObserverAnimator.h:236
A DtObserverSettingsRecord contains the state of an observer.
Definition: DtObserverStateRecord.h:20
bool myShouldUseLinearOrientationInterpolation
Definition: DtObserverAnimator.h:258
DtSignalConnectionManager myConnections
Definition: DtObserverAnimator.h:261
DtVector myLocationTrackAttachment
Definition: DtObserverAnimator.h:222
DtQuat myOffsetOrientation
Definition: DtObserverAnimator.h:237
DtTaitBryan cigOri
Definition: DtObserverAnimator.h:73
DtUniqueID myAttachedTo
Definition: DtObserverAnimator.h:220
DtVector myEndPosition
Definition: DtObserverAnimator.h:228
double myStartZoom
Definition: DtObserverAnimator.h:247
DtVector cigPos
Definition: DtObserverAnimator.h:72
DtVector myStartPosition
Definition: DtObserverAnimator.h:225
The creator class for creating DtObserverAnimator.
Definition: DtObserverAnimator.h:269
double myEndZoom
Definition: DtObserverAnimator.h:249
DtVector myTargetPosition
Definition: DtObserverAnimator.h:241
A facade for a DtObserverObject.
Definition: DtObserver.h:38
Contains makVrv::DtVirtualBaseClass class.
DtTaitBryan geoOri
Definition: DtObserverAnimator.h:71
Contains makVrv::DtObserverObject class declaration.
Data structure used to store information about an entity that the observer is moving towards and will...
Definition: DtObserverAnimator.h:66
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
double myCurrentTime
Definition: DtObserverAnimator.h:252
The easer class DtEaser return values along a bezier curve between input point 1 and point 2...
Definition: DtEaser.h:17
DtVector myOffsetPosition
Definition: DtObserverAnimator.h:229
Class to manage disconnection of boost connections on deletion.
Definition: DtSignalConnectionManager.h:20
DtQuat myStartOrientation
Definition: DtObserverAnimator.h:234
Contains makVrv::DtQuat class.
unsigned long long DtUniqueID
Definition: DtUniqueID.h:19
The DtCoordinateSystem is used to manage the current coordinate system of the scene.
Definition: DtCoordinateSystem.h:40
bool myIsDone
Definition: DtObserverAnimator.h:216
Contains makArchives::DtObserverStateRecord class.
Encapsulates the process of animating an observer to a given location. The animator will smoothly mov...
Definition: DtObserverAnimator.h:40
Base class to provide boost signal/slot management.
bool isValid
Definition: DtObserverAnimator.h:68
DtUniqueID mySecondaryAttachedTo
Definition: DtObserverAnimator.h:221
DtDe & myDe
Definition: DtObserverAnimator.h:309
DtObserverObject::AttachType myAttachType
Definition: DtObserverAnimator.h:218
Contains makVrv::DtUniqueID type.
bool myIs2DObsMode
Definition: DtObserverAnimator.h:245
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
makVrv::DtObserver & myObserver
Definition: DtObserverAnimator.h:213
A utility Quaternion class.
Definition: DtQuat.h:19
DtVector myCurrentPosition
Definition: DtObserverAnimator.h:227
DtVector myUpVector
Definition: DtObserverAnimator.h:231
double myTravelDistance
Definition: DtObserverAnimator.h:255
DtUniqueID elementId
Definition: DtObserverAnimator.h:69
double myCurrentAltitude
Definition: DtObserverAnimator.h:256
AttachType
Definition: DtObserverObject.h:42
Contains DLL export macros.

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)