// Copyright (c) 2009 INRIA Sophia-Antipolis (France). // All rights reserved. // // This file is part of CGAL (www.cgal.org). // // $URL: https://github.com/CGAL/cgal/blob/v5.1/Mesh_3/include/CGAL/lloyd_optimize_mesh_3.h $ // $Id: lloyd_optimize_mesh_3.h 0779373 2020-03-26T13:31:46+01:00 Sébastien Loriot // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // // Author(s) : Stephane Tayeb // //****************************************************************************** // File Description : lloyd_optimize_mesh_3 function definition. //****************************************************************************** #ifndef CGAL_LLOYD_OPTIMIZE_MESH_3_H #define CGAL_LLOYD_OPTIMIZE_MESH_3_H #include #include #include #include #include #include #include #include #include #include namespace CGAL { #if defined(BOOST_MSVC) # pragma warning(push) # pragma warning(disable:4003) // not enough actual parameters for macro #endif // see CGAL_PRAGMA_DIAG_PUSH // see CGAL_IGNORE_BOOST_PARAMETER_NAME_WARNINGS BOOST_PARAMETER_FUNCTION( (Mesh_optimization_return_code), lloyd_optimize_mesh_3, parameters::tag, (required (in_out(c3t3),*) (domain,*) ) (optional (time_limit_, *, 0 ) (max_iteration_number_, *, 0 ) (convergence_, *, parameters::default_values::lloyd_convergence_ratio ) (freeze_bound_, *, parameters::default_values::lloyd_freeze_ratio ) (do_freeze_, *, parameters::default_values::do_freeze )) ) { return lloyd_optimize_mesh_3_impl(c3t3, domain, time_limit_, max_iteration_number_, convergence_, freeze_bound_ , do_freeze_); } CGAL_PRAGMA_DIAG_POP #if defined(BOOST_MSVC) # pragma warning(pop) #endif template Mesh_optimization_return_code lloyd_optimize_mesh_3_impl(C3T3& c3t3, const MeshDomain& domain, const double time_limit, std::size_t max_iteration_number, const double convergence, const double freeze_bound , const bool do_freeze) { CGAL_precondition( !Mesh_3::internal::has_non_protecting_weights(c3t3.triangulation(), domain)); typedef typename C3T3::Triangulation Tr; typedef Mesh_3::Mesh_sizing_field Sizing; typedef typename Mesh_3::Lloyd_move Move; typedef typename Mesh_3::Mesh_global_optimizer Lloyd_optimizer; // Create optimizer Lloyd_optimizer opt (c3t3, domain, freeze_bound, do_freeze, convergence); // Set max time opt.set_time_limit(time_limit); // 1000 iteration max to avoid infinite loops if ( 0 == max_iteration_number ) max_iteration_number = 1000; // Launch optimization return opt(static_cast(max_iteration_number)); } } // end namespace CGAL #include #endif // CGAL_LLOYD_OPTIMIZE_MESH_3_H