GEOS 3.9.1
RayCrossingCounter.h
1/**********************************************************************
2 *
3 * GEOS - Geometry Engine Open Source
4 * http://geos.osgeo.org
5 *
6 * Copyright (C) 2006 Refractions Research Inc.
7 *
8 * This is free software; you can redistribute and/or modify it under
9 * the terms of the GNU Lesser General Public Licence as published
10 * by the Free Software Foundation.
11 * See the COPYING file for more information.
12 *
13 *
14 **********************************************************************
15 *
16 * Last port: algorithm/RayCrossingCounter.java rev. 1.2 (JTS-1.9)
17 *
18 **********************************************************************/
19
20#ifndef GEOS_ALGORITHM_RAYCROSSINGCOUNTER_H
21#define GEOS_ALGORITHM_RAYCROSSINGCOUNTER_H
22
23#include <geos/export.h>
24#include <geos/geom/Location.h>
25
26#include <vector>
27
28// forward declarations
29namespace geos {
30namespace geom {
31class Coordinate;
32class CoordinateSequence;
33}
34}
35
36
37namespace geos {
38namespace algorithm {
39
65class GEOS_DLL RayCrossingCounter {
66private:
67 const geom::Coordinate& point;
68
69 int crossingCount;
70
71 // true if the test point lies on an input segment
72 bool isPointOnSegment;
73
74 // Declare type as noncopyable
75 RayCrossingCounter(const RayCrossingCounter& other) = delete;
76 RayCrossingCounter& operator=(const RayCrossingCounter& rhs) = delete;
77
78public:
89 const geom::CoordinateSequence& ring);
90
93 const std::vector<const geom::Coordinate*>& ring);
94
96 : point(p_point),
97 crossingCount(0),
98 isPointOnSegment(false)
99 { }
100
108 const geom::Coordinate& p2);
109
119 bool
121 {
122 return isPointOnSegment;
123 }
124
136
147
148};
149
150} // geos::algorithm
151} // geos
152
153#endif // GEOS_ALGORITHM_RAYCROSSINGCOUNTER_H
Counts the number of segments crossed by a horizontal ray extending to the right from a given point,...
Definition: RayCrossingCounter.h:65
geom::Location getLocation()
Gets the Location of the point relative to the ring, polygon or multipolygon from which the processed...
static geom::Location locatePointInRing(const geom::Coordinate &p, const std::vector< const geom::Coordinate * > &ring)
Semantically equal to the above, just different args encoding.
bool isOnSegment()
Reports whether the point lies exactly on one of the supplied segments.
Definition: RayCrossingCounter.h:120
static geom::Location locatePointInRing(const geom::Coordinate &p, const geom::CoordinateSequence &ring)
Determines the Location of a point in a ring.
void countSegment(const geom::Coordinate &p1, const geom::Coordinate &p2)
Counts a segment.
bool isPointInPolygon()
Tests whether the point lies in or on the ring, polygon or multipolygon from which the processed segm...
The internal representation of a list of coordinates inside a Geometry.
Definition: CoordinateSequence.h:58
Coordinate is the lightweight class used to store coordinates.
Definition: Coordinate.h:60
Location
Constants representing the location of a point relative to a geometry.
Definition: Location.h:34
Basic namespace for all GEOS functionalities.
Definition: IndexedNestedRingTester.h:26