![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: railSplineCalculator.h,v $ $Revision: 1.1 $ $State: Exp $ 00007 ** Created: 10/6/10 MEM 00008 *******************************************************************************/ 00009 00013 00018 #include "vrfmodel/vrfmodelDefines.h" 00019 00020 #include <vector> 00021 #include <matrix/vlVector.h> 00022 #include <matrix/vlTaitBryan.h> 00023 #include <matrix/coordTransform.h> 00024 00025 class DtRailSegment; 00026 class Coordinate_System; 00027 00028 class DT_DLL_vrfmodel DtRailSplineCalculator 00029 { 00030 public: 00031 DtRailSplineCalculator(); 00032 00033 virtual ~DtRailSplineCalculator(); 00034 00036 virtual bool setUpTurnSpline(const DtRailSegment * currentSeg,const DtRailSegment * nextSeg, 00037 const int currentLane,const int desiredLane,Coordinate_System * coordinateSystem,bool useDefinedEntry = false, 00038 DtVector entryPt = DtVector::zero()); 00039 00041 virtual bool setUpLaneSwitchSpline(const DtVector& projectedLocation,const DtRailSegment *currentSeg,const double bvolHL, 00042 const int currentLane,const int desiredLane,Coordinate_System * coordinateSystem); 00043 00044 virtual bool recalculateSpline(const DtRailSegment * currentSeg,const DtRailSegment * nextSeg, const int currentLane, 00045 const int passingLane,const int previousSwitchDirection,Coordinate_System * coordinateSystem); 00046 00047 virtual bool modifySpline(const DtVector & currentLocalPos,const DtRailSegment * currentSeg,const DtRailSegment * nextSeg, const int currentLane,const int passingLane, 00048 Coordinate_System * coordinateSystem); 00049 00053 virtual void calculateTurnPath(const DtVector & pathEntryPt,const DtVector & pathMidPt,const DtVector & pathExitPt); 00054 00057 virtual DtVector determinePositionAlongCurve(double distance); 00058 00060 virtual double calculateTurnHeading(double oldHeading); 00061 00062 virtual double calculateLaneSwitchHeading(double oldHeading); 00063 00064 virtual bool finishTurn(double oldHeading, double newHeading); 00065 virtual bool finishLaneSwitch(double oldHeading,double newHeading); 00066 00069 virtual const DtVector & splineLocalEntryPoint() const; 00070 virtual const DtVector & splineLocalMidPoint() const; 00071 virtual const DtVector & splineLocalExitPoint() const; 00072 00073 virtual const int turnEntryLane() const; 00074 virtual void setDrivingOnLeft(bool left); 00075 virtual bool drivingOnLeft() const; 00076 00078 virtual void setTurnDirection(const int dir); 00079 virtual const int turnDirection() const; 00080 00081 virtual void setLocalToTopoTransform(const DtCoordTransform & transform); 00082 virtual void setTopoToLocalTransform(const DtCoordTransform & transform); 00083 00084 virtual void clear(); 00085 00086 private: 00088 DtRailSplineCalculator( 00089 const DtRailSplineCalculator& orig); 00090 00092 DtRailSplineCalculator& operator=( 00093 const DtRailSplineCalculator& orig); 00094 00095 protected: 00098 double myTotalSplineDistance; 00100 double mySplineTime; 00103 double myHeadingShift; 00104 00106 DtCoordTransform myLocalToTopoTransform; 00107 DtCoordTransform myTopoToLocalTransform; 00108 00110 int myTurnDirection; 00112 int myTurnEntryLane; 00115 bool myDrivingOnLeft; 00116 00118 DtVector myLocalEntryPoint; 00119 DtVector myLocalMidPoint; 00120 DtVector myLocalExitPoint; 00122 std::vector<DtVector> mySplineCoefficents; 00123 }; 00124