GEOS 3.6.2
planargraph/DirectedEdge.h
1/**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2001-2002 Vivid Solutions Inc.
7 * Copyright (C) 2005-2006 Refractions Research Inc.
8 *
9 * This is free software; you can redistribute and/or modify it under
10 * the terms of the GNU Lesser General Public Licence as published
11 * by the Free Software Foundation.
12 * See the COPYING file for more information.
13 *
14 **********************************************************************/
15
16#ifndef GEOS_PLANARGRAPH_DIRECTEDEDGE_H
17#define GEOS_PLANARGRAPH_DIRECTEDEDGE_H
18
19#include <geos/export.h>
20#include <geos/planargraph/GraphComponent.h> // for inheritance
21#include <geos/geom/Coordinate.h> // for composition
22
23#include <vector> // for typedefs
24#include <list> // for typedefs
25
26// Forward declarations
27namespace geos {
28 namespace planargraph {
29 class Edge;
30 class Node;
31 }
32}
33
34namespace geos {
35namespace planargraph { // geos.planargraph
36
46class GEOS_DLL DirectedEdge: public GraphComponent {
47
48public:
49
50 friend std::ostream& operator << (std::ostream&, const DirectedEdge&);
51
52 typedef std::list<DirectedEdge *> NonConstList;
53 typedef std::list<const DirectedEdge *> ConstList;
54 typedef std::vector<DirectedEdge *> NonConstVect;
55
56protected:
57 Edge* parentEdge;
58 Node* from;
59 Node* to;
60 geom::Coordinate p0, p1;
61 DirectedEdge* sym; // optional
62 bool edgeDirection;
63 int quadrant;
64 double angle;
65public:
66
67 typedef std::vector<const DirectedEdge *> ConstVect;
68 typedef std::vector<DirectedEdge *> Vect;
69
79 static std::vector<Edge*>* toEdges(
80 std::vector<DirectedEdge*>& dirEdges);
81
90 static void toEdges( std::vector<DirectedEdge*>& dirEdges,
91 std::vector<Edge*>& parentEdges);
92
105 DirectedEdge(Node *newFrom, Node *newTo,
106 const geom::Coordinate &directionPt,
107 bool newEdgeDirection);
108
113 Edge* getEdge() const;
114
119 void setEdge(Edge* newParentEdge);
120
125 int getQuadrant() const;
126
132
137 bool getEdgeDirection() const;
138
143
147 Node* getToNode() const;
148
154
160 double getAngle() const;
161
168
174 void setSym(DirectedEdge *newSym);
175
195 int compareTo(const DirectedEdge* obj) const;
196
216 int compareDirection(const DirectedEdge *e) const;
217
223 std::string print() const;
224
225};
226
228bool pdeLessThan(DirectedEdge *first, DirectedEdge * second);
229
231std::ostream& operator << (std::ostream&, const DirectedEdge&);
232
233
234} // namespace geos::planargraph
235} // namespace geos
236
237#endif // GEOS_PLANARGRAPH_DIRECTEDEDGE_H
Coordinate is the lightweight class used to store coordinates.
Definition Coordinate.h:60
Represents a directed edge in a PlanarGraph.
Definition planargraph/DirectedEdge.h:46
Node * getToNode() const
Returns the node to which this DirectedEdge goes.
Node * getFromNode() const
Returns the node from which this DirectedEdge leaves.
int compareTo(const DirectedEdge *obj) const
Returns 1 if this DirectedEdge has a greater angle with the positive x-axis than b",...
DirectedEdge(Node *newFrom, Node *newTo, const geom::Coordinate &directionPt, bool newEdgeDirection)
Constructs a DirectedEdge connecting the from node to the to node.
const geom::Coordinate & getDirectionPt() const
Returns a point to which an imaginary line is drawn from the from-node to specify this DirectedEdge's...
Edge * getEdge() const
Returns this DirectedEdge's parent Edge, or null if it has none.
int getQuadrant() const
Returns 0, 1, 2, or 3, indicating the quadrant in which this DirectedEdge's orientation lies.
void setEdge(Edge *newParentEdge)
Associates this DirectedEdge with an Edge (possibly null, indicating no associated Edge).
static std::vector< Edge * > * toEdges(std::vector< DirectedEdge * > &dirEdges)
Returns a List containing the parent Edge (possibly null) for each of the given DirectedEdges.
DirectedEdge * getSym() const
Returns the symmetric DirectedEdge – the other DirectedEdge associated with this DirectedEdge's paren...
double getAngle() const
Returns the angle that the start of this DirectedEdge makes with the positive x-axis,...
void setSym(DirectedEdge *newSym)
Sets this DirectedEdge's symmetric DirectedEdge, which runs in the opposite direction.
bool getEdgeDirection() const
Returns whether the direction of the parent Edge (if any) is the same as that of this Directed Edge.
geom::Coordinate & getCoordinate() const
Returns the coordinate of the from-node.
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.
std::string print() const
Prints a detailed string representation of this DirectedEdge to the given PrintStream.
int compareDirection(const DirectedEdge *e) const
Returns 1 if this DirectedEdge has a greater angle with the positive x-axis than b",...
Represents an undirected edge of a PlanarGraph.
Definition planargraph/Edge.h:54
A node in a PlanarGraph is a location where 0 or more Edge meet.
Definition planargraph/Node.h:45
Contains classes to implement a planar graph data structure.
Definition LineMergeDirectedEdge.h:32
bool pdeLessThan(DirectedEdge *first, DirectedEdge *second)
Strict Weak comparator function for containers.
std::ostream & operator<<(std::ostream &, const DirectedEdge &)
Output operator.
Basic namespace for all GEOS functionalities.
Definition IndexedNestedRingTester.h:25