VR-Forces 4.0.4 Class Documentation
include/vrfmodel/railPathPlanner.h
Go to the documentation of this file.
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 

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)