From 2336122ee7c1b91c74e4019caca896c88eef4256 Mon Sep 17 00:00:00 2001 From: Marco Feder Date: Fri, 3 Jun 2022 00:11:05 +0200 Subject: [PATCH] Fix variadic --- include/deal.II/cgal/utilities.h | 54 ++++++++------------------------ tests/cgal/cgal_mesh_criteria.cc | 11 +++---- 2 files changed, 18 insertions(+), 47 deletions(-) diff --git a/include/deal.II/cgal/utilities.h b/include/deal.II/cgal/utilities.h index ae8b7178f9..d94bc384cf 100644 --- a/include/deal.II/cgal/utilities.h +++ b/include/deal.II/cgal/utilities.h @@ -237,52 +237,18 @@ namespace CGALWrappers * Given a closed CGAL::Surface_mesh, this function fills the * region bounded by the surface with tets. * - * The optional variable arguments @p cgal_args can be used to pass additional - * arguments to the CGAL::Mesh_criteria_3 class (see - * https://doc.cgal.org/latest/Mesh_3/index.html) for more information. - * - * The arguments allow for fine control on the size, quality, and distribution - * of the cells of the final triangulation. CGAL uses named parameters for - * these arguments in dimension three, i.e., they must be specified with the - * syntax `CGAL::parameters::parameter_name=parameter_value`, irrespective of - * their order. Accepted parameters are: - * - * - CGAL::parameters::edge_size: a scalar field (resp. a constant) providing - * a space varying (resp. a uniform) upper bound for the lengths of curve - * edges. This parameter has to be set to a positive value when 1-dimensional - * features protection is used. - * - CGAL::parameters::facet_angle: a lower bound for the angles (in degrees) - * of the surface mesh facets. - * - CGAL::parameters::facet_size: a scalar field (resp. a constant) - * describing a space varying (resp. a uniform) upper-bound or for the radii - * of the surface Delaunay balls. - * - CGAL::parameters::facet_distance: a scalar field (resp. a constant) - * describing a space varying (resp. a uniform) upper bound for the distance - * between the facet circumcenter and the center of its surface Delaunay ball. - * - CGAL::parameters::facet_topology: the set of topological constraints - * which have to be verified by each surface facet. The default value is - * CGAL::FACET_VERTICES_ON_SURFACE. See CGAL::Mesh_facet_topology manual page - * to get all possible values. - * - CGAL::parameters::cell_radius_edge_ratio: an upper bound for the - * radius-edge ratio of the mesh tetrahedra. - * - CGAL::parameters::cell_size: a scalar field (resp. a constant) describing - * a space varying (resp. a uniform) upper-bound for the circumradii of the - * mesh tetrahedra. - * - * If no parameters are specified, all the values will be set to `ignored` by - * CGAL. - * * * @param [in] surface_mesh The (closed) surface mesh bounding the volume that has to be filled. * @param [out] triangulation The output triangulation filled with tetrahedra. - * @param [in] cgal_args Additional parameters to pass to the CGAL::make_mesh_3 function. + * @param [in] data AdditionalData object to pass to the CGAL::make_mesh_3 function. See the documentation + * of that struct for a description of those parameters. */ - template + template void cgal_surface_mesh_to_cgal_triangulation( CGAL::Surface_mesh &surface_mesh, C3t3 & triangulation, - Args... cgal_args); + const AdditionalData<3> &data = AdditionalData<3>{}); /** * Given two triangulated surface meshes that bound two volumes, execute a @@ -448,12 +414,12 @@ namespace CGALWrappers - template + template void cgal_surface_mesh_to_cgal_triangulation( CGAL::Surface_mesh &surface_mesh, C3t3 & triangulation, - Args... cgal_args) + const AdditionalData<3> & data) { using CGALPointType = typename C3t3::Point::Point; Assert(CGAL::is_closed(surface_mesh), @@ -470,7 +436,13 @@ namespace CGALWrappers CGAL::Polygon_mesh_processing::triangulate_faces(surface_mesh); Mesh_domain domain(surface_mesh); domain.detect_features(); - Mesh_criteria criteria(cgal_args...); + Mesh_criteria criteria(CGAL::parameters::facet_size = data.facet_size, + CGAL::parameters::facet_angle = data.facet_angle, + CGAL::parameters::facet_distance = + data.facet_distance, + CGAL::parameters::cell_radius_edge_ratio = + data.cell_radius_edge_ratio, + CGAL::parameters::cell_size = data.cell_size); // Mesh generation triangulation = CGAL::make_mesh_3(domain, criteria, diff --git a/tests/cgal/cgal_mesh_criteria.cc b/tests/cgal/cgal_mesh_criteria.cc index f62e432fd8..daeca0e6ef 100644 --- a/tests/cgal/cgal_mesh_criteria.cc +++ b/tests/cgal/cgal_mesh_criteria.cc @@ -46,14 +46,13 @@ test() C3t3 tria; std::ifstream input("input_grids/cube.off"); input >> sm; - cgal_surface_mesh_to_cgal_triangulation(sm, - tria, - CGAL::parameters::cell_size = 0.1); + AdditionalData<3> data; + data.cell_size = .1; + cgal_surface_mesh_to_cgal_triangulation(sm, tria, data); const unsigned int n_intial_facets = tria.number_of_facets_in_complex(); tria.clear(); - cgal_surface_mesh_to_cgal_triangulation(sm, - tria, - CGAL::parameters::cell_size = 0.5); + data.cell_size = .5; + cgal_surface_mesh_to_cgal_triangulation(sm, tria, data); Assert( n_intial_facets > tria.number_of_facets_in_complex(), -- 2.39.5