![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /********************************************************************* 00002 ** Copyright (c) 2004 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: networkEdgeTraverser.h,v $ $Revision: 1.5 $ $State: Exp $ 00007 *********************************************************************/ 00008 #ifndef networkEdgeTraverser_H_ 00009 #define networkEdgeTraverser_H_ 00010 00011 // 00012 // \file networkEdgeTraverser.h 00013 // \brief Contains the DtNetworkEdgeTraverser class declaration. 00014 // 00015 00016 #include "gdb/gdbDefines.h" 00017 #include "gdb/netwrkEdge.h" 00018 00019 class DtNetworkNode; 00020 class DtNetworkEdgePointIter; 00021 class DtNetworkEdgePointConstIter; 00022 class DtNetworkEdgeSegmentIter; 00023 class DtNetworkEdgeSegmentConstIter; 00024 class DtPoint; 00025 class DtString; 00026 00027 // 00028 // DtNetworkEdgeTraverser represents an object that knows how to traverse in the 00029 // specified direction over an DtNetworkEdge. Used for traversing the 00030 // vector network. 00031 class DT_DLL_gdb DtNetworkEdgeTraverser 00032 { 00033 public: 00034 00035 // constructor 00036 DtNetworkEdgeTraverser(DtNetworkEdge& edge, 00037 DtNetworkEdge::DtTraversalDirection traversalDirection); 00038 00039 // destructor 00040 virtual ~DtNetworkEdgeTraverser(); 00041 00042 // copy constructor 00043 DtNetworkEdgeTraverser(const DtNetworkEdgeTraverser& orig); 00044 00045 // assignment operator 00046 DtNetworkEdgeTraverser& operator=(const DtNetworkEdgeTraverser& orig); 00047 00048 00049 // \return a const reference to the traverser's edge 00050 DtNetworkEdge& edge(); 00051 const DtNetworkEdge& edge() const; 00052 00053 DtNetworkNode& startNode(); 00054 DtNetworkNode& endNode(); 00055 00056 const DtNetworkNode& startNode() const; 00057 const DtNetworkNode& endNode() const; 00058 00059 const DtPoint startPoint() const; 00060 const DtPoint endPoint() const; 00061 00062 // \return an iterator, const or non-const, to the beginning or 00063 // the end of the segments 00064 // \note - These are not necessarily forward or reverse in the traditional interator sense. 00065 // It depends on the direction of traversal. If traversing in reverse, a reverse iterator request 00066 // will return a *foward* iterator. 00067 std::auto_ptr<DtNetworkEdgeSegmentIter> segmentsBegin(); 00068 std::auto_ptr<DtNetworkEdgeSegmentConstIter> segmentsBegin() const; 00069 00070 std::auto_ptr<DtNetworkEdgeSegmentIter> segmentsEnd(); 00071 std::auto_ptr<DtNetworkEdgeSegmentConstIter> segmentsEnd() const; 00072 00073 std::auto_ptr<DtNetworkEdgeSegmentIter> getIterForSegment(const DtNetworkSegment& segment); 00074 std::auto_ptr<DtNetworkEdgeSegmentConstIter> getIterForSegment(const DtNetworkSegment& segment) const; 00075 00076 // \return An auto_ptr to a DtNetworkEdgeSegmentIter that can be used to iterate over the segments 00077 // of the edge, in the specified traversal direction. 00078 std::auto_ptr<DtNetworkEdgeSegmentIter> segmentIter(const DtNetworkSegment& segment); 00079 std::auto_ptr<DtNetworkEdgeSegmentConstIter> segmentIter(const DtNetworkSegment& segment) const; 00080 00081 00082 // \return an iterator, const or non-const, to the beginning or 00083 // the end of the points in the edge. 00084 // \note - These are not necessarily beginning/end or forward/reverse in the traditional interator sense. 00085 // It depends on the direction of traversal. If traversing in reverse, a reverse iterator request 00086 // will return a *foward* iterator. 00087 std::auto_ptr<DtNetworkEdgePointIter> pointsBegin(); 00088 std::auto_ptr<DtNetworkEdgePointConstIter> pointsBegin() const; 00089 00090 std::auto_ptr<DtNetworkEdgePointIter> pointsEnd(); 00091 std::auto_ptr<DtNetworkEdgePointConstIter> pointsEnd() const; 00092 00093 // \return a point iterator initialized to the point in the edge specified. 00094 // If the point is NOT in the edge, the iterator will be initialized to the 00095 // starting point in the appropriate direction of traversal. 00096 std::auto_ptr<DtNetworkEdgePointIter> pointIter(const DtPoint& pointInEdge); 00097 std::auto_ptr<DtNetworkEdgePointConstIter> pointIter(const DtPoint& pointInEdge) const; 00098 00099 // \return the DtString "DtNetworkEdgeTraverser" 00100 virtual DtString type(); 00101 00102 virtual DtNetworkEdge::DtTraversalDirection direction() const; 00103 virtual void setDirection(DtNetworkEdge::DtTraversalDirection newDirection); 00104 00105 protected: 00106 // Tests to see if the class invariant is valid. 00107 // \return a boolean indicating whether or not the invariant 00108 // is valid. 00109 bool testInvariant() const; 00110 00111 bool traversingForward() const; 00112 00113 DtNetworkEdge::DtTraversalDirection myTraversalDirection; 00114 00115 DtNetworkEdge* myEdge; 00116 00117 }; 00118 00119 00120 #endif