• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List

LineSegment.h

00001 /**********************************************************************
00002  * $Id: LineSegment.h 2556 2009-06-06 22:22:28Z strk $
00003  *
00004  * GEOS - Geometry Engine Open Source
00005  * http://geos.refractions.net
00006  *
00007  * Copyright (C) 2009  Sandro Santilli <strk@keybit.net>
00008  * Copyright (C) 2006 Refractions Research Inc.
00009  *
00010  * This is free software; you can redistribute and/or modify it under
00011  * the terms of the GNU Lesser General Public Licence as published
00012  * by the Free Software Foundation. 
00013  * See the COPYING file for more information.
00014  *
00015  **********************************************************************
00016  *
00017  * Last port: geom/LineSegment.java rev. 1.30 (JTS-1.9)
00018  *
00019  **********************************************************************/
00020 
00021 #ifndef GEOS_GEOM_LINESEGMENT_H
00022 #define GEOS_GEOM_LINESEGMENT_H
00023 
00024 #include <geos/export.h>
00025 #include <geos/geom/Coordinate.h> // for composition
00026 
00027 #include <geos/inline.h>
00028 
00029 #include <iostream> // for ostream
00030 #include <memory> // for auto_ptr
00031 
00032 // Forward declarations
00033 namespace geos {
00034         namespace geom {
00035                 class CoordinateSequence;
00036                 class GeometryFactory;
00037                 class LineString;
00038         }
00039 }
00040 
00041 namespace geos {
00042 namespace geom { // geos::geom
00043 
00057 class GEOS_DLL LineSegment {
00058 public:
00059 
00060         friend std::ostream& operator<< (std::ostream& o, const LineSegment& l);
00061 
00062         Coordinate p0; 
00063 
00064         Coordinate p1; 
00065 
00066         LineSegment();
00067 
00068         LineSegment(const LineSegment &ls);
00069 
00071         LineSegment(const Coordinate& c0, const Coordinate& c1);
00072 
00073         LineSegment(double x0, double y0, double x1, double y1);
00074 
00075         virtual ~LineSegment();
00076 
00077         void setCoordinates(const Coordinate& c0, const Coordinate& c1);
00078 
00079         // obsoleted, use operator[] instead
00080         //const Coordinate& getCoordinate(size_t i) const;
00081 
00082         const Coordinate& operator[](size_t i) const;
00083         Coordinate& operator[](size_t i);
00084 
00085         void setCoordinates(const LineSegment& ls);
00086 
00088         double getLength() const;
00089 
00091         //
00094         bool isHorizontal() const;
00095 
00097         //
00100         bool isVertical() const;
00101 
00123         int orientationIndex(const LineSegment& seg) const;
00124 
00125         // TODO: deprecate this
00126         int orientationIndex(const LineSegment* seg) const;
00127 
00144         int orientationIndex(const Coordinate& p) const;
00145 
00147         void reverse();
00148 
00150         //
00154         void normalize();
00155 
00157         double angle() const;
00158 
00160         //
00163         void midPoint(Coordinate& ret) const;
00164 
00166         double distance(const LineSegment& ls) const;
00167 
00169         double distance(const Coordinate& p) const;
00170 
00175         double distancePerpendicular(const Coordinate& p) const;
00176 
00191         void pointAlong(double segmentLengthFraction, Coordinate& ret) const;
00192 
00215         void pointAlongOffset(double segmentLengthFraction,
00216                               double offsetDistance,
00217                               Coordinate& ret) const;
00218 
00236         double projectionFactor(const Coordinate& p) const;
00237 
00253         double segmentFraction(const Coordinate& inputPt) const;
00254 
00263         void project(const Coordinate& p, Coordinate& ret) const;
00264 
00280         bool project(const LineSegment& seg, LineSegment& ret) const;
00281 
00283         //
00288         void closestPoint(const Coordinate& p, Coordinate& ret) const;
00289 
00301         int compareTo(const LineSegment& other) const;
00302 
00312         bool equalsTopo(const LineSegment& other) const;
00313 
00321         CoordinateSequence* closestPoints(const LineSegment& line);
00322 
00323         CoordinateSequence* closestPoints(const LineSegment* line);
00324 
00338         bool intersection(const LineSegment& line, Coordinate& coord) const;
00339 
00357         bool lineIntersection(const LineSegment& line, Coordinate& coord) const;
00358 
00365         std::auto_ptr<LineString> toGeometry(const GeometryFactory& gf) const;
00366 
00367 };
00368 
00369 std::ostream& operator<< (std::ostream& o, const LineSegment& l);
00370 
00372 bool operator==(const LineSegment& a, const LineSegment& b);
00373 
00374 
00375 } // namespace geos::geom
00376 } // namespace geos
00377 
00378 #ifdef GEOS_INLINE
00379 # include "geos/geom/LineSegment.inl"
00380 #endif
00381 
00382 #endif // ndef GEOS_GEOM_LINESEGMENT_H
00383 
00384 /**********************************************************************
00385  * $Log$
00386  * Revision 1.8  2006/07/21 14:49:58  strk
00387  * Fixed typo in comment
00388  *
00389  * Revision 1.7  2006/06/12 10:10:39  strk
00390  * Fixed getGeometryN() to take size_t rather then int, changed unsigned int parameters to size_t.
00391  *
00392  * Revision 1.6  2006/04/12 17:19:56  strk
00393  * Ported TaggedLineStringSimplifier class, made LineSegment class
00394  * polymorphic to fix derivation of TaggedLineSegment
00395  *
00396  * Revision 1.5  2006/03/28 09:14:12  strk
00397  * Headers inclusion fix.
00398  *
00399  * Revision 1.4  2006/03/24 09:52:41  strk
00400  * USE_INLINE => GEOS_INLINE
00401  *
00402  * Revision 1.3  2006/03/16 13:28:22  strk
00403  * obsoleted getCoordinate(), replaced by operator[]
00404  *
00405  * Revision 1.2  2006/03/13 22:33:09  strk
00406  * Added missing forward declarations
00407  *
00408  * Revision 1.1  2006/03/09 16:46:49  strk
00409  * geos::geom namespace definition, first pass at headers split
00410  *
00411  **********************************************************************/

Generated on Thu Jul 22 2010 for GEOS by  doxygen 1.7.1