Euclid
Geometry Processing and Shape Analysis in C++
Delaunay triangulation.

Delaunay mesh. More...

Classes

struct  Euclid::SplitSite< Mesh >
 The local mesh elements when splitting. More...
 
struct  Euclid::RemeshDelaunayVisitor< Mesh >
 A dumb remesh delaunay visitor. More...
 

Enumerations

enum  Euclid::RemeshDelaunayScheme { Euclid::RemeshDelaunayScheme::SimpleFlip, Euclid::RemeshDelaunayScheme::GeometryPreserving, Euclid::RemeshDelaunayScheme::FeaturePreserving }
 Schemes for remeshing a mesh to be Delaunay. More...
 

Functions

template<typename Mesh >
bool Euclid::is_delaunay (const Mesh &mesh, double eps=1e-14)
 Test if a mesh is Delaunay. More...
 
template<typename Mesh >
bool Euclid::is_delaunay (const Mesh &mesh, edge_t< Mesh > e, double eps=1e-14)
 Test if an edge is locally Delaunay. More...
 
template<typename Mesh >
void Euclid::remesh_delaunay (Mesh &mesh, RemeshDelaunayScheme scheme=RemeshDelaunayScheme::SimpleFlip, double dihedral_angle=10.0)
 Remesh an arbitary mesh into Delaunay mesh. More...
 
template<typename Mesh , typename Visitor >
void Euclid::remesh_delaunay (Mesh &mesh, Visitor &visitor, RemeshDelaunayScheme scheme=RemeshDelaunayScheme::SimpleFlip, double dihedral_angle=10.0)
 Remesh an arbitary mesh into Delaunay mesh. More...
 

Detailed Description

Reference

[1] Dyer, R., etc. Delaunay mesh construction.

Enumeration Type Documentation

Enumerator
SimpleFlip 

Just flip non-locally Delaunay edges untils they disappear.

This will change the underlying geometry when flipping non-planar edges. Some edges cannot be flipped (cf. Fig 6 [1]), thus they output is not guaranteed to be Delaunay.

GeometryPreserving 

Combine edge flip with edge split.

This will keep the underlying geometry intact, since non-planar edges are not flipped. Instead, a lot more vertices will be inserted into the mesh.

FeaturePreserving 

A combination of the simple flip and geometry presvering scheme.

Do edge split only on edges with a dihedral angle larger than a threshold. Otherwise just flip that edge, which will incur a small geometric change.

Function Documentation

template<typename Mesh >
bool Euclid::is_delaunay ( const Mesh &  mesh,
double  eps = 1e-14 
)

Return true if all edges are locally Delaunay.

template<typename Mesh >
bool Euclid::is_delaunay ( const Mesh &  mesh,
edge_t< Mesh >  e,
double  eps = 1e-14 
)

Return true if a1 + a2 <= PI, where a1, a2 are the angles of opposite corners.

template<typename Mesh >
void Euclid::remesh_delaunay ( Mesh &  mesh,
RemeshDelaunayScheme  scheme = RemeshDelaunayScheme::SimpleFlip,
double  dihedral_angle = 10.0 
)
Parameters
meshInput mesh.
schemeRemesh scheme.
dihedral_angleThe threshold used for FeaturePreserving scheme.
template<typename Mesh , typename Visitor >
void Euclid::remesh_delaunay ( Mesh &  mesh,
Visitor &  visitor,
RemeshDelaunayScheme  scheme = RemeshDelaunayScheme::SimpleFlip,
double  dihedral_angle = 10.0 
)
Parameters
meshInput mesh.
visitorRemesh visitor.
schemeRemesh scheme.
dihedral_angleThe threshold used for FeaturePreserving scheme.