VR-Forces 4.0.4 Class Documentation
include/vrfmodel/railMovementUpdater.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 2010 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 /*******************************************************************************
00006 ** $RCSfile: railMovementUpdater.h,v $ $Revision: 1.1 $ $State: Exp $
00007 ** Created: 4/11/10 MEM
00008 *******************************************************************************/
00009 
00012 
00014 
00015 #pragma once
00016 
00017 //#include "railPSR.h"
00018 #include <vector>
00019 #include <matrix/vlVector.h>
00020 #include <matrix/vlTaitBryan.h>
00021 #include <matrix/coordTransform.h>
00022 
00023 #include "vrfmodel/railSplineCalculator.h"
00024 
00025 class DtVrfMovingObjectStateRepository;
00026 class DtRailMovementController;
00027 class DtRailSegment;
00028 class DtAttachedTerrain;
00029 
00030 
00039 #include "vrfmodel/vrfmodelDefines.h"
00040 class DT_DLL_vrfmodel DtRailMovementUpdater
00041 {
00042 
00043 public:
00044 
00046    DtRailMovementUpdater(DtRailMovementController * parentController, bool useTurnSmoothing,
00047       bool useAcceleration,bool useHighGroundClamp,const DtAttachedTerrain* attachedTerrain);
00048 
00050    virtual ~DtRailMovementUpdater();
00051 
00053    virtual bool init();
00054 
00055    virtual void clear();
00056 
00057    virtual void setEntityState(DtVrfMovingObjectStateRepository* state);
00058 
00063    virtual double setUpTurn(DtRailSegment * currentSeg, DtRailSegment * nextSeg,const int currentLane,
00064       const int drivingLane,double headingDiff,bool useLocalPos = false,DtVector currentLocalPos = DtVector::zero());
00065 
00068    virtual bool turnValid(int currentLane);
00069 
00070    virtual bool recalculateTurnSpline(DtRailSegment * currentSeg, DtRailSegment * nextSeg,const int currentLane,
00071                            const int passingLane);
00072 
00075    virtual bool modifyTurnSpline(const DtVector &currentLocalPos,const DtRailSegment * currentSegment,const DtRailSegment * nextSegment, const int currentLane, const int passingLane);
00076 
00078    virtual void setUpLaneSwitch(const DtVector& projectedLocation,DtRailSegment *currentSeg,const int currentLane,
00079       const int passingLane);
00080 
00082    virtual void update(DtRailSegment *currentSeg,DtRailSegment* nextSeg,
00083       double drivingSpeed,int passingLane, DtTime simTime = 0.0);
00084 
00086    virtual void updateNoMovement();
00087 
00090    virtual void updateFromPSR(const DtVector localPos, DtRailSegment * currentSeg);
00091 
00094 
00098    virtual const DtCoordTransform & localToBodyTransform() const;
00099 
00101 
00102 protected:
00103 
00110    virtual void useFuel(double fuelUsed);
00111 
00112    virtual bool checkEntityImmobilized();
00113 
00119    virtual double fuelLeft() const;
00120 
00138    virtual void updateRepository(const DtVector & localPosition, 
00139       const DtVector & localVelocity, const DtVector & localAcceleration, 
00140       const DtTaitBryan & localOrientation, const DtVector& rotationalVelocity,
00141       double newHeading);
00142 
00146    virtual double calculateAcceleration(double desiredSpeed);
00147 
00161    virtual void calculateOrientationAndPosition(
00162       const DtVector& newLocalProjectedLocation, double newHeading, 
00163       DtDcm& newLocalOrientation, DtVector& newLocalPosition);
00164    
00176    bool groundClamp(double heading, const DtVector& location, 
00177       DtAttachedTerrain& terrain, DtVector& newNormal);
00178 
00183    void groundClampHighFidelity(double heading, const DtVector& location, 
00184       DtAttachedTerrain& terrain, DtVector& newNormal);
00185 
00191    void groundClampLowFidelity(double heading, const DtVector& location, 
00192       DtAttachedTerrain& terrain, DtVector& newNormal);
00193 
00195    virtual DtVector calculateRotationalVelocity(
00196       const DtTaitBryan& newTopoOrientation, 
00197       const DtTaitBryan& oldTopoOrientation, double dT);
00198    
00202    virtual void calculateDirectionOfLinearMotion(
00203       const DtDcm& newLocalOrientation, const DtVector& newLocalPosition, 
00204       DtDcm& newLocalDirectionOfLinearMotion);
00205 
00208    virtual DtVector calculateBodyAcceleration(double desiredSpeed, 
00209       const DtVector& oldBodyVelocity,double dT);
00210 
00211    virtual DtVector calculateBodyVelocity(
00212      const DtVector& oldBodyVelocity, const DtVector& newBodyAcceleration,
00213      double dT);
00214 
00215    virtual DtVector calculateProjectedLocation(
00216       const DtVector& oldLocalPosition, const DtVector& newBodyAcceleration,
00217       const DtVector& oldBodyVelocity,const DtVector & newBodyVelocity, double newHeading);
00218 
00222    virtual bool rotationalVelocityShouldBeClamped(const DtVector&
00223       bodyRotationalVelocity);
00224 
00228    virtual bool passedTurnPoint(double distSq, double & differance);
00229 
00230 
00242    virtual DtVector determinePositionAlongNextSegment(DtRailSegment * nextSegment,double distance, double & newHeading,
00243                                                       int lanePos, DtVector projectedPos);
00244 
00245 
00247    virtual void determinePosition(const DtRailSegment * currentSeg,const double distSq,const int currentLane,
00248                                               DtVector& newLocalProjectedLocation);
00249 
00250 
00251 private:
00253    DtRailMovementUpdater();
00254 
00256    DtRailMovementUpdater(const DtRailMovementUpdater & orig);
00257 
00259    const DtRailMovementUpdater & operator=(const 
00260       DtRailMovementUpdater & orig);
00261 
00262 protected:
00263    DtRailMovementController * myController;
00264    DtVrfMovingObjectStateRepository * myMovingStateRep;
00268    const DtAttachedTerrain* myAttachedTerrain;
00269    DtCoordTransform    myCoordTransform; 
00270    bool     myUseHighFidelityGroundClamping;
00271 
00272    bool     myUseAcceleration;
00273    bool     myUseTurnSmoothing;
00274 
00277    double   myDistanceSqToTurn;
00280    double   myHeadingDiff; 
00281 
00283    DtRailSplineCalculator  myTurnSpline;
00284    
00286    DtRailSplineCalculator  myLaneSwitchSpline;
00288    double   myTurnDistTraveled;
00289    double   myDistAlongSeg;
00290 
00291 };
00292 
00293 
00294 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)