![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2010 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile:railPathPlanner.h,v $ $Revision: 1.1 $ $State: Exp $ 00007 ** Created: 3/29/10 MEM 00008 *******************************************************************************/ 00009 00013 00016 00017 #pragma once 00018 00019 #include <matrix/LibMatrix.h> 00020 #include <matrix/vlVector.h> 00021 #include <gdb/netwrkEdge.h> 00022 #include <list> 00023 #include "gdb/rangeNetSegMet.h" 00024 #include "gdb/intersectNetSegMet.h" 00025 #include "vrfutil/rwObjectTypeList.h" 00026 #include "vrfutil/rwVectorObstructionTypeList.h" 00027 #include "vrfutil/railSegment.h" 00028 00029 00030 class DtPhysicalWorld; 00031 class DtVector; 00032 class DtNetworkSegment; 00033 class DtRailPathMetric; 00034 class DtSimManager; 00035 class DtVrfObject; 00036 00076 #include "vrfmodel/vrfmodelDefines.h" 00077 class DT_DLL_vrfmodel DtRailPathPlanner 00078 { 00079 enum SegmentConnectionMode 00080 { 00081 ConnectNewRailMode = 0, 00082 ConnectToEndMode, 00083 ConnectToStartMode, 00084 ConnectExtendRailMode 00085 }; 00086 00087 private: 00089 DtRailPathPlanner(const DtRailPathPlanner& orig); 00091 DtRailPathPlanner& operator=(const DtRailPathPlanner& orig); 00092 00093 public: 00094 DtRailPathPlanner(); 00095 00096 virtual ~DtRailPathPlanner(); 00097 00099 00102 virtual void setPathMetric(DtRailPathMetric* metric); 00103 00107 //virtual void initializeSearch(bool useRouteObjects); 00108 00111 virtual void initPreferredSegmentMetrics(const DtRwVectorObstructionTypeList& segmentTypes); 00112 00115 virtual void initImpassableSegmentMetrics(const DtRwVectorObstructionTypeList& segmentTypes); 00116 00119 //virtual void initPreferredRouteObjectTypes(const DtRwObjectTypeList & routeTypes); 00120 00123 virtual void setPhysicalWorld(const DtPhysicalWorld* physWorld); 00124 00127 virtual bool makePath(const DtVector& start, const DtVector& goal); 00128 00131 virtual void clear(); 00132 00135 virtual DtRailSegmentList* path(); 00136 00138 virtual void interrupt(); 00139 00142 virtual const DtNetworkEdge* findTerminatingEdge(const DtPoint & point,const DtNetworkSegment*& segmentContainingPoint); 00143 00145 virtual void appendEntryEdge(); 00147 virtual void appendExitEdge(); 00148 00151 virtual void createPathFromEntryEdge(); 00152 00155 00156 virtual bool nodeVisited(DtNetworkEdge* edge); 00157 00159 //virtual void markSegmentVisited(const DtRailSegment* segment); 00160 00161 virtual void markNodeVisited(DtNetworkEdge* edge); 00162 00164 virtual const DtRailPathMetric* pathMetric() const; 00165 00167 virtual const std::list<DtRangeNetworkSegmentMetric>& preferredSegmentMetrics() const; 00168 00170 virtual const std::list<DtIntersectNetworkSegmentMetric>& impassableSegmentMetrics() const; 00171 00172 virtual const DtVectorNetwork* vectorNetwork(); 00173 00175 virtual bool atEntryPoint(); 00176 virtual void setAtEntryPoint(bool entering); 00177 00178 virtual void setSearchAreaRadius(double radius); 00179 virtual void setSearchAreaExtraLength(double extra); 00180 00183 //virtual bool checkNoGoVectorIntersection(const DtPoint& start, const DtPoint& end); 00184 00190 virtual double calculateCost(const DtPoint& startPoint, DtNetworkEdge* edge); 00191 00194 virtual bool accessableEdge(DtNetworkEdge * edge); 00195 00198 virtual double estimateCostToGoal(const DtPoint& point); 00199 00204 virtual bool isPointInsideNetwork(const DtPoint& point, double distanceOffset = 0); 00205 00207 virtual bool isGoal(const DtPoint& point); 00208 00210 double projectedDistanceSqXY(const DtPoint& start, const DtPoint& end); 00211 00214 virtual bool segmentContainsPointXY(const DtPoint& start, const DtPoint& end, const DtPoint& testPt, 00215 const DtNetworkSegment * conditionSeg); 00217 virtual const DtPoint& goalPoint(); 00218 00220 virtual void addSolutionEdge(DtNetworkEdge * edge,DtNetworkEdge::DtTraversalDirection direction); 00221 00225 static int round(double val); 00226 00227 virtual bool isEntryEdge(DtNetworkEdge * edge); 00228 virtual bool isExitEdge(DtNetworkEdge * edge); 00229 00230 virtual const DtNetworkSegment * entrySegment(); 00231 virtual const DtNetworkSegment * exitSegment(); 00232 00233 virtual const DtPoint & entryPoint() const; 00234 virtual const DtPoint & exitPoint() const; 00235 00236 DtVrfObject* publishDebugPath(DtSimManager* simManager); 00237 00240 static DtNetworkEdge::DtTraversalDirection findTraversalDirection( 00241 const DtPoint& firstPoint, const DtPoint& secondPoint, const DtNetworkEdge* edge, 00242 const Coordinate_System* coordSys); 00243 00244 protected: 00246 void clearPath(); 00247 00249 void clearVisitedSegmentList(); 00250 00251 virtual DtRailSegment* createNewRailSegment(const DtVector& start,const DtVector& end,const DtNetworkSegment* seg); 00252 00253 protected: 00255 const DtPhysicalWorld* myPhysicalWorld; 00256 00258 double mySearchAreaRadius; 00260 double mySearchAreaExtraLength; 00263 bool mySearchAreaSpecified; 00265 DtRailSegmentList myPath; 00266 00267 const DtNetworkEdge * myEntryEdge; 00268 const DtNetworkSegment * myEntrySegment; 00269 const DtNetworkEdge * myExitEdge; 00270 const DtNetworkSegment * myExitSegment; 00271 00273 DtPoint myStartPoint; 00274 DtPoint myGoalPoint; 00277 DtPoint myEntryPoint; 00278 DtPoint myExitPoint; 00279 DtRailPathMetric* myPathMetric; 00280 std::list<DtRangeNetworkSegmentMetric> myPreferredSegmentMetrics; 00281 std::list<DtString> myPreferredSegmentTypes; 00282 std::list<DtIntersectNetworkSegmentMetric> myImpassableSegmentMetrics; 00283 std::list<DtString> myImpassableSegmentTypes; 00284 bool myInterruptFlag; 00285 bool myAtEntryPoint; 00286 00287 std::list<DtNetworkEdge*> myVisitedSegmentList; 00288 00289 int myNumberOfCostsCalculated; 00290 00291 }; 00292