File ConstraintDelaunayTriangulation.h
File List > detail > triangulate > ConstraintDelaunayTriangulation.h
Go to the documentation of this file
// Copyright (c) 2012-2013, IGN France.
// Copyright (c) 2012-2022, Oslandia.
// SPDX-License-Identifier: LGPL-2.0-or-later
#ifndef _SFCGAL_TRIANGULATE_CONSTRAINTDELAUNAYTRIANGULATION_H_
#define _SFCGAL_TRIANGULATE_CONSTRAINTDELAUNAYTRIANGULATION_H_
#include <boost/optional.hpp>
#include "SFCGAL/Coordinate.h"
#include "SFCGAL/config.h"
#include <CGAL/Constrained_Delaunay_triangulation_2.h>
#include <CGAL/Triangulation_face_base_with_info_2.h>
#include <CGAL/Triangulation_vertex_base_with_info_2.h>
namespace SFCGAL {
class TriangulatedSurface;
}
namespace SFCGAL {
namespace triangulate {
class SFCGAL_API ConstraintDelaunayTriangulation {
public:
struct VertexInfo {
VertexInfo() : original() {}
Coordinate original;
};
struct FaceInfo {
FaceInfo() : nestingLevel(-1) {}
int nestingLevel;
bool
in_domain()
{
return nestingLevel % 2 == 1;
}
};
typedef CGAL::Triangulation_vertex_base_with_info_2<VertexInfo, Kernel>
Triangulation_vertex_base;
typedef CGAL::Triangulation_face_base_with_info_2<FaceInfo, Kernel>
Triangulation_face_base;
typedef CGAL::Constrained_triangulation_face_base_2<Kernel,
Triangulation_face_base>
Constrained_triangulation_face_base;
typedef CGAL::Triangulation_data_structure_2<
Triangulation_vertex_base, Constrained_triangulation_face_base>
Triangulation_data_structure;
typedef CGAL::Constrained_Delaunay_triangulation_2<
Kernel, Triangulation_data_structure, CGAL::Exact_predicates_tag>
CDT;
typedef CDT::Vertex_handle Vertex_handle;
typedef CDT::Face_handle Face_handle;
typedef CDT::All_faces_iterator All_faces_iterator;
typedef CDT::Finite_faces_iterator Finite_faces_iterator;
ConstraintDelaunayTriangulation();
Vertex_handle
addVertex(const Coordinate &position);
void
addConstraint(Vertex_handle source, Vertex_handle target);
void
clear();
size_t
numVertices() const;
size_t
numTriangles() const;
inline bool
hasProjectionPlane() const
{
return _projectionPlane.is_initialized();
}
void
setProjectionPlane(const Kernel::Plane_3 &projectionPlane);
Kernel::Plane_3
projectionPlane() const;
inline bool
isInfinite(Vertex_handle vertex) const
{
return _cdt.is_infinite(vertex);
}
inline bool
isInfinite(Face_handle face) const
{
return _cdt.is_infinite(face);
}
void
getTriangles(TriangulatedSurface &triangulatedSurface,
bool filterExteriorParts = false) const;
std::unique_ptr<TriangulatedSurface>
getTriangulatedSurface() const;
inline Finite_faces_iterator
finite_faces_begin() const
{
return _cdt.finite_faces_begin();
}
inline Finite_faces_iterator
finite_faces_end() const
{
return _cdt.finite_faces_end();
}
inline All_faces_iterator
all_faces_begin() const
{
return _cdt.all_faces_begin();
}
inline All_faces_iterator
all_faces_end() const
{
return _cdt.all_faces_end();
}
void
markDomains();
inline CDT &
cdt()
{
return _cdt;
}
inline const CDT &
cdt() const
{
return _cdt;
}
private:
CDT _cdt;
boost::optional<Kernel::Plane_3> _projectionPlane;
};
} // namespace triangulate
} // namespace SFCGAL
#endif