GEOS  3.7.2
QuadEdge.h
1 /**********************************************************************
2  *
3  * GEOS - Geometry Engine Open Source
4  * http://geos.osgeo.org
5  *
6  * Copyright (C) 2012 Excensus LLC.
7  *
8  * This is free software; you can redistribute and/or modify it under
9  * the terms of the GNU Lesser General Licence as published
10  * by the Free Software Foundation.
11  * See the COPYING file for more information.
12  *
13  **********************************************************************
14  *
15  * Last port: triangulate/quadedge/QuadEdge.java r524
16  *
17  **********************************************************************/
18 
19 #ifndef GEOS_TRIANGULATE_QUADEDGE_QUADEDGE_H
20 #define GEOS_TRIANGULATE_QUADEDGE_QUADEDGE_H
21 
22 #include <memory>
23 
24 #include <geos/triangulate/quadedge/Vertex.h>
25 #include <geos/geom/LineSegment.h>
26 
27 namespace geos {
28 namespace triangulate { //geos.triangulate
29 namespace quadedge { //geos.triangulate.quadedge
30 
51 class GEOS_DLL QuadEdge {
52 public:
63  static std::unique_ptr<QuadEdge> makeEdge(const Vertex &o, const Vertex &d);
64 
74  static std::unique_ptr<QuadEdge> connect(QuadEdge &a, QuadEdge &b);
75 
89  static void splice(QuadEdge &a, QuadEdge &b);
90 
96  static void swap(QuadEdge &e);
97 
98 private:
100  QuadEdge *_rot;
101  Vertex vertex; // The vertex that this edge represents
102  QuadEdge *next; // A reference to a connected edge
103  void* data;
104  bool isAlive;
105 
110  QuadEdge();
111 
112 public:
113  virtual ~QuadEdge();
114 
121  virtual void free();
122 
131  const QuadEdge& getPrimary() const;
132 
138  virtual void setData(void* data);
139 
145  virtual void* getData();
146 
157  void remove();
158 
164  inline bool isLive() {
165  return isAlive;
166  }
167 
168 
174  inline void setNext(QuadEdge *next) {
175  this->next = next;
176  }
177 
178  /***************************************************************************
179  * QuadEdge Algebra
180  ***************************************************************************
181  */
182 
188  inline QuadEdge& rot() const {
189  return *_rot;
190  }
191 
197  inline QuadEdge& invRot() const {
198  return rot().sym();
199  }
200 
206  inline QuadEdge& sym() const {
207  return rot().rot();
208  }
209 
215  inline QuadEdge& oNext() const {
216  return *next;
217  }
218 
224  inline QuadEdge& oPrev() const {
225  return rot().oNext().rot();
226  }
227 
233  inline QuadEdge& dNext() const {
234  return sym().oNext().sym();
235  }
236 
242  inline QuadEdge& dPrev() const {
243  return invRot().oNext().invRot();
244  }
245 
251  inline QuadEdge& lNext() const {
252  return invRot().oNext().rot();
253  }
254 
260  inline QuadEdge& lPrev() const {
261  return oNext().sym();
262  }
263 
269  inline QuadEdge& rNext() {
270  return rot().oNext().invRot();
271  }
272 
278  inline QuadEdge& rPrev() {
279  return sym().oNext();
280  }
281 
282  /***********************************************************************************************
283  * Data Access
284  **********************************************************************************************/
290  inline void setOrig(const Vertex &o) {
291  vertex = o;
292  }
293 
299  inline void setDest(const Vertex &d) {
300  sym().setOrig(d);
301  }
302 
308  const Vertex& orig() const {
309  return vertex;
310  }
311 
317  const Vertex& dest() const {
318  return sym().orig();
319  }
320 
326  inline double getLength() const {
327  return orig().getCoordinate().distance(dest().getCoordinate());
328  }
329 
337  bool equalsNonOriented(const QuadEdge &qe) const;
338 
346  bool equalsOriented(const QuadEdge &qe) const;
347 
354  std::unique_ptr<geom::LineSegment> toLineSegment() const;
355 };
356 
357 } //namespace geos.triangulate.quadedge
358 } //namespace geos.triangulate
359 } //namespace goes
360 
361 #endif //GEOS_TRIANGULATE_QUADEDGE_QUADEDGE_H
362 
geos::triangulate::quadedge::QuadEdge
Definition: QuadEdge.h:51
geos::triangulate::quadedge::QuadEdge::setOrig
void setOrig(const Vertex &o)
Definition: QuadEdge.h:290
geos::triangulate::quadedge::Vertex
Definition: Vertex.h:61
geos::triangulate::quadedge::QuadEdge::dNext
QuadEdge & dNext() const
Definition: QuadEdge.h:233
geos::triangulate::quadedge::QuadEdge::makeEdge
static std::unique_ptr< QuadEdge > makeEdge(const Vertex &o, const Vertex &d)
geos
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:25
geos::triangulate::quadedge::QuadEdge::rPrev
QuadEdge & rPrev()
Definition: QuadEdge.h:278
geos::triangulate::quadedge::QuadEdge::orig
const Vertex & orig() const
Definition: QuadEdge.h:308
geos::triangulate::quadedge::QuadEdge::free
virtual void free()
geos::triangulate::quadedge::QuadEdge::lPrev
QuadEdge & lPrev() const
Definition: QuadEdge.h:260
geos::triangulate::quadedge::QuadEdge::setData
virtual void setData(void *data)
geos::triangulate::quadedge::QuadEdge::getLength
double getLength() const
Definition: QuadEdge.h:326
geos::triangulate::quadedge::QuadEdge::getData
virtual void * getData()
geos::triangulate::quadedge::QuadEdge::invRot
QuadEdge & invRot() const
Definition: QuadEdge.h:197
geos::triangulate::quadedge::QuadEdge::setDest
void setDest(const Vertex &d)
Definition: QuadEdge.h:299
geos::triangulate::quadedge::QuadEdge::getPrimary
const QuadEdge & getPrimary() const
geos::triangulate::quadedge::QuadEdge::lNext
QuadEdge & lNext() const
Definition: QuadEdge.h:251
geos::triangulate::quadedge::QuadEdge::setNext
void setNext(QuadEdge *next)
Definition: QuadEdge.h:174
geos::triangulate::quadedge::QuadEdge::rNext
QuadEdge & rNext()
Definition: QuadEdge.h:269
geos::triangulate::quadedge::QuadEdge::swap
static void swap(QuadEdge &e)
geos::triangulate::quadedge::QuadEdge::connect
static std::unique_ptr< QuadEdge > connect(QuadEdge &a, QuadEdge &b)
geos::triangulate::quadedge::QuadEdge::equalsNonOriented
bool equalsNonOriented(const QuadEdge &qe) const
geos::triangulate::quadedge::QuadEdge::dest
const Vertex & dest() const
Definition: QuadEdge.h:317
geos::triangulate::quadedge::QuadEdge::oNext
QuadEdge & oNext() const
Definition: QuadEdge.h:215
geos::triangulate::quadedge::QuadEdge::sym
QuadEdge & sym() const
Definition: QuadEdge.h:206
geos::triangulate::quadedge::QuadEdge::remove
void remove()
geos::triangulate::quadedge::QuadEdge::isLive
bool isLive()
Definition: QuadEdge.h:164
geos::triangulate::quadedge::QuadEdge::oPrev
QuadEdge & oPrev() const
Definition: QuadEdge.h:224
geos::triangulate::quadedge::QuadEdge::rot
QuadEdge & rot() const
Definition: QuadEdge.h:188
geos::triangulate::quadedge::QuadEdge::splice
static void splice(QuadEdge &a, QuadEdge &b)
geos::triangulate::quadedge::QuadEdge::dPrev
QuadEdge & dPrev() const
Definition: QuadEdge.h:242
geos::triangulate::quadedge::QuadEdge::toLineSegment
std::unique_ptr< geom::LineSegment > toLineSegment() const
geos::triangulate::quadedge::QuadEdge::equalsOriented
bool equalsOriented(const QuadEdge &qe) const