VR-Forces 4.1 Class Documentation
railMovementUpdater.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2010 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
10 
11 #pragma once
12 
13 //#include "railPSR.h"
14 #include <vector>
15 #include <matrix/vlVector.h>
16 #include <matrix/vlTaitBryan.h>
17 #include <matrix/coordTransform.h>
18 
20 
23 class DtRailSegment;
24 class DtAttachedTerrain;
25 
26 
37 {
38 
39 public:
40 
42  DtRailMovementUpdater(DtRailMovementController * parentController, bool useTurnSmoothing,
43  bool useAcceleration,bool useHighGroundClamp,const DtAttachedTerrain* attachedTerrain);
44 
46  virtual ~DtRailMovementUpdater();
47 
49  virtual bool init();
50 
51  virtual void clear();
52 
53  virtual void setEntityState(DtVrfMovingObjectStateRepository* state);
54 
59  virtual double setUpTurn(DtRailSegment * currentSeg, DtRailSegment * nextSeg,const int currentLane,
60  const int drivingLane,double headingDiff,bool useLocalPos = false,DtVector currentLocalPos = DtVector::zero());
61 
64  virtual bool turnValid(int currentLane);
65 
66  virtual bool recalculateTurnSpline(DtRailSegment * currentSeg, DtRailSegment * nextSeg,const int currentLane,
67  const int passingLane);
68 
71  virtual bool modifyTurnSpline(const DtVector &currentLocalPos,const DtRailSegment * currentSegment,const DtRailSegment * nextSegment, const int currentLane, const int passingLane);
72 
74  virtual void setUpLaneSwitch(const DtVector& projectedLocation,DtRailSegment *currentSeg,const int currentLane,
75  const int passingLane);
76 
78  virtual void update(DtRailSegment *currentSeg,DtRailSegment* nextSeg,
79  double drivingSpeed,int passingLane, DtTime simTime = 0.0);
80 
82  virtual void updateNoMovement();
83 
86  virtual void updateFromPSR(const DtVector localPos, DtRailSegment * currentSeg);
87 
90 
94  virtual const DtCoordTransform & localToBodyTransform() const;
95 
97 
98 protected:
99 
106  virtual void useFuel(double fuelUsed);
107 
108  virtual bool checkEntityImmobilized();
109 
115  virtual double fuelLeft() const;
116 
134  virtual void updateRepository(const DtVector & localPosition,
135  const DtVector & localVelocity, const DtVector & localAcceleration,
136  const DtTaitBryan & localOrientation, const DtVector& rotationalVelocity,
137  double newHeading);
138 
142  virtual double calculateAcceleration(double desiredSpeed);
143 
157  virtual void calculateOrientationAndPosition(
158  const DtVector& newLocalProjectedLocation, double newHeading,
159  DtDcm& newLocalOrientation, DtVector& newLocalPosition);
160 
172  bool groundClamp(double heading, const DtVector& location,
173  DtAttachedTerrain& terrain, DtVector& newNormal);
174 
179  void groundClampHighFidelity(double heading, const DtVector& location,
180  DtAttachedTerrain& terrain, DtVector& newNormal);
181 
187  void groundClampLowFidelity(double heading, const DtVector& location,
188  DtAttachedTerrain& terrain, DtVector& newNormal);
189 
191  virtual DtVector calculateRotationalVelocity(
192  const DtTaitBryan& newTopoOrientation,
193  const DtTaitBryan& oldTopoOrientation, double dT);
194 
198  virtual void calculateDirectionOfLinearMotion(
199  const DtDcm& newLocalOrientation, const DtVector& newLocalPosition,
200  DtDcm& newLocalDirectionOfLinearMotion);
201 
204  virtual DtVector calculateBodyAcceleration(double desiredSpeed,
205  const DtVector& oldBodyVelocity,double dT);
206 
207  virtual DtVector calculateBodyVelocity(
208  const DtVector& oldBodyVelocity, const DtVector& newBodyAcceleration,
209  double dT);
210 
211  virtual DtVector calculateProjectedLocation(
212  const DtVector& oldLocalPosition, const DtVector& newBodyAcceleration,
213  const DtVector& oldBodyVelocity,const DtVector & newBodyVelocity, double newHeading);
214 
218  virtual bool rotationalVelocityShouldBeClamped(const DtVector&
219  bodyRotationalVelocity);
220 
224  virtual bool passedTurnPoint(double distSq, double & differance);
225 
226 
238  virtual DtVector determinePositionAlongNextSegment(DtRailSegment * nextSegment,double distance, double & newHeading,
239  int lanePos, DtVector projectedPos);
240 
241 
243  virtual void determinePosition(const DtRailSegment * currentSeg, const int currentLane,
244  DtVector& newLocalProjectedLocation);
245 
246 private:
249 
252 
254  const DtRailMovementUpdater & operator=(const
255  DtRailMovementUpdater & orig);
256 
257 protected:
264  DtCoordTransform myCoordTransform;
266 
269 
275  double myHeadingDiff;
276 
279 
285 
286 };
287 
288 
289 

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)