VR-Forces 5.0.1 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) 2019 VT MAK
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 
37  virtual void modelAdded(DtModel*) = 0;
38 
40  virtual void modelRemoved(DtModel*) = 0;
41 
44  virtual void setAll(
45  const DtVector& loc,
46  const DtVector32& vel,
47  const DtTaitBryan& ori,
48  const DtVector32& acc,
49  const DtVector32& rotVel,
50  DtTime t) = 0;
51 
53  virtual void setLocation(const DtVector& loc, DtTime curTime) = 0;
54 
57  virtual const DtVector& approxLocation(DtTime curTime) const = 0;
58 
60  virtual void setVelocity(const DtVector32& vel, DtTime curTime) = 0;
61 
66  virtual const DtVector32& approxVelocity(DtTime curTime) const = 0;
67 
70  virtual const DtVector32& approxUnsmoothedVelocity(DtTime curTime) const = 0;
71 
73  virtual void setOrientation(const DtTaitBryan& ori, DtTime curTime) = 0;
74 
77  virtual const DtTaitBryan& approxEuler(DtTime curTime) const = 0;
78 
80  virtual void setAcceleration(const DtVector32& acc, DtTime curTime) = 0;
81  virtual const DtVector32& acceleration(DtTime curTime) const = 0;
82 
84  virtual void setRotationalVelocity(const DtVector32& vel, DtTime curTime) = 0;
85  virtual const DtVector32& rotationalVelocity(DtTime curTime) const = 0;
86 
88  virtual void setSmoothPeriod(float period) = 0;
90  virtual void setSmoothingEnabled(bool enabled) = 0;
91 
94  virtual void setAlgorithm(DtDeadReckonTypes alg) = 0;
95  virtual DtDeadReckonTypes algorithm() const = 0;
96 
97  virtual DtMotionModel* clone(double time) = 0;
98 
100  virtual void reset() = 0;
101 
104 
105  virtual void setFrozen( bool frozen ) = 0;
106  virtual bool isFrozen() const = 0;
107 
109 
112 
113  virtual void setDeadReckoningEnabled( bool enabled ) = 0;
114  virtual bool isDeadReckoningEnabled() const = 0;
115 
117  };
118 
119  template <typename DeadReckoner>
124  protected DeadReckoner
125  {
126  public:
127 
130  : DtMotionModel()
131  , DeadReckoner()
132  , myDeadReckoningEnabledFlag( true )
133  {
134  }
135 
138  : DtMotionModel( orig )
139  , DeadReckoner( orig )
140  , myDeadReckoningEnabledFlag( orig.myDeadReckoningEnabledFlag )
141  {
142  setAlgorithm(orig.algorithm());
143  setSmoothingEnabled(orig.mySmoothEnable);
144  setSmoothPeriod(orig.smoothPeriod());
145  }
146 
148  DtMotionModel* clone( double time )
149  {
150  return new DtVRLDeadReckonerMotionModel( *this, time );
151  }
152 
154  virtual void updateMotion(double dtTime)
155  {
156  }
157 
159  virtual void modelAdded(DtModel*)
160  {
161  //Intentionally do nothing
162  }
163 
165  virtual void modelRemoved(DtModel*)
166  {
167  //Intentionally do nothing
168  }
169 
172  virtual void setAll(
173  const DtVector& loc,
174  const DtVector32& vel,
175  const DtTaitBryan& ori,
176  const DtVector32& acc,
177  const DtVector32& rotVel,
178  DtTime curTime)
179  {
180  DeadReckoner::setAll(loc, vel, ori, acc, rotVel, curTime);
181  }
182 
184  virtual void setLocation(const DtVector& loc, DtTime curTime)
185  {
186  DeadReckoner::setLocation(loc,curTime);
187  }
188 
191  virtual const DtVector& approxLocation(DtTime curTime) const
192  {
193  return DeadReckoner::approxLocation(curTime);
194  }
195 
197  virtual void setVelocity(const DtVector32& vel, DtTime curTime)
198  {
199  return DeadReckoner::setVelocity(vel,curTime);
200  }
201 
204  virtual const DtVector32& approxVelocity(DtTime curTime) const
205  {
206  return DeadReckoner::approxVelocity(curTime);
207  }
208 
211  virtual const DtVector32& approxUnsmoothedVelocity(DtTime curTime) const
212  {
213  return DeadReckoner::approxUnsmoothedVelocity(curTime);
214  }
215 
217  virtual void setOrientation(const DtTaitBryan& ori, DtTime curTime)
218  {
219  DeadReckoner::setOrientation(ori,curTime);
220  }
221 
222  virtual void setSmoothPeriod(float period)
223  {
224  DeadReckoner::setSmoothPeriod(period);
225  }
226 
227  virtual void setSmoothingEnabled(bool enabled)
228  {
229  DeadReckoner::setSmoothEnable(enabled);
230  }
231 
234  virtual const DtTaitBryan& approxEuler(DtTime curTime) const
235  {
236  return DeadReckoner::approxEuler(curTime);
237  }
238 
240  virtual void setAcceleration(const DtVector32& acc, DtTime curTime)
241  {
242  DeadReckoner::setAcceleration(acc,curTime);
243  }
244 
245  virtual const DtVector32& acceleration(DtTime curTime) const
246  {
247  return DeadReckoner::acceleration(curTime);
248  }
249 
251  virtual void setRotationalVelocity(const DtVector32& vel, DtTime curTime)
252  {
253  DeadReckoner::setRotationalVelocity(vel,curTime);
254  }
255 
256  virtual const DtVector32& rotationalVelocity(DtTime curTime) const
257  {
258  return DeadReckoner::rotationalVelocity(curTime);
259  }
260 
263  virtual void setAlgorithm(DtDeadReckonTypes alg)
264  {
265  DeadReckoner::setAlgorithm(alg);
266  }
267 
268  virtual DtDeadReckonTypes algorithm() const
269  {
270  return DeadReckoner::algorithm();
271  }
272 
273  virtual void reset()
274  {
275  DeadReckoner::reset();
276  }
277 
278  virtual void setFrozen( bool frozen )
279  {
280  DeadReckoner::setFrozen( frozen );
281  }
282 
283  virtual bool isFrozen() const
284  {
285  return DeadReckoner::isFrozen();
286  }
287 
288  virtual void setDeadReckoningEnabled( bool enabled )
289  {
290  myDeadReckoningEnabledFlag = enabled;
291  }
292 
293  virtual bool isDeadReckoningEnabled() const
294  {
295  return myDeadReckoningEnabledFlag;
296  }
297 
298  protected:
299 
301 
302  };
303 
304 
308  {
309  public:
310  virtual ~DtMotionModelCreator();
311  virtual DtMotionModel* create( DtSceneObject* owner, DtDe& de ) = 0;
312  };
313 
318  {
319  public:
320  DtMotionModel* create( DtSceneObject* owner, DtDe& de );
321  };
322 
323 }
virtual void reset()
Used to reset the DeadReckoner.
Definition: DtMotionModel.h:273
virtual void setAcceleration(const DtVector32 &acc, DtTime curTime)
Set/Get absolute acceleration.
Definition: DtMotionModel.h:240
virtual bool isFrozen() const
Get/Set the frozen state (enable/disable dead reckoning)
Definition: DtMotionModel.h:283
The base motion model class.
Definition: DtMotionModel.h:26
virtual const DtVector32 & acceleration(DtTime curTime) const
Definition: DtMotionModel.h:245
virtual void setRotationalVelocity(const DtVector32 &vel, DtTime curTime)
Set/Get absolute rotational velocity.
Definition: DtMotionModel.h:251
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:191
virtual void modelAdded(DtModel *)
Called whenever a model is added.
Definition: DtMotionModel.h:159
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:234
virtual void setSmoothingEnabled(bool enabled)
Enable or disable smoothing.
Definition: DtMotionModel.h:227
DtVRLDeadReckonerMotionModel(const DtVRLDeadReckonerMotionModel &orig, double time)
Copy CTOR.
Definition: DtMotionModel.h:137
virtual DtDeadReckonTypes algorithm() const
Definition: DtMotionModel.h:268
The default motion model creator. Created using the name &quot;PrDefaultMotionModel&quot;.
Definition: DtMotionModel.h:317
DtMotionModel * clone(double time)
Clone a DtVRLDeadReckonerMotionModel.
Definition: DtMotionModel.h:148
virtual void setAlgorithm(DtDeadReckonTypes alg)
Set/Get the dead reckoning algorithm used for generating the approximated values from the absolute va...
Definition: DtMotionModel.h:263
virtual void updateMotion(double dtTime)
Update the motion parameters at the specified time.
Definition: DtMotionModel.h:154
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:204
DtVRLDeadReckonerMotionModel extends DtMotionModel to use a VR-Link Dead Reckoner.
Definition: DtMotionModel.h:123
virtual void setOrientation(const DtTaitBryan &ori, DtTime curTime)
Set absolute orientation.
Definition: DtMotionModel.h:217
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:172
virtual void setDeadReckoningEnabled(bool enabled)
Get/Set whether dead reckoning is disabled (independently from frozen/paused state).
Definition: DtMotionModel.h:288
virtual bool isDeadReckoningEnabled() const
Get/Set whether dead reckoning is disabled (independently from frozen/paused state).
Definition: DtMotionModel.h:293
#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:278
bool myDeadReckoningEnabledFlag
Definition: DtMotionModel.h:300
virtual const DtVector32 & rotationalVelocity(DtTime curTime) const
Definition: DtMotionModel.h:256
DtVRLDeadReckonerMotionModel()
CTOR.
Definition: DtMotionModel.h:129
virtual void setSmoothPeriod(float period)
Set the smoothing period.
Definition: DtMotionModel.h:222
virtual void setVelocity(const DtVector32 &vel, DtTime curTime)
Set absolute velocity.
Definition: DtMotionModel.h:197
A DtSceneObject represents an object that can be positioned in the scene by (possibly) attaching it t...
Definition: DtSceneObject.h:42
A model which owns a single model instance. A DtModel is a managing container for a single DtModelIns...
Definition: DtModel.h:55
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:70
virtual void modelRemoved(DtModel *)
Called whenever a model is removed.
Definition: DtMotionModel.h:165
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:211
The motion model.
Definition: DtMotionModel.h:307
virtual void setLocation(const DtVector &loc, DtTime curTime)
Set absolute location.
Definition: DtMotionModel.h:184
Contains DLL export macros.

Document ID: Generated on Mon Jun 20 00:38:30 EDT 2022 from SVN revision 244029
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)