39 OGRMultiPoint multipoint = OGRMultiPoint();
40 for (
const auto & p : points) {
41 multipoint.addGeometry(std::make_unique<OGRPoint>(p.x, p.y));
43 std::unique_ptr<OGRGeometry> delaunay = std::unique_ptr<OGRGeometry>(multipoint.DelaunayTriangulation(tolerance,onlyEdges));
44 if (!delaunay || delaunay->IsEmpty())
47 std::unordered_set<Segment<numeric_type>> delaunayEdges;
48 for(
const auto & line : delaunay->toMultiLineString()) {
51 _edges = std::move(delaunayEdges);
54 std::vector<Triangle<numeric_type>> delaunayTriangles;
55 delaunayTriangles.reserve(delaunay->toGeometryCollection()->getNumGeometries());
56 for(
const auto & triangle : delaunay->toGeometryCollection()){
57 OGRLinearRing * exteriorRing = triangle->toPolygon()->getExteriorRing();
59 {exteriorRing->getX(0), exteriorRing->getY(0)},
60 {exteriorRing->getX(1), exteriorRing->getY(1)},
61 {exteriorRing->getX(2), exteriorRing->getY(2)}
63 delaunayTriangles.push_back(t);
65 _triangles = std::move(delaunayTriangles);
66 _edges = _triangles.transform([](
const auto &
triangles){
68 | std::views::transform([](
const auto & triangle){
return triangle.getSegments();})