VR-Forces 4.1 Class Documentation
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  };
85 
86  template <typename DeadReckoner>
91  protected DeadReckoner
92  {
93  public:
96  : DtMotionModel()
97  , DeadReckoner()
98  {
99  }
102  : DtMotionModel(orig)
103  , DeadReckoner(orig)
104  {
105  setAlgorithm(orig.algorithm());
106  setSmoothingEnabled(orig.mySmoothEnable);
107  setSmoothPeriod(orig.smoothPeriod());
108  }
109 
111  DtMotionModel* clone(double time)
112  {
113  return new DtVRLDeadReckonerMotionModel(*this,time);
114  }
115 
117  virtual void updateMotion(double dtTime)
118  {
119 
120  }
121 
123  virtual void modelAdded(DtModel*)
124  {
125  //Intentionally do nothing
126  }
127 
129  virtual void modelRemoved(DtModel*)
130  {
131  //Intentionally do nothing
132  }
133 
135  virtual void setLocation(const DtVector& loc, DtTime curTime)
136  {
137  DeadReckoner::setLocation(loc,curTime);
138  }
139 
142  virtual const DtVector& approxLocation(DtTime curTime) const
143  {
144  return DeadReckoner::approxLocation(curTime);
145  }
146 
148  virtual void setVelocity(const DtVector& vel, DtTime curTime)
149  {
150  return DeadReckoner::setVelocity(vel,curTime);
151  }
152 
155  virtual const DtVector& approxVelocity(DtTime curTime) const
156  {
157  return DeadReckoner::approxVelocity(curTime);
158  }
159 
161  virtual void setOrientation(const DtTaitBryan& ori, DtTime curTime)
162  {
163  DeadReckoner::setOrientation(ori,curTime);
164  }
165 
166  virtual void setSmoothPeriod(float period)
167  {
168  DeadReckoner::setSmoothPeriod(period);
169  }
170 
171  virtual void setSmoothingEnabled(bool enabled)
172  {
173  DeadReckoner::setSmoothEnable(enabled);
174  }
175 
178  virtual const DtTaitBryan& approxEuler(DtTime curTime) const
179  {
180  return DeadReckoner::approxEuler(curTime);
181  }
182 
184  virtual void setAcceleration(const DtVector& acc, DtTime curTime)
185  {
186  DeadReckoner::setAcceleration(acc,curTime);
187  }
188 
189  virtual const DtVector& acceleration(DtTime curTime) const
190  {
191  return DeadReckoner::acceleration(curTime);
192  }
193 
195  virtual void setRotationalVelocity(const DtVector& vel, DtTime curTime)
196  {
197  DeadReckoner::setRotationalVelocity(vel,curTime);
198  }
199 
200  virtual const DtVector& rotationalVelocity(DtTime curTime) const
201  {
202  return DeadReckoner::rotationalVelocity(curTime);
203  }
204 
207  virtual void setAlgorithm(DtDeadReckonTypes alg)
208  {
209  DeadReckoner::setAlgorithm(alg);
210  }
211 
212  virtual DtDeadReckonTypes algorithm() const
213  {
214  return DeadReckoner::algorithm();
215  }
216 
217  };
218 
222  {
223  public:
224  virtual ~DtMotionModelCreator();
225  virtual DtMotionModel* create(DtSceneObject* owner, DtDe& de) = 0;
226  };
227 
232  {
233  public:
234  DtMotionModel* create(DtSceneObject* owner, DtDe& de);
235  };
236 
237 }

Document ID: Generated on Tue Jan 29 18:21:16 EST 2013 from SVN revision 123193
Copyright © 2005-2013 VT MÄK Inc. All Rights Reserved (www.mak.com)