VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtMotionModel.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (c) 2022 MAK Technologies, Inc.
3 ** All rights reserved.
4 *****************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvCore/vrvCore.h>
13 #include <matrix/vlVector.h>
14 #include <matrix/vlTaitBryan.h>
15 #include <vlutil/vlTime.h>
16 #include <vlpi/disEnums.h>
17 
18 namespace makVrv
19 {
20  class DtSceneObject;
21  class DtModel;
22  class DtDe;
23 
27  {
28  public:
29 
30  DtMotionModel();
31 
32  virtual ~DtMotionModel();
33 
34  virtual void updateMotion(double dtTime) = 0;
35 
38  virtual void setAll(
39  const DtVector& loc,
40  const DtVector32& vel,
41  const DtTaitBryan& ori,
42  const DtVector32& acc,
43  const DtVector32& rotVel,
44  DtTime t) = 0;
45 
47  virtual const DtTime& velocityUpdateTime() const = 0;
48  virtual const DtTime& locationUpdateTime() const = 0;
49 
51  virtual void setLocation(const DtVector& loc, DtTime curTime) = 0;
52 
55  virtual const DtVector& approxLocation(DtTime curTime) const = 0;
56 
58  virtual void setVelocity(const DtVector32& vel, DtTime curTime) = 0;
59 
64  virtual const DtVector32& approxVelocity(DtTime curTime) const = 0;
65 
68  virtual const DtVector32& approxUnsmoothedVelocity(DtTime curTime) const = 0;
69 
71  virtual void setOrientation(const DtTaitBryan& ori, DtTime curTime) = 0;
72 
75  virtual const DtTaitBryan& approxEuler(DtTime curTime) const = 0;
76 
78  virtual void setAcceleration(const DtVector32& acc, DtTime curTime) = 0;
79  virtual const DtVector32& acceleration(DtTime curTime) const = 0;
80 
82  virtual void setRotationalVelocity(const DtVector32& vel, DtTime curTime) = 0;
83  virtual const DtVector32& rotationalVelocity(DtTime curTime) const = 0;
84 
86  virtual void setSmoothPeriod(float period) = 0;
88  virtual void setSmoothingEnabled(bool enabled) = 0;
89 
92  virtual void setAlgorithm(DtDeadReckonTypes alg) = 0;
93  virtual DtDeadReckonTypes algorithm() const = 0;
94 
95  virtual DtMotionModel* clone(double time) = 0;
96 
98  virtual void reset() = 0;
99 
102 
103  virtual void setFrozen( bool frozen ) = 0;
104  virtual bool isFrozen() const = 0;
105 
107 
110 
111  virtual void setDeadReckoningEnabled( bool enabled ) = 0;
112  virtual bool isDeadReckoningEnabled() const = 0;
113 
115  };
116 
117  template <typename DeadReckoner>
122  protected DeadReckoner
123  {
124  public:
125 
128  : DtMotionModel()
129  , DeadReckoner()
130  , myDeadReckoningEnabledFlag( true )
131  {
132  }
133 
136  : DtMotionModel( orig )
137  , DeadReckoner( orig )
138  , myDeadReckoningEnabledFlag( orig.myDeadReckoningEnabledFlag )
139  {
140  setAlgorithm(orig.algorithm());
141  setSmoothingEnabled(orig.mySmoothEnable);
142  setSmoothPeriod(orig.smoothPeriod());
143  }
144 
146  DtMotionModel* clone( double time )
147  {
148  return new DtVRLDeadReckonerMotionModel( *this, time );
149  }
150 
152  virtual void updateMotion(double dtTime)
153  {
154  }
155 
156  virtual const DtTime& velocityUpdateTime() const
157  {
158  return DeadReckoner::velocityUpdateTime();
159  }
160 
161  virtual const DtTime& locationUpdateTime() const
162  {
163  return DeadReckoner::locationUpdateTime();
164  }
165 
168  virtual void setAll(
169  const DtVector& loc,
170  const DtVector32& vel,
171  const DtTaitBryan& ori,
172  const DtVector32& acc,
173  const DtVector32& rotVel,
174  DtTime curTime)
175  {
176  DeadReckoner::setAll(loc, vel, ori, acc, rotVel, curTime);
177  }
178 
180  virtual void setLocation(const DtVector& loc, DtTime curTime)
181  {
182  DeadReckoner::setLocation(loc,curTime);
183  }
184 
187  virtual const DtVector& approxLocation(DtTime curTime) const
188  {
189  return DeadReckoner::approxLocation(curTime);
190  }
191 
193  virtual void setVelocity(const DtVector32& vel, DtTime curTime)
194  {
195  return DeadReckoner::setVelocity(vel,curTime);
196  }
197 
200  virtual const DtVector32& approxVelocity(DtTime curTime) const
201  {
202  return DeadReckoner::approxVelocity(curTime);
203  }
204 
207  virtual const DtVector32& approxUnsmoothedVelocity(DtTime curTime) const
208  {
209  return DeadReckoner::approxUnsmoothedVelocity(curTime);
210  }
211 
213  virtual void setOrientation(const DtTaitBryan& ori, DtTime curTime)
214  {
215  DeadReckoner::setOrientation(ori,curTime);
216  }
217 
218  virtual void setSmoothPeriod(float period)
219  {
220  DeadReckoner::setSmoothPeriod(period);
221  }
222 
223  virtual void setSmoothingEnabled(bool enabled)
224  {
225  DeadReckoner::setSmoothEnable(enabled);
226  }
227 
230  virtual const DtTaitBryan& approxEuler(DtTime curTime) const
231  {
232  return DeadReckoner::approxEuler(curTime);
233  }
234 
236  virtual void setAcceleration(const DtVector32& acc, DtTime curTime)
237  {
238  DeadReckoner::setAcceleration(acc,curTime);
239  }
240 
241  virtual const DtVector32& acceleration(DtTime curTime) const
242  {
243  return DeadReckoner::acceleration(curTime);
244  }
245 
247  virtual void setRotationalVelocity(const DtVector32& vel, DtTime curTime)
248  {
249  DeadReckoner::setRotationalVelocity(vel,curTime);
250  }
251 
252  virtual const DtVector32& rotationalVelocity(DtTime curTime) const
253  {
254  return DeadReckoner::rotationalVelocity(curTime);
255  }
256 
259  virtual void setAlgorithm(DtDeadReckonTypes alg)
260  {
261  DeadReckoner::setAlgorithm(alg);
262  }
263 
264  virtual DtDeadReckonTypes algorithm() const
265  {
266  return DeadReckoner::algorithm();
267  }
268 
269  virtual void reset()
270  {
271  DeadReckoner::reset();
272  }
273 
274  virtual void setFrozen( bool frozen )
275  {
276  DeadReckoner::setFrozen( frozen );
277  }
278 
279  virtual bool isFrozen() const
280  {
281  return DeadReckoner::isFrozen();
282  }
283 
284  virtual void setDeadReckoningEnabled( bool enabled )
285  {
286  myDeadReckoningEnabledFlag = enabled;
287  }
288 
289  virtual bool isDeadReckoningEnabled() const
290  {
291  return myDeadReckoningEnabledFlag;
292  }
293 
294  protected:
295 
297 
298  };
299 
300 
304  {
305  public:
306  virtual ~DtMotionModelCreator();
307  virtual DtMotionModel* create( DtDe& de ) = 0;
308  };
309 
314  {
315  public:
316  DtMotionModel* create( DtDe& de );
317  };
318 
319 }
virtual void reset()
Used to reset the DeadReckoner.
Definition: DtMotionModel.h:269
virtual void setAcceleration(const DtVector32 &acc, DtTime curTime)
Set/Get absolute acceleration.
Definition: DtMotionModel.h:236
virtual bool isFrozen() const
Get/Set the frozen state (enable/disable dead reckoning)
Definition: DtMotionModel.h:279
The base motion model class.
Definition: DtMotionModel.h:26
virtual const DtVector32 & acceleration(DtTime curTime) const
Definition: DtMotionModel.h:241
virtual void setRotationalVelocity(const DtVector32 &vel, DtTime curTime)
Set/Get absolute rotational velocity.
Definition: DtMotionModel.h:247
virtual const DtVector & approxLocation(DtTime curTime) const
Get the approximated (i.e. dead-reckoned for base DtDeadReckoner) location at the specified time...
Definition: DtMotionModel.h:187
virtual const DtTaitBryan & approxEuler(DtTime curTime) const
Get the approximated (i.e. dead-reckoned for base DtDeadReckoner) orientation at the specified time...
Definition: DtMotionModel.h:230
virtual void setSmoothingEnabled(bool enabled)
Enable or disable smoothing.
Definition: DtMotionModel.h:223
DtVRLDeadReckonerMotionModel(const DtVRLDeadReckonerMotionModel &orig, double time)
Copy CTOR.
Definition: DtMotionModel.h:135
virtual DtDeadReckonTypes algorithm() const
Definition: DtMotionModel.h:264
virtual const DtTime & velocityUpdateTime() const
Times at which velocity and position were last updated from the network.
Definition: DtMotionModel.h:156
The default motion model creator. Created using the name &quot;PrDefaultMotionModel&quot;.
Definition: DtMotionModel.h:313
DtMotionModel * clone(double time)
Clone a DtVRLDeadReckonerMotionModel.
Definition: DtMotionModel.h:146
virtual void setAlgorithm(DtDeadReckonTypes alg)
Set/Get the dead reckoning algorithm used for generating the approximated values from the absolute va...
Definition: DtMotionModel.h:259
virtual void updateMotion(double dtTime)
Update the motion parameters at the specified time.
Definition: DtMotionModel.h:152
virtual const DtVector32 & approxVelocity(DtTime curTime) const
Get the approximated (i.e. dead-reckoned for base DtDeadReckoner) velocity at the specified time...
Definition: DtMotionModel.h:200
DtVRLDeadReckonerMotionModel extends DtMotionModel to use a VR-Link Dead Reckoner.
Definition: DtMotionModel.h:121
virtual void setOrientation(const DtTaitBryan &ori, DtTime curTime)
Set absolute orientation.
Definition: DtMotionModel.h:213
virtual void setAll(const DtVector &loc, const DtVector32 &vel, const DtTaitBryan &ori, const DtVector32 &acc, const DtVector32 &rotVel, DtTime curTime)
Coherently set all DR parameters, thus avoiding DR computations associated with a partial set...
Definition: DtMotionModel.h:168
virtual void setDeadReckoningEnabled(bool enabled)
Get/Set whether dead reckoning is disabled (independently from frozen/paused state).
Definition: DtMotionModel.h:284
virtual bool isDeadReckoningEnabled() const
Get/Set whether dead reckoning is disabled (independently from frozen/paused state).
Definition: DtMotionModel.h:289
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
virtual void setFrozen(bool frozen)
Get/Set the frozen state (enable/disable dead reckoning)
Definition: DtMotionModel.h:274
bool myDeadReckoningEnabledFlag
Definition: DtMotionModel.h:296
virtual const DtTime & locationUpdateTime() const
Definition: DtMotionModel.h:161
virtual const DtVector32 & rotationalVelocity(DtTime curTime) const
Definition: DtMotionModel.h:252
DtVRLDeadReckonerMotionModel()
CTOR.
Definition: DtMotionModel.h:127
virtual void setSmoothPeriod(float period)
Set the smoothing period.
Definition: DtMotionModel.h:218
virtual void setVelocity(const DtVector32 &vel, DtTime curTime)
Set absolute velocity.
Definition: DtMotionModel.h:193
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
virtual const DtVector32 & approxUnsmoothedVelocity(DtTime curTime) const
Get the approximated (i.e. dead-reckoned for base DtDeadReckoner) velocity at the specified time...
Definition: DtMotionModel.h:207
The motion model.
Definition: DtMotionModel.h:303
virtual void setLocation(const DtVector &loc, DtTime curTime)
Set absolute location.
Definition: DtMotionModel.h:180
Contains DLL export macros.

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)