GEOS 3.9.1
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 {
28namespace planargraph {
29class Edge;
30class 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
107 DirectedEdge(Node* newFrom, Node* newTo,
108 const geom::Coordinate& directionPt,
109 bool newEdgeDirection);
110
115 Edge* getEdge() const;
116
121 void setEdge(Edge* newParentEdge);
122
127 int getQuadrant() const;
128
134
139 bool getEdgeDirection() const;
140
145
149 Node* getToNode() const;
150
156
162 double getAngle() const;
163
170
176 void setSym(DirectedEdge* newSym);
177
197 int compareTo(const DirectedEdge* obj) const;
198
218 int compareDirection(const DirectedEdge* e) const;
219
225 std::string print() const;
226
227};
228
231
233std::ostream& operator << (std::ostream&, const DirectedEdge&);
234
235
236} // namespace geos::planargraph
237} // namespace geos
238
239#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
The base class for all graph component classes.
Definition planargraph/GraphComponent.h:46
A node in a PlanarGraph is a location where 0 or more Edge meet.
Definition planargraph/Node.h:45
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:26