OGS
Polygon.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include <list>
7#include <vector>
8
9#include "AABB.h"
10#include "Point.h"
11#include "Polyline.h"
12
13namespace GeoLib
14{
19class Polygon : public Polyline
20{
21public:
28 explicit Polygon(const Polyline& ply, bool init = true);
29
30 Polygon(Polygon const& other);
31 Polygon& operator=(Polygon const& rhs) = delete;
32
33 ~Polygon() override;
34
35 bool initialise();
36
43 bool isPntInPolygon(MathLib::Point3d const& pnt) const;
44
51 bool containsSegment(GeoLib::LineSegment const& segment) const;
52
58 bool isPolylineInPolygon(const Polyline& ply) const;
67 bool isPartOfPolylineInPolygon(const Polyline& ply) const;
68
80 GeoLib::Point& intersection_pnt,
81 std::size_t& seg_num) const;
82
85 std::list<Polygon*> const& computeListOfSimplePolygons();
86
87 friend bool operator==(Polygon const& lhs, Polygon const& rhs);
88
89private:
91
93 const std::list<Polygon*>::const_iterator& polygon_it);
94
95 void splitPolygonAtPoint(const std::list<Polygon*>::iterator& polygon_it);
96 std::list<Polygon*> _simple_polygon_list;
98};
99
106bool operator==(Polygon const& lhs, Polygon const& rhs);
107
108} // end namespace GeoLib
Class AABB is an axis aligned bounding box around a given set of geometric points of (template) type ...
Definition AABB.h:45
std::list< Polygon * > const & computeListOfSimplePolygons()
Definition Polygon.cpp:682
friend bool operator==(Polygon const &lhs, Polygon const &rhs)
Definition Polygon.cpp:585
Polygon & operator=(Polygon const &rhs)=delete
bool isPolylineInPolygon(const Polyline &ply) const
Definition Polygon.cpp:321
void splitPolygonAtPoint(const std::list< Polygon * >::iterator &polygon_it)
Definition Polygon.cpp:521
bool isPntInPolygon(MathLib::Point3d const &pnt) const
Definition Polygon.cpp:194
void splitPolygonAtIntersection(const std::list< Polygon * >::const_iterator &polygon_it)
Definition Polygon.cpp:462
bool isPartOfPolylineInPolygon(const Polyline &ply) const
Definition Polygon.cpp:328
bool containsSegment(GeoLib::LineSegment const &segment) const
Definition Polygon.cpp:250
~Polygon() override
Definition Polygon.cpp:147
std::list< Polygon * > _simple_polygon_list
Definition Polygon.h:96
bool getNextIntersectionPointPolygonLine(GeoLib::LineSegment const &seg, GeoLib::Point &intersection_pnt, std::size_t &seg_num) const
Definition Polygon.cpp:354
bool initialise()
Definition Polygon.cpp:160
void ensureCCWOrientation()
Definition Polygon.cpp:388
Polygon(const Polyline &ply, bool init=true)
Definition Polygon.cpp:124
friend class Polygon
Definition Polyline.h:79
Polyline(const std::vector< Point * > &pnt_vec)
Definition Polyline.cpp:17
bool operator==(LineSegment const &s0, LineSegment const &s1)