make 2D-lloyd working with the projection traits

This commit is contained in:
Sébastien Loriot 2016-01-29 15:16:51 +01:00
parent 00c1f9e0f0
commit 72c8aa7b05
3 changed files with 63 additions and 2 deletions

View File

@ -273,7 +273,7 @@ private:
if(!m_cdt.is_infinite(seed)
&& !seed->is_blind()
&& m_cdt.triangle(seed).area() != 0)
&& !m_cdt.triangle(seed).is_degenerate() )
//to avoid flat triangles outside the domain
{
std::stack<Face_handle> faces;

View File

@ -74,7 +74,7 @@ namespace Mesh_2
// Compute mass
FT density = density_2d(tri_centroid, sizing_field);
FT abs_area = CGAL::abs(tri.area());
FT abs_area = CGAL::abs(cdt.geom_traits().compute_area_2_object()(tri[0], tri[1], tri[2]));
FT mass = abs_area * density;
move = move + mass * Vector_2(p, tri_centroid);

View File

@ -0,0 +1,61 @@
#define CGAL_MESH_2_OPTIMIZER_VERBOSE
//#define CGAL_MESH_2_OPTIMIZERS_DEBUG
//#define CGAL_MESH_2_SIZING_FIELD_USE_BARYCENTRIC_COORDINATES
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Constrained_Delaunay_triangulation_2.h>
#include <CGAL/Delaunay_mesher_2.h>
#include <CGAL/Delaunay_mesh_face_base_2.h>
#include <CGAL/Delaunay_mesh_vertex_base_2.h>
#include <CGAL/Delaunay_mesh_size_criteria_2.h>
#include <CGAL/Projection_traits_xy_3.h>
#include <CGAL/lloyd_optimize_mesh_2.h>
#include <iostream>
typedef CGAL::Exact_predicates_inexact_constructions_kernel Ks;
typedef CGAL::Projection_traits_xy_3<Ks> K;
typedef CGAL::Delaunay_mesh_vertex_base_2<K> Vb;
typedef CGAL::Delaunay_mesh_face_base_2<K> Fb;
typedef CGAL::Triangulation_data_structure_2<Vb, Fb> Tds;
typedef CGAL::Constrained_Delaunay_triangulation_2<K, Tds> CDT;
typedef CGAL::Delaunay_mesh_size_criteria_2<CDT> Criteria;
typedef CGAL::Delaunay_mesher_2<CDT, Criteria> Mesher;
typedef CDT::Vertex_handle Vertex_handle;
typedef CDT::Point Point;
int main()
{
CDT cdt;
Vertex_handle va = cdt.insert(Point(-2,0,1));
Vertex_handle vb = cdt.insert(Point(0,-2,1));
Vertex_handle vc = cdt.insert(Point(2,0,1));
Vertex_handle vd = cdt.insert(Point(0,1,1));
cdt.insert(Point(2, 0.6,1));
cdt.insert_constraint(va, vb);
cdt.insert_constraint(vb, vc);
cdt.insert_constraint(vc, vd);
cdt.insert_constraint(vd, va);
std::cout << "Number of vertices: " << cdt.number_of_vertices() << std::endl;
std::cout << "Meshing..." << std::endl;
Mesher mesher(cdt);
mesher.set_criteria(Criteria(0.125, 0.05));
mesher.refine_mesh();
std::cout << "Number of vertices: " << cdt.number_of_vertices() << std::endl;
std::cout << "Run Lloyd optimization...";
CGAL::lloyd_optimize_mesh_2(cdt,
CGAL::parameters::max_iteration_number = 10);
std::cout << " done." << std::endl;
std::cout << "Number of vertices: " << cdt.number_of_vertices() << std::endl;
}