GEOS
3.8.0dev

Represents a directed edge in a PlanarGraph. More...
#include <DirectedEdge.h>
Public Types  
typedef std::list< DirectedEdge * >  NonConstList 
typedef std::list< const DirectedEdge * >  ConstList 
typedef std::vector < DirectedEdge * >  NonConstVect 
typedef std::vector< const DirectedEdge * >  ConstVect 
typedef std::vector < DirectedEdge * >  Vect 
Public Member Functions  
DirectedEdge (Node *newFrom, Node *newTo, const geom::Coordinate &directionPt, bool newEdgeDirection)  
Constructs a DirectedEdge connecting the from node to the to node. More...  
Edge *  getEdge () const 
Returns this DirectedEdge's parent Edge, or null if it has none.  
void  setEdge (Edge *newParentEdge) 
Associates this DirectedEdge with an Edge (possibly null, indicating no associated Edge).  
int  getQuadrant () const 
Returns 0, 1, 2, or 3, indicating the quadrant in which this DirectedEdge's orientation lies.  
const geom::Coordinate &  getDirectionPt () const 
Returns a point to which an imaginary line is drawn from the fromnode to specify this DirectedEdge's orientation.  
bool  getEdgeDirection () const 
Returns whether the direction of the parent Edge (if any) is the same as that of this Directed Edge.  
Node *  getFromNode () const 
Returns the node from which this DirectedEdge leaves.  
Node *  getToNode () const 
Returns the node to which this DirectedEdge goes.  
geom::Coordinate &  getCoordinate () const 
Returns the coordinate of the fromnode.  
double  getAngle () const 
Returns the angle that the start of this DirectedEdge makes with the positive xaxis, in radians.  
DirectedEdge *  getSym () const 
Returns the symmetric DirectedEdge – the other DirectedEdge associated with this DirectedEdge's parent Edge.  
void  setSym (DirectedEdge *newSym) 
Sets this DirectedEdge's symmetric DirectedEdge, which runs in the opposite direction.  
int  compareTo (const DirectedEdge *obj) const 
Returns 1 if this DirectedEdge has a greater angle with the positive xaxis than b", 0 if the DirectedEdges are collinear, and 1 otherwise. More...  
int  compareDirection (const DirectedEdge *e) const 
Returns 1 if this DirectedEdge has a greater angle with the positive xaxis than b", 0 if the DirectedEdges are collinear, and 1 otherwise. More...  
std::string  print () const 
Prints a detailed string representation of this DirectedEdge to the given PrintStream.  
Public Member Functions inherited from geos::planargraph::GraphComponent  
virtual bool  isVisited () const 
Tests if a component has been visited during the course of a graph algorithm. More...  
virtual void  setVisited (bool p_isVisited) 
Sets the visited flag for this component. More...  
virtual bool  isMarked () const 
Tests if a component has been marked at some point during the processing involving this graph. More...  
virtual void  setMarked (bool p_isMarked) 
Sets the marked flag for this component. More...  
Static Public Member Functions  
static std::vector< Edge * > *  toEdges (std::vector< DirectedEdge * > &dirEdges) 
Returns a List containing the parent Edge (possibly null) for each of the given DirectedEdges. More...  
static void  toEdges (std::vector< DirectedEdge * > &dirEdges, std::vector< Edge * > &parentEdges) 
Add parent Edge (possibly null) of each of the given DirectedEdges to the given parentEdges vector. More...  
Static Public Member Functions inherited from geos::planargraph::GraphComponent  
template<typename T >  
static void  setVisited (T start, T end, bool visited) 
Sets the Visited state for the elements of a container, from start to end iterator. More...  
template<typename T >  
static void  setVisitedMap (T start, T end, bool visited) 
Sets the Visited state for the values of each map container element, from start to end iterator. More...  
template<typename T >  
static void  setMarked (T start, T end, bool marked) 
Sets the Marked state for the elements of a container, from start to end iterator. More...  
template<typename T >  
static void  setMarkedMap (T start, T end, bool marked) 
Sets the Marked state for the values of each map container element, from start to end iterator. More...  
Protected Attributes  
Edge *  parentEdge 
Node *  from 
Node *  to 
geom::Coordinate  p0 
geom::Coordinate  p1 
DirectedEdge *  sym 
bool  edgeDirection 
int  quadrant 
double  angle 
Protected Attributes inherited from geos::planargraph::GraphComponent  
bool  isMarkedVar 
Variable holding ''marked'' status.  
bool  isVisitedVar 
Variable holding ''visited'' status.  
Friends  
std::ostream &  operator<< (std::ostream &, const DirectedEdge &) 
Output operator.  
Represents a directed edge in a PlanarGraph.
A DirectedEdge may or may not have a reference to a parent Edge (some applications of planar graphs may not require explicit Edge objects to be created). Usually a client using a PlanarGraph will subclass DirectedEdge to add its own applicationspecific data and methods.
geos::planargraph::DirectedEdge::DirectedEdge  (  Node *  newFrom, 
Node *  newTo,  
const geom::Coordinate &  directionPt,  
bool  newEdgeDirection  
) 
Constructs a DirectedEdge connecting the from
node to the to
node.
directionPt  specifies this DirectedEdge's direction (given by an imaginary line from the from node to directionPt ) 
edgeDirection  whether this DirectedEdge's direction is the same as or opposite to that of the parent Edge (if any) 
int geos::planargraph::DirectedEdge::compareDirection  (  const DirectedEdge *  e  )  const 
Returns 1 if this DirectedEdge has a greater angle with the positive xaxis than b", 0 if the DirectedEdges are collinear, and 1 otherwise.
Using the obvious algorithm of simply computing the angle is not robust, since the angle calculation is susceptible to roundoff. A robust algorithm is:
int geos::planargraph::DirectedEdge::compareTo  (  const DirectedEdge *  obj  )  const 
Returns 1 if this DirectedEdge has a greater angle with the positive xaxis than b", 0 if the DirectedEdges are collinear, and 1 otherwise.
Using the obvious algorithm of simply computing the angle is not robust, since the angle calculation is susceptible to roundoff. A robust algorithm is:

static 
Returns a List containing the parent Edge (possibly null) for each of the given DirectedEdges.
NOTE: ownership of the returned vector is left to the caller, see the equivalent function taking a vector reference to avoid this.

static 
Add parent Edge (possibly null) of each of the given DirectedEdges to the given parentEdges vector.
NOTE: parents are pushed to the parentEdges vector, make sure it is empty if indexbased corrispondence is important.