00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef GEOS_PLANARGRAPH_NODE_H
00017 #define GEOS_PLANARGRAPH_NODE_H
00018
00019 #include <geos/export.h>
00020
00021 #include <geos/planargraph/GraphComponent.h>
00022 #include <geos/planargraph/DirectedEdgeStar.h>
00023 #include <geos/geom/Coordinate.h>
00024
00025
00026 namespace geos {
00027 namespace planargraph {
00028
00029 class DirectedEdge;
00030 }
00031 }
00032
00033 namespace geos {
00034 namespace planargraph {
00035
00045 class GEOS_DLL Node: public GraphComponent {
00046 protected:
00047
00049 geom::Coordinate pt;
00050
00052 DirectedEdgeStar *deStar;
00053
00054 public:
00055
00056 friend std::ostream& operator << (std::ostream& os, const Node&);
00057
00065 static std::vector<Edge*>* getEdgesBetween(Node *node0,
00066 Node *node1);
00067
00069 Node(const geom::Coordinate& newPt)
00070 :
00071 pt(newPt)
00072 { deStar=new DirectedEdgeStar(); }
00073
00074 virtual ~Node() {
00075 delete deStar;
00076 }
00077
00084 Node(geom::Coordinate& newPt, DirectedEdgeStar *newDeStar)
00085 :
00086 pt(newPt),
00087 deStar(newDeStar)
00088 {}
00089
00093 geom::Coordinate& getCoordinate() {
00094 return pt;
00095 }
00096
00100 void addOutEdge(DirectedEdge *de) {
00101 deStar->add(de);
00102 }
00103
00108 DirectedEdgeStar* getOutEdges() { return deStar; }
00109 const DirectedEdgeStar* getOutEdges() const { return deStar; }
00110
00114 size_t getDegree() const {
00115 return deStar->getDegree();
00116 }
00117
00123 int getIndex(Edge *edge) {
00124 return deStar->getIndex(edge);
00125 }
00126
00127 };
00128
00130 std::ostream& operator<<(std::ostream& os, const Node& n);
00131
00132
00134
00135
00136 }
00137 }
00138
00139 #endif // GEOS_PLANARGRAPH_NODE_H