VR-Forces 4.6.1 Class Documentation
 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) 2015 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 #include <vrvCore/vrvCore.h>
12 #include <matrix/vlVector.h>
13 #include <matrix/vlTaitBryan.h>
14 #include <vlutil/vlTime.h>
15 #include <vlpi/disEnums.h>
16 
17 namespace makVrv
18 {
19  class DtSceneObject;
20  class DtModel;
21  class DtDe;
22 
26  {
27  public:
28 
29  DtMotionModel();
30 
31  virtual ~DtMotionModel();
32 
33  virtual void updateMotion(double dtTime) = 0;
34 
36  virtual void modelAdded(DtModel*) = 0;
37 
39  virtual void modelRemoved(DtModel*) = 0;
40 
42  virtual void setLocation(const DtVector& loc, DtTime curTime) = 0;
43 
46  virtual const DtVector& approxLocation(DtTime curTime) const = 0;
47 
49  virtual void setVelocity(const DtVector32& vel, DtTime curTime) = 0;
50 
55  virtual const DtVector32& approxVelocity(DtTime curTime) const = 0;
56 
59  virtual const DtVector32& approxUnsmoothedVelocity(DtTime curTime) const = 0;
60 
62  virtual void setOrientation(const DtTaitBryan& ori, DtTime curTime) = 0;
63 
66  virtual const DtTaitBryan& approxEuler(DtTime curTime) const = 0;
67 
69  virtual void setAcceleration(const DtVector32& acc, DtTime curTime) = 0;
70  virtual const DtVector32& acceleration(DtTime curTime) const = 0;
71 
73  virtual void setRotationalVelocity(const DtVector32& vel, DtTime curTime) = 0;
74  virtual const DtVector32& rotationalVelocity(DtTime curTime) const = 0;
75 
77  virtual void setSmoothPeriod(float period) = 0;
79  virtual void setSmoothingEnabled(bool enabled) = 0;
80 
83  virtual void setAlgorithm(DtDeadReckonTypes alg) = 0;
84  virtual DtDeadReckonTypes algorithm() const = 0;
85 
86  virtual DtMotionModel* clone(double time) = 0;
87 
89  virtual void reset() = 0;
90 
92 
93  virtual void setFrozen( bool frozen ) = 0;
94  virtual bool isFrozen() const = 0;
95  };
96 
97  template <typename DeadReckoner>
102  protected DeadReckoner
103  {
104  public:
107  : DtMotionModel()
108  , DeadReckoner()
109  {
110  }
113  : DtMotionModel(orig)
114  , DeadReckoner(orig)
115  {
116  setAlgorithm(orig.algorithm());
117  setSmoothingEnabled(orig.mySmoothEnable);
118  setSmoothPeriod(orig.smoothPeriod());
119  }
120 
122  DtMotionModel* clone(double time)
123  {
124  return new DtVRLDeadReckonerMotionModel(*this,time);
125  }
126 
128  virtual void updateMotion(double dtTime)
129  {
130 
131  }
132 
134  virtual void modelAdded(DtModel*)
135  {
136  //Intentionally do nothing
137  }
138 
140  virtual void modelRemoved(DtModel*)
141  {
142  //Intentionally do nothing
143  }
144 
146  virtual void setLocation(const DtVector& loc, DtTime curTime)
147  {
148  DeadReckoner::setLocation(loc,curTime);
149  }
150 
153  virtual const DtVector& approxLocation(DtTime curTime) const
154  {
155  return DeadReckoner::approxLocation(curTime);
156  }
157 
159  virtual void setVelocity(const DtVector32& vel, DtTime curTime)
160  {
161  return DeadReckoner::setVelocity(vel,curTime);
162  }
163 
166  virtual const DtVector32& approxVelocity(DtTime curTime) const
167  {
168  return DeadReckoner::approxVelocity(curTime);
169  }
170 
173  virtual const DtVector32& approxUnsmoothedVelocity(DtTime curTime) const
174  {
175  return DeadReckoner::approxUnsmoothedVelocity(curTime);
176  }
177 
179  virtual void setOrientation(const DtTaitBryan& ori, DtTime curTime)
180  {
181  DeadReckoner::setOrientation(ori,curTime);
182  }
183 
184  virtual void setSmoothPeriod(float period)
185  {
186  DeadReckoner::setSmoothPeriod(period);
187  }
188 
189  virtual void setSmoothingEnabled(bool enabled)
190  {
191  DeadReckoner::setSmoothEnable(enabled);
192  }
193 
196  virtual const DtTaitBryan& approxEuler(DtTime curTime) const
197  {
198  return DeadReckoner::approxEuler(curTime);
199  }
200 
202  virtual void setAcceleration(const DtVector32& acc, DtTime curTime)
203  {
204  DeadReckoner::setAcceleration(acc,curTime);
205  }
206 
207  virtual const DtVector32& acceleration(DtTime curTime) const
208  {
209  return DeadReckoner::acceleration(curTime);
210  }
211 
213  virtual void setRotationalVelocity(const DtVector32& vel, DtTime curTime)
214  {
215  DeadReckoner::setRotationalVelocity(vel,curTime);
216  }
217 
218  virtual const DtVector32& rotationalVelocity(DtTime curTime) const
219  {
220  return DeadReckoner::rotationalVelocity(curTime);
221  }
222 
225  virtual void setAlgorithm(DtDeadReckonTypes alg)
226  {
227  DeadReckoner::setAlgorithm(alg);
228  }
229 
230  virtual DtDeadReckonTypes algorithm() const
231  {
232  return DeadReckoner::algorithm();
233  }
234 
235  virtual void reset()
236  {
237  DeadReckoner::reset();
238  }
239 
240  virtual void setFrozen( bool frozen )
241  {
242  DeadReckoner::setFrozen( frozen );
243  }
244 
245  virtual bool isFrozen() const
246  {
247  return DeadReckoner::isFrozen();
248  }
249 
250  };
251 
255  {
256  public:
257  virtual ~DtMotionModelCreator();
258  virtual DtMotionModel* create(DtSceneObject* owner, DtDe& de) = 0;
259  };
260 
265  {
266  public:
267  DtMotionModel* create(DtSceneObject* owner, DtDe& de);
268  };
269 
270 }

Document ID: Generated on Wed Jul 25 16:57:45 EDT 2018 from SVN revision 190790
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)