VR-Forces 4.3 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
railMovementUpdater.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2013 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;
26 
27 
38 {
39 
40 public:
41 
43  DtRailMovementUpdater(DtRailMovementController * parentController, bool useTurnSmoothing,
44  bool useAcceleration,bool useHighGroundClamp,const DtAttachedTerrain* attachedTerrain);
45 
47  virtual ~DtRailMovementUpdater();
48 
50  virtual bool init();
51 
52  virtual void clear();
53 
54  virtual void setEntityState(DtVrfMovingObjectStateRepository* state);
55 
60  virtual double setUpTurn(DtRailSegment * currentSeg, DtRailSegment * nextSeg,const int currentLane,
61  const int drivingLane,double headingDiff,bool useLocalPos = false,DtVector currentLocalPos = DtVector::zero());
62 
65  virtual bool turnValid(int currentLane);
66 
67  virtual bool recalculateTurnSpline(DtRailSegment * currentSeg, DtRailSegment * nextSeg,const int currentLane,
68  const int passingLane);
69 
72  virtual bool modifyTurnSpline(const DtVector &currentLocalPos,const DtRailSegment * currentSegment,const DtRailSegment * nextSegment, const int currentLane, const int passingLane);
73 
75  virtual void setUpLaneSwitch(const DtVector& projectedLocation,DtRailSegment *currentSeg,const int currentLane,
76  const int passingLane);
77 
79  virtual void update(DtRailSegment *currentSeg,DtRailSegment* nextSeg,
80  double drivingSpeed,int passingLane, DtTime simTime = 0.0);
81 
83  virtual void updateNoMovement();
84 
86  virtual void movementComplete();
87 
90  virtual void updateFromPSR(const DtVector localPos, DtRailSegment * currentSeg);
91 
94 
98  virtual const DtCoordTransform & localToBodyTransform() const;
99 
101  virtual void determinePositionAndSetFromEnd(const DtRailSegment * currentSeg, const int currentLane);
102 
104 
105 protected:
106 
113  virtual void useFuel(double fuelUsed);
114 
115  virtual bool checkEntityImmobilized();
116 
122  virtual double fuelLeft() const;
123 
141  virtual void updateRepository(const DtVector & localPosition,
142  const DtVector & localVelocity, const DtVector & localAcceleration,
143  const DtTaitBryan & localOrientation, const DtVector& rotationalVelocity,
144  double newHeading);
145 
149  virtual double calculateAcceleration(double desiredSpeed);
150 
164  virtual void calculateOrientationAndPosition(
165  const DtVector& newLocalProjectedLocation, double newHeading,
166  DtDcm& newLocalOrientation, DtVector& newLocalPosition);
167 
179  bool groundClamp(double heading, const DtVector& location,
180  DtAttachedTerrain& terrain, DtVector& newNormal);
181 
186  void groundClampHighFidelity(double heading, const DtVector& location,
187  DtAttachedTerrain& terrain, DtVector& newNormal);
188 
194  void groundClampLowFidelity(double heading, const DtVector& location,
195  DtAttachedTerrain& terrain, DtVector& newNormal);
196 
198  virtual DtVector calculateRotationalVelocity(
199  const DtTaitBryan& newTopoOrientation,
200  const DtTaitBryan& oldTopoOrientation, double dT);
201 
205  virtual void calculateDirectionOfLinearMotion(
206  const DtDcm& newLocalOrientation, const DtVector& newLocalPosition,
207  DtDcm& newLocalDirectionOfLinearMotion);
208 
211  virtual DtVector calculateBodyAcceleration(double desiredSpeed,
212  const DtVector& oldBodyVelocity,double dT);
213 
214  virtual DtVector calculateBodyVelocity(
215  const DtVector& oldBodyVelocity, const DtVector& newBodyAcceleration,
216  double dT);
217 
218  virtual DtVector calculateProjectedLocation(
219  const DtVector& oldLocalPosition, const DtVector& newBodyAcceleration,
220  const DtVector& oldBodyVelocity,const DtVector & newBodyVelocity, double newHeading);
221 
225  virtual bool rotationalVelocityShouldBeClamped(const DtVector&
226  bodyRotationalVelocity);
227 
231  virtual bool passedTurnPoint(double distSq, double & differance);
232 
233 
245  virtual DtVector determinePositionAlongNextSegment(DtRailSegment * nextSegment,double distance, double & newHeading,
246  int lanePos, DtVector projectedPos);
247 
248 
250  virtual void determinePosition(const DtRailSegment * currentSeg, const int currentLane,
251  DtVector& newLocalProjectedLocation);
252 
253 private:
256 
259 
261  const DtRailMovementUpdater & operator=(const
262  DtRailMovementUpdater & orig);
263 
264 protected:
271  DtCoordTransform myCoordTransform;
273 
276 
282  double myHeadingDiff;
283 
286 
292 
296 
297 };
298 
299 
300 

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)