![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2005 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00009 00012 00013 #pragma once 00014 00015 #include "geometry/tdbextent.h" 00016 #include <vlutil/vlHashlist.h> 00017 #include <matrix/LibMatrix.h> 00018 #include <list> 00019 #include "gdb/rangeNetSegMet.h" 00020 #include "gdb/intersectNetSegMet.h" 00021 00022 00023 class DtPhysicalWorld; 00024 class DtVector; 00025 class DtList; 00026 class DtPoint; 00027 class DtNetworkSegment; 00028 class DtVectorNetwork; 00029 class DtPathMetric; 00030 class DtRwVectorObstructionTypeList; 00031 class DtRangeNetworkSegmentMetric; 00032 class DtIntersectNetworkSegmentMetric; 00033 00103 #include "vrfmodel/vrfmodelDefines.h" 00104 class DT_DLL_vrfmodel DtPathPlanner 00105 { 00106 private: 00108 DtPathPlanner(const DtPathPlanner& orig); 00110 DtPathPlanner& operator=(const DtPathPlanner& orig); 00111 00112 public: 00113 DtPathPlanner(); 00114 00115 virtual ~DtPathPlanner(); 00116 00118 00121 virtual void setPathMetric(DtPathMetric* metric); 00122 00124 virtual void setNodeSpacing(double space); 00125 00127 virtual void setSegmentNodeSpacing(double space); 00128 00130 virtual void setSearchAreaWidth(double width); 00131 00134 virtual void setSearchAreaExtraLength(double length); 00135 00138 virtual void initPreferredSegmentMetrics(const DtRwVectorObstructionTypeList& segmentTypes); 00139 00142 virtual void initImpassableSegmentMetrics(const DtRwVectorObstructionTypeList& segmentTypes); 00143 00148 virtual void setCrossCountryPenalty(double penalty); 00149 00152 virtual void setPhysicalWorld(const DtPhysicalWorld* physWorld); 00153 00159 virtual bool makePath(const DtVector& start, const DtVector& goal); 00160 00163 virtual DtList* path(); 00164 00166 virtual void interrupt(); 00167 00169 00171 virtual bool nodeVisited(const DtPoint& point); 00172 00174 virtual void markNodeVisited(const DtPoint& point); 00175 00177 virtual bool nodeVisited(const DtNetworkSegment* segment, int position); 00178 00180 virtual void markNodeVisited(const DtNetworkSegment* segment, int position); 00181 00183 virtual bool nodeSearchable(const DtPoint& point); 00184 00186 virtual double nodeSpacing(); 00187 00189 virtual const DtPathMetric* pathMetric() const; 00190 00192 virtual const std::list<DtRangeNetworkSegmentMetric>& preferredSegmentMetrics() const; 00193 00195 virtual const std::list<DtIntersectNetworkSegmentMetric>& impassableSegmentMetrics() const; 00196 00198 virtual double crossCountryPenalty(); 00199 00200 virtual const DtVectorNetwork* vectorNetwork(); 00201 00205 virtual int findNumberOfNodesOnSegment(const DtNetworkSegment* segment); 00206 00210 virtual int findSegmentPositionAndPoint(const DtNetworkSegment* segment, DtPoint& point); 00211 00213 virtual DtPoint findPointForSegmentPosition(const DtNetworkSegment* segment, int segPos); 00214 00218 virtual DtPoint findAdjacentGridPoint(const DtPoint& point, int xOffset, int yOffset); 00219 00222 virtual DtPoint findNearbyGridPoint(const DtPoint& point, int corner); 00223 00226 virtual bool checkNoGoVectorIntersection(const DtPoint& start, const DtPoint& end); 00227 00233 virtual double calculateCost(const DtPoint& startPoint, const DtPoint& endPoint, 00234 bool checkVectorNetwork = true); 00235 00238 virtual double estimateCostToGoal(const DtPoint& point); 00239 00241 virtual bool isGoal(const DtPoint& point); 00242 00246 virtual bool nearGoal(const DtPoint& point); 00247 00249 virtual const DtPoint& goalPoint(); 00250 00252 virtual void addSolutionPoint(const DtPoint& point); 00253 00255 virtual void clearStats(); 00256 00258 virtual void printStats(); 00259 00264 virtual void nodeCreated(); 00265 00266 virtual void nodeDeleted(); 00267 00268 virtual void nodeExpanded(); 00270 00273 virtual void checkInterrupt(); 00274 00278 static int round(double val); 00279 00280 protected: 00282 void clearPath(); 00283 00285 virtual void initNodeTable(); 00286 00289 virtual void initTransforms(const DtVector& startPoint, const DtVector& endPoint); 00290 00292 virtual void initGridExtent(const DtVector& startPoint, const DtVector& endPoint, 00293 double extraX, double extraY); 00294 00296 void clearVisitedSegmentList(); 00297 00300 virtual void optimizePath(); 00301 00308 virtual void setPathToTerrainHeight(); 00309 00314 virtual void correctPathForTurningRadius(double turningRadius); 00315 00317 virtual void printVisitedSegments(); 00318 00321 virtual DtPoint terrainPointToGrid(const DtPoint& terrainPoint); 00322 00325 virtual DtPoint gridPointToTerrain(const DtPoint& gridPoint); 00326 00331 virtual DtVector setToZeroAltitudeTopo(const DtVector &localPos); 00332 00334 const DtPhysicalWorld* myPhysicalWorld; 00336 DtList* myPath; 00337 00339 bool* myNodeTable; 00340 int myNodeTableXSize; 00341 int myNodeTableYSize; 00342 double myNodeSpacing; 00343 double mySegmentNodeSpacing; 00344 double mySearchAreaWidth; 00345 double mySearchAreaExtraLength; 00346 double myCrossCountryPenalty; 00347 DtExtent mySearchableExtent; 00348 DtPoint myGoalPoint; 00349 DtPathMetric* myPathMetric; 00350 std::list<DtRangeNetworkSegmentMetric> myPreferredSegmentMetrics; 00351 std::list<DtIntersectNetworkSegmentMetric> myImpassableSegmentMetrics; 00352 bool myInterruptFlag; 00353 00354 DtHashList myVisitedSegmentList; 00355 00356 DtCoordTransform myTopoToGridTransform; 00357 DtCoordTransform myGridToTopoTransform; 00358 DtCoordTransform myLocalToTopoTransform; 00359 DtCoordTransform myTopoToLocalTransform; 00360 00362 unsigned int myNumberOfCostsCalculated; 00363 unsigned int myTotalNodesExpanded; 00364 unsigned int myTotalNodesCreated; 00365 unsigned int myTotalNodesPruned; 00366 unsigned int myMaxConcurrentNodes; 00367 unsigned int myTotalNodesInMemory; 00368 00369 }; 00370 00371