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 
119  template <typename DeadReckoner>
121  {
122  public:
123 
126  : DtMotionModel()
127  , DeadReckoner()
128  , myDeadReckoningEnabledFlag( true )
129  {
130  }
131 
134  : DtMotionModel( orig )
135  , DeadReckoner( orig )
136  , myDeadReckoningEnabledFlag( orig.myDeadReckoningEnabledFlag )
137  {
138  setAlgorithm( orig.algorithm() );
139  setSmoothingEnabled( orig.mySmoothEnable );
140  setSmoothPeriod( orig.smoothPeriod() );
141  }
142 
144  DtMotionModel* clone( double time )
145  {
146  return new DtVRLDeadReckonerMotionModel( *this, time );
147  }
148 
150  virtual void updateMotion( double dtTime )
151  {
152  }
153 
154  virtual const DtTime& velocityUpdateTime() const override
155  {
156  return DeadReckoner::velocityUpdateTime();
157  }
158 
159  virtual const DtTime& locationUpdateTime() const override
160  {
161  return DeadReckoner::locationUpdateTime();
162  }
163 
166  virtual void setAll( const DtVector& loc, const DtVector32& vel, const DtTaitBryan& ori,
167  const DtVector32& acc, const DtVector32& rotVel, DtTime curTime ) override
168  {
169  DeadReckoner::setAll( loc, vel, ori, acc, rotVel, curTime );
170  }
171 
173  virtual void setLocation( const DtVector& loc, DtTime curTime ) override
174  {
175  DeadReckoner::setLocation( loc, curTime );
176  }
177 
180  virtual const DtVector& approxLocation( DtTime curTime ) const override
181  {
182  return DeadReckoner::approxLocation( curTime );
183  }
184 
186  virtual void setVelocity( const DtVector32& vel, DtTime curTime ) override
187  {
188  return DeadReckoner::setVelocity( vel, curTime );
189  }
190 
193  virtual const DtVector32& approxVelocity( DtTime curTime ) const override
194  {
195  return DeadReckoner::approxVelocity( curTime );
196  }
197 
200  virtual const DtVector32& approxUnsmoothedVelocity( DtTime curTime ) const
201  {
202  return DeadReckoner::approxUnsmoothedVelocity( curTime );
203  }
204 
206  virtual void setOrientation( const DtTaitBryan& ori, DtTime curTime ) override
207  {
208  DeadReckoner::setOrientation( ori, curTime );
209  }
210 
211  virtual void setSmoothPeriod( float period )
212  {
213  DeadReckoner::setSmoothPeriod( period );
214  }
215 
216  virtual void setSmoothingEnabled( bool enabled )
217  {
218  DeadReckoner::setSmoothEnable( enabled );
219  }
220 
223  virtual const DtTaitBryan& approxEuler( DtTime curTime ) const override
224  {
225  return DeadReckoner::approxEuler( curTime );
226  }
227 
229  virtual void setAcceleration( const DtVector32& acc, DtTime curTime ) override
230  {
231  DeadReckoner::setAcceleration( acc, curTime );
232  }
233 
234  virtual const DtVector32& acceleration( DtTime curTime ) const override
235  {
236  return DeadReckoner::acceleration( curTime );
237  }
238 
240  virtual void setRotationalVelocity( const DtVector32& vel, DtTime curTime ) override
241  {
242  DeadReckoner::setRotationalVelocity( vel, curTime );
243  }
244 
245  virtual const DtVector32& rotationalVelocity( DtTime curTime ) const override
246  {
247  return DeadReckoner::rotationalVelocity( curTime );
248  }
249 
252  virtual void setAlgorithm( DtDeadReckonTypes alg ) override
253  {
254  DeadReckoner::setAlgorithm( alg );
255  }
256 
257  virtual DtDeadReckonTypes algorithm() const override
258  {
259  return DeadReckoner::algorithm();
260  }
261 
262  virtual void reset()
263  {
264  DeadReckoner::reset();
265  }
266 
267  virtual void setFrozen( bool frozen )
268  {
269  DeadReckoner::setFrozen( frozen );
270  }
271 
272  virtual bool isFrozen() const
273  {
274  return DeadReckoner::isFrozen();
275  }
276 
277  virtual void setDeadReckoningEnabled( bool enabled )
278  {
279  myDeadReckoningEnabledFlag = enabled;
280  }
281 
282  virtual bool isDeadReckoningEnabled() const
283  {
284  return myDeadReckoningEnabledFlag;
285  }
286 
287  protected:
288 
290 
291  };
292 
293 
297  {
298  public:
299  virtual ~DtMotionModelCreator();
300  virtual DtMotionModel* create( DtDe& de ) = 0;
301  };
302 
307  {
308  public:
309  DtMotionModel* create( DtDe& de );
310  };
311 
312 }
virtual void reset()
Used to reset the DeadReckoner.
Definition: DtMotionModel.h:262
virtual const DtVector & approxLocation(DtTime curTime) const override
Get the approximated (i.e. dead-reckoned for base DtDeadReckoner) location at the specified time...
Definition: DtMotionModel.h:180
virtual bool isFrozen() const
Get/Set the frozen state (enable/disable dead reckoning)
Definition: DtMotionModel.h:272
virtual const DtTaitBryan & approxEuler(DtTime curTime) const override
Get the approximated (i.e. dead-reckoned for base DtDeadReckoner) orientation at the specified time...
Definition: DtMotionModel.h:223
virtual void setOrientation(const DtTaitBryan &ori, DtTime curTime) override
Set absolute orientation.
Definition: DtMotionModel.h:206
The base motion model class.
Definition: DtMotionModel.h:26
virtual void setSmoothingEnabled(bool enabled)
Enable or disable smoothing.
Definition: DtMotionModel.h:216
DtVRLDeadReckonerMotionModel(const DtVRLDeadReckonerMotionModel &orig, double time)
Copy CTOR.
Definition: DtMotionModel.h:133
The default motion model creator. Created using the name &quot;PrDefaultMotionModel&quot;.
Definition: DtMotionModel.h:306
DtMotionModel * clone(double time)
Clone a DtVRLDeadReckonerMotionModel.
Definition: DtMotionModel.h:144
virtual void updateMotion(double dtTime)
Update the motion parameters at the specified time.
Definition: DtMotionModel.h:150
virtual const DtVector32 & approxVelocity(DtTime curTime) const override
Get the approximated (i.e. dead-reckoned for base DtDeadReckoner) velocity at the specified time...
Definition: DtMotionModel.h:193
DtVRLDeadReckonerMotionModel extends DtMotionModel to use a VR-Link Dead Reckoner.
Definition: DtMotionModel.h:120
virtual void setDeadReckoningEnabled(bool enabled)
Get/Set whether dead reckoning is disabled (independently from frozen/paused state).
Definition: DtMotionModel.h:277
virtual bool isDeadReckoningEnabled() const
Get/Set whether dead reckoning is disabled (independently from frozen/paused state).
Definition: DtMotionModel.h:282
virtual void setRotationalVelocity(const DtVector32 &vel, DtTime curTime) override
Set/Get absolute rotational velocity.
Definition: DtMotionModel.h:240
#define DT_DLL_VRVCORE
Definition: vrvCore.h:20
virtual const DtTime & locationUpdateTime() const override
Definition: DtMotionModel.h:159
virtual void setVelocity(const DtVector32 &vel, DtTime curTime) override
Set absolute velocity.
Definition: DtMotionModel.h:186
virtual void setFrozen(bool frozen)
Get/Set the frozen state (enable/disable dead reckoning)
Definition: DtMotionModel.h:267
bool myDeadReckoningEnabledFlag
Definition: DtMotionModel.h:289
virtual void setAlgorithm(DtDeadReckonTypes alg) override
Set/Get the dead reckoning algorithm used for generating the approximated values from the absolute va...
Definition: DtMotionModel.h:252
DtVRLDeadReckonerMotionModel()
CTOR.
Definition: DtMotionModel.h:125
virtual void setSmoothPeriod(float period)
Set the smoothing period.
Definition: DtMotionModel.h:211
virtual void setAcceleration(const DtVector32 &acc, DtTime curTime) override
Set/Get absolute acceleration.
Definition: DtMotionModel.h:229
virtual const DtVector32 & acceleration(DtTime curTime) const override
Definition: DtMotionModel.h:234
virtual void setAll(const DtVector &loc, const DtVector32 &vel, const DtTaitBryan &ori, const DtVector32 &acc, const DtVector32 &rotVel, DtTime curTime) override
Coherently set all DR parameters, thus avoiding DR computations associated with a partial set...
Definition: DtMotionModel.h:166
virtual void setLocation(const DtVector &loc, DtTime curTime) override
Set absolute location.
Definition: DtMotionModel.h:173
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
virtual const DtVector32 & rotationalVelocity(DtTime curTime) const override
Definition: DtMotionModel.h:245
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:200
virtual const DtTime & velocityUpdateTime() const override
Times at which velocity and position were last updated from the network.
Definition: DtMotionModel.h:154
The motion model.
Definition: DtMotionModel.h:296
virtual DtDeadReckonTypes algorithm() const override
Definition: DtMotionModel.h:257
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)