Node.h

00001 /**********************************************************************
00002  * $Id: Node.h 1820 2006-09-06 16:54:23Z mloskot $
00003  *
00004  * GEOS - Geometry Engine Open Source
00005  * http://geos.refractions.net
00006  *
00007  * Copyright (C) 2001-2002 Vivid Solutions Inc.
00008  * Copyright (C) 2005-2006 Refractions Research Inc.
00009  *
00010  * This is free software; you can redistribute and/or modify it under
00011  * the terms of the GNU Lesser General Public Licence as published
00012  * by the Free Software Foundation. 
00013  * See the COPYING file for more information.
00014  *
00015  **********************************************************************/
00016 
00017 #ifndef GEOS_PLANARGRAPH_NODE_H
00018 #define GEOS_PLANARGRAPH_NODE_H
00019 
00020 #include <geos/planargraph/GraphComponent.h> // for inheritance
00021 #include <geos/planargraph/DirectedEdgeStar.h> // for inlines
00022 #include <geos/geom/Coordinate.h> // for composition
00023 
00024 // Forward declarations
00025 namespace geos {
00026         namespace planargraph { 
00027                 //class DirectedEdgeStar;
00028                 class DirectedEdge;
00029         }
00030 }
00031 
00032 namespace geos {
00033 namespace planargraph { // geos.planargraph
00034 
00044 class Node: public GraphComponent {
00045 protected:
00046 
00048         geom::Coordinate pt;
00049 
00051         DirectedEdgeStar *deStar;
00052 
00053 public:
00054 
00055         friend std::ostream& operator << (std::ostream& os, const Node&);
00056 
00064         static std::vector<Edge*>* getEdgesBetween(Node *node0,
00065                         Node *node1);
00066 
00068         Node(const geom::Coordinate& newPt)
00069                 :
00070                 pt(newPt)
00071                 { deStar=new DirectedEdgeStar(); }
00072 
00073         virtual ~Node() {
00074                 delete deStar;
00075         }
00076 
00083         Node(geom::Coordinate& newPt, DirectedEdgeStar *newDeStar)
00084                 :
00085                 pt(newPt),
00086                 deStar(newDeStar)
00087                 {}
00088 
00092         geom::Coordinate& getCoordinate() {
00093                 return pt;
00094         }
00095 
00099         void addOutEdge(DirectedEdge *de) {
00100                 deStar->add(de);
00101         }
00102 
00107         DirectedEdgeStar* getOutEdges() { return deStar; }
00108         const DirectedEdgeStar* getOutEdges() const { return deStar; }
00109 
00113         size_t getDegree() const {
00114                 return deStar->getDegree();
00115         }
00116 
00122         int getIndex(Edge *edge) {
00123                 return deStar->getIndex(edge);
00124         }
00125 
00126 };
00127 
00129 std::ostream& operator<<(std::ostream& os, const Node& n); 
00130 
00131 
00133 //typedef Node planarNode;
00134 
00135 } // namespace geos::planargraph
00136 } // namespace geos
00137 
00138 #endif // GEOS_PLANARGRAPH_NODE_H
00139 
00140 /**********************************************************************
00141  * $Log$
00142  * Revision 1.3  2006/06/12 16:57:26  strk
00143  * Added note about ownership of return from getEdgesBetween()
00144  *
00145  * Revision 1.2  2006/06/12 10:49:43  strk
00146  * unsigned int => size_t
00147  *
00148  * Revision 1.1  2006/03/21 21:42:54  strk
00149  * planargraph.h header split, planargraph:: classes renamed to match JTS symbols
00150  *
00151  **********************************************************************/
00152 

Generated on Fri Mar 27 04:52:53 2009 for GEOS by  doxygen 1.5.4