GEOS 3.4.2

- Main Page
- Related Pages
- Namespaces
- Classes
- Files

- File List

LineSegment.h
1 /**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2009 2011 Sandro Santilli <strk@keybit.net>
7 * Copyright (C) 2005-2006 Refractions Research Inc.
8 * Copyright (C) 2001-2002 Vivid Solutions Inc.
9 *
10 * This is free software; you can redistribute and/or modify it under
11 * the terms of the GNU Lesser General Public Licence as published
12 * by the Free Software Foundation.
13 * See the COPYING file for more information.
14 *
15 **********************************************************************
16 *
17 * Last port: geom/LineSegment.java r18 (JTS-1.11)
18 *
19 **********************************************************************/
20
21 #ifndef GEOS_GEOM_LINESEGMENT_H
22 #define GEOS_GEOM_LINESEGMENT_H
23
24 #include <geos/export.h>
25 #include <geos/geom/Coordinate.h> // for composition
26
27 #include <geos/inline.h>
28
29 #include <iostream> // for ostream
30 #include <memory> // for auto_ptr
31
32 // Forward declarations
33 namespace geos {
34 namespace geom {
35 class CoordinateSequence;
36 class GeometryFactory;
37 class LineString;
38 }
39 }
40
41 namespace geos {
42 namespace geom { // geos::geom
43
57 class GEOS_DLL LineSegment {
58 public:
59
60 friend std::ostream& operator<< (std::ostream& o, const LineSegment& l);
61
62 Coordinate p0;
63
64 Coordinate p1;
65
66 LineSegment();
67
68 LineSegment(const LineSegment &ls);
69
71 LineSegment(const Coordinate& c0, const Coordinate& c1);
72
73 LineSegment(double x0, double y0, double x1, double y1);
74
75 virtual ~LineSegment();
76
77 void setCoordinates(const Coordinate& c0, const Coordinate& c1);
78
79 // obsoleted, use operator[] instead
80 //const Coordinate& getCoordinate(std::size_t i) const;
81
82 const Coordinate& operator[](std::size_t i) const;
83 Coordinate& operator[](std::size_t i);
84
85 void setCoordinates(const LineSegment& ls);
86
88 double getLength() const;
89
91 //
94 bool isHorizontal() const;
95
97 //
100 bool isVertical() const;
101
123 int orientationIndex(const LineSegment& seg) const;
124
125 // TODO: deprecate this
126 int orientationIndex(const LineSegment* seg) const;
127
144 int orientationIndex(const Coordinate& p) const;
145
147 void reverse();
148
150 //
154 void normalize();
155
157 double angle() const;
158
160 //
163 void midPoint(Coordinate& ret) const;
164
166 double distance(const LineSegment& ls) const;
167
169 double distance(const Coordinate& p) const;
170
175 double distancePerpendicular(const Coordinate& p) const;
176
191 void pointAlong(double segmentLengthFraction, Coordinate& ret) const;
192
217 void pointAlongOffset(double segmentLengthFraction,
218 double offsetDistance,
219 Coordinate& ret) const;
220
238 double projectionFactor(const Coordinate& p) const;
239
255 double segmentFraction(const Coordinate& inputPt) const;
256
265 void project(const Coordinate& p, Coordinate& ret) const;
266
282 bool project(const LineSegment& seg, LineSegment& ret) const;
283
285 //
290 void closestPoint(const Coordinate& p, Coordinate& ret) const;
291
303 int compareTo(const LineSegment& other) const;
304
314 bool equalsTopo(const LineSegment& other) const;
315
323 CoordinateSequence* closestPoints(const LineSegment& line);
324
325 CoordinateSequence* closestPoints(const LineSegment* line);
326
340 bool intersection(const LineSegment& line, Coordinate& coord) const;
341
359 bool lineIntersection(const LineSegment& line, Coordinate& coord) const;
360
367 std::auto_ptr<LineString> toGeometry(const GeometryFactory& gf) const;
368
369 };
370
371 std::ostream& operator<< (std::ostream& o, const LineSegment& l);
372
374 bool operator==(const LineSegment& a, const LineSegment& b);
375
376
377 } // namespace geos::geom
378 } // namespace geos
379
380 #ifdef GEOS_INLINE
381 # include "geos/geom/LineSegment.inl"
382 #endif
383
384 #endif // ndef GEOS_GEOM_LINESEGMENT_H