VR-Forces 4.3 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DtMotionModel.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2011 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 /******************************************************************************
6 ** $RCSfile: DtMotionModel.h,v $ $Revision: 1.16 $ $State: Exp $
7 ******************************************************************************/
8 
12 
13 #pragma once
14 #include <vrvCore/vrvCore.h>
15 #include <matrix/vlVector.h>
16 #include <matrix/vlTaitBryan.h>
17 #include <vlutil/vlTime.h>
18 #include <vlpi/disEnums.h>
19 
20 namespace makVrv
21 {
22  class DtSceneObject;
23  class DtModel;
24  class DtDe;
25 
29  {
30  public:
31 
32  DtMotionModel();
33 
34  virtual ~DtMotionModel();
35 
36  virtual void updateMotion(double dtTime) = 0;
37 
39  virtual void modelAdded(DtModel*) = 0;
40 
42  virtual void modelRemoved(DtModel*) = 0;
43 
45  virtual void setLocation(const DtVector& loc, DtTime curTime) = 0;
46 
49  virtual const DtVector& approxLocation(DtTime curTime) const = 0;
50 
52  virtual void setVelocity(const DtVector& vel, DtTime curTime) = 0;
53 
56  virtual const DtVector& approxVelocity(DtTime curTime) const = 0;
57 
59  virtual void setOrientation(const DtTaitBryan& ori, DtTime curTime) = 0;
60 
63  virtual const DtTaitBryan& approxEuler(DtTime curTime) const = 0;
64 
66  virtual void setAcceleration(const DtVector& acc, DtTime curTime) = 0;
67  virtual const DtVector& acceleration(DtTime curTime) const = 0;
68 
70  virtual void setRotationalVelocity(const DtVector& vel, DtTime curTime) = 0;
71  virtual const DtVector& rotationalVelocity(DtTime curTime) const = 0;
72 
74  virtual void setSmoothPeriod(float period) = 0;
76  virtual void setSmoothingEnabled(bool enabled) = 0;
77 
80  virtual void setAlgorithm(DtDeadReckonTypes alg) = 0;
81  virtual DtDeadReckonTypes algorithm() const = 0;
82 
83  virtual DtMotionModel* clone(double time) = 0;
84 
86  virtual void reset() = 0;
87  };
88 
89  template <typename DeadReckoner>
94  protected DeadReckoner
95  {
96  public:
99  : DtMotionModel()
100  , DeadReckoner()
101  {
102  }
105  : DtMotionModel(orig)
106  , DeadReckoner(orig)
107  {
108  setAlgorithm(orig.algorithm());
109  setSmoothingEnabled(orig.mySmoothEnable);
110  setSmoothPeriod(orig.smoothPeriod());
111  }
112 
114  DtMotionModel* clone(double time)
115  {
116  return new DtVRLDeadReckonerMotionModel(*this,time);
117  }
118 
120  virtual void updateMotion(double dtTime)
121  {
122 
123  }
124 
126  virtual void modelAdded(DtModel*)
127  {
128  //Intentionally do nothing
129  }
130 
132  virtual void modelRemoved(DtModel*)
133  {
134  //Intentionally do nothing
135  }
136 
138  virtual void setLocation(const DtVector& loc, DtTime curTime)
139  {
140  DeadReckoner::setLocation(loc,curTime);
141  }
142 
145  virtual const DtVector& approxLocation(DtTime curTime) const
146  {
147  return DeadReckoner::approxLocation(curTime);
148  }
149 
151  virtual void setVelocity(const DtVector& vel, DtTime curTime)
152  {
153  return DeadReckoner::setVelocity(vel,curTime);
154  }
155 
158  virtual const DtVector& approxVelocity(DtTime curTime) const
159  {
160  return DeadReckoner::approxVelocity(curTime);
161  }
162 
164  virtual void setOrientation(const DtTaitBryan& ori, DtTime curTime)
165  {
166  DeadReckoner::setOrientation(ori,curTime);
167  }
168 
169  virtual void setSmoothPeriod(float period)
170  {
171  DeadReckoner::setSmoothPeriod(period);
172  }
173 
174  virtual void setSmoothingEnabled(bool enabled)
175  {
176  DeadReckoner::setSmoothEnable(enabled);
177  }
178 
181  virtual const DtTaitBryan& approxEuler(DtTime curTime) const
182  {
183  return DeadReckoner::approxEuler(curTime);
184  }
185 
187  virtual void setAcceleration(const DtVector& acc, DtTime curTime)
188  {
189  DeadReckoner::setAcceleration(acc,curTime);
190  }
191 
192  virtual const DtVector& acceleration(DtTime curTime) const
193  {
194  return DeadReckoner::acceleration(curTime);
195  }
196 
198  virtual void setRotationalVelocity(const DtVector& vel, DtTime curTime)
199  {
200  DeadReckoner::setRotationalVelocity(vel,curTime);
201  }
202 
203  virtual const DtVector& rotationalVelocity(DtTime curTime) const
204  {
205  return DeadReckoner::rotationalVelocity(curTime);
206  }
207 
210  virtual void setAlgorithm(DtDeadReckonTypes alg)
211  {
212  DeadReckoner::setAlgorithm(alg);
213  }
214 
215  virtual DtDeadReckonTypes algorithm() const
216  {
217  return DeadReckoner::algorithm();
218  }
219 
220  virtual void reset()
221  {
222  DeadReckoner::reset();
223  }
224 
225  };
226 
230  {
231  public:
232  virtual ~DtMotionModelCreator();
233  virtual DtMotionModel* create(DtSceneObject* owner, DtDe& de) = 0;
234  };
235 
240  {
241  public:
242  DtMotionModel* create(DtSceneObject* owner, DtDe& de);
243  };
244 
245 }

Document ID: Generated on Wed Mar 11 21:20:57 EDT 2015 from SVN revision 150940
Copyright © 2005-2014 VT MÄK. All Rights Reserved (www.mak.com)