/** * \file * \author Thomas Fischer * \date 2011-02-23 * \brief Definition of the EarClippingTriangulation class. * * \copyright * Copyright (c) 2012-2022, OpenGeoSys Community (http://www.opengeosys.org) * Distributed under a Modified BSD License. * See accompanying file LICENSE.txt or * http://www.opengeosys.org/project/license * */ #pragma once #include #include #include "AnalyticalGeometry.h" namespace GeoLib { class Polygon; class Triangle; class EarClippingTriangulation final { public: EarClippingTriangulation(GeoLib::Polygon const& polygon, std::list& triangles, bool rot = true); ~EarClippingTriangulation(); private: /** * copies the points of the polygon to the vector _pnts */ inline void copyPolygonPoints(GeoLib::Polygon const& polygon); inline void ensureCWOrientation(); inline bool isEar(std::size_t v0, std::size_t v1, std::size_t v2) const; inline void initVertexList(); inline void initLists(); inline void clipEars(); /** * a copy of the polygon points */ std::vector _pnts; std::list _vertex_list; std::list _convex_vertex_list; std::list _ear_list; /** * triangles of the triangulation (maybe in the wrong orientation) */ std::list _triangles; GeoLib::Orientation _original_orientation; }; } // end namespace GeoLib