I have problem with low quality of Tetrahedrons in my generated Mesh.
I am using CGAL::Delaunay_Triangulation_3
for triangulation, from pre-defined point cloud.
My problem is that Elements generated by CGAL are a bit of low quality - presence of sliver etc, I would like to apply some post-processing optimization on the generated Mesh.
Because I have Mesh in form of 'point cloud' I dont have Mesh_Domain_3. All examples I found towards the mesh optimization used make_mesh_3 together with Mesh_Domain.
Is There any way to apply smoothing on generated delaunay mesh using CGAL, or customize CGAL::Delaunay_triangulation_3
for optimization? There is one constraint though - Some of the points in the meshes cannot be moved/erased from the cloud, and some can.
Types that I am using:
typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel;
typedef CGAL::Triangulation_vertex_base_with_info_3<int, Kernel> Vb;
typedef CGAL::Triangulation_data_structure_3<Vb> Tds;
typedef CGAL::Delaunay_triangulation_3<Kernel, Tds> Delaunay;
Generation Code
Delaunay triangulation(nodes.begin(), nodes.end());
//woudld be best to apply mesh smoothing here.
for(auto fit = triangulation.finite_cells_begin(); fit != triangulation.finite_cells_end(); ++fit)
{
auto x1 = fit->vertex(0)->info();
auto x2 = fit->vertex(1)->info();
auto x3 = fit->vertex(2)->info();
auto x4 = fit->vertex(3)->info();
tetras.push_back(new Tetrahedron(nodesToTriangulate[x1],nodesToTriangulate[x2],nodesToTriangulate[x3],nodesToTriangulate[x4]));
}
I decided to use constrained laplace smoothing + variance of topologic smoothing to improve quality of tetrahedron in the mesh. I've had to implement these smoothing myself as they are not available in CGAL.
This greatly improved the quality of the mesh. by Quality I mean the minimal solid angle of tetrahedrons.