diff --git a/Mesh_3/doc/Mesh_3/Mesh_3.txt b/Mesh_3/doc/Mesh_3/Mesh_3.txt index 137a81c6d1a..9178befc0db 100644 --- a/Mesh_3/doc/Mesh_3/Mesh_3.txt +++ b/Mesh_3/doc/Mesh_3/Mesh_3.txt @@ -677,9 +677,10 @@ View of 3D meshes produced from a polyhedral domain with a nested surface. \subsubsection Mesh_3RemeshingPolyhedralSurface Remeshing a Polyhedral Surface The following code creates a polyhedral domain, with only one polyhedron, -and no "bounding polyhedron". Since the volumetric part of the domain may be empty, -and should not be meshed, -it is necessary to use the `CGAL::parameters::surface_only()` parameter to mesh the surface only. +and no "bounding polyhedron". The volumetric part of the domain may be empty +and should not be meshed. +In this case, it is recommended to use the `CGAL::parameters::surface_only()` parameter +to speedup the meshing of the surface only. This enables to remesh a surface, and is equivalent to the function `make_surface_mesh()`. \cgalExample{Mesh_3/remesh_polyhedral_surface.cpp} diff --git a/Mesh_3/include/CGAL/Polyhedral_mesh_domain_3.h b/Mesh_3/include/CGAL/Polyhedral_mesh_domain_3.h index a4a9f49156c..ff76aaea81d 100644 --- a/Mesh_3/include/CGAL/Polyhedral_mesh_domain_3.h +++ b/Mesh_3/include/CGAL/Polyhedral_mesh_domain_3.h @@ -121,6 +121,10 @@ several other components (closed or not) that will be represented in the final mesh. This class is a model of the concept `MeshDomain_3`. +\note When the given surface(s) are not closed, the surface only will be meshed. +It is then recommended to use the parameter `parameters::surface_only()` to speedup +the meshing process. + \tparam Polyhedron stands for the type of the input polyhedral surface(s), model of `FaceListGraph`. @@ -239,11 +243,11 @@ public: /// @{ /*! - Construction from a polyhedral surface which must and free of intersections. - If `polyhedron` is closed, the inside of `bounding_polyhedron` will be meshed, + Construction from a polyhedral surface which must be free of intersections. + If `polyhedron` is closed, its inside will be meshed, otherwise there will be no interior and only the surface will be meshed. */ - Polyhedral_mesh_domain_3(const Polyhedron& bounding_polyhedron + Polyhedral_mesh_domain_3(const Polyhedron& polyhedron #ifndef DOXYGEN_RUNNING , CGAL::Random* p_rng = nullptr #endif @@ -252,14 +256,14 @@ public: , bounding_tree_(&tree_) // the bounding tree is tree_ , p_rng_(p_rng) { - this->add_primitives(bounding_polyhedron); - if(! is_triangle_mesh(bounding_polyhedron)) { + this->add_primitives(polyhedron); + if(!is_triangle_mesh(polyhedron)) { std::cerr << "Your input polyhedron must be triangulated!\n"; CGAL_error_msg("Your input polyhedron must be triangulated!"); } this->build(); - if(!is_closed(bounding_polyhedron)) + if(!is_closed(polyhedron)) set_surface_only(); } diff --git a/Mesh_3/include/CGAL/Polyhedral_mesh_domain_with_features_3.h b/Mesh_3/include/CGAL/Polyhedral_mesh_domain_with_features_3.h index f6e8bf43d24..2612b3f0828 100644 --- a/Mesh_3/include/CGAL/Polyhedral_mesh_domain_with_features_3.h +++ b/Mesh_3/include/CGAL/Polyhedral_mesh_domain_with_features_3.h @@ -72,6 +72,10 @@ It is a model of the concept `MeshDomainWithFeatures_3`. It also provides a member function to automatically detect sharp features and boundaries from the input polyhedral surface(s). +\note When the given surface(s) are not closed, the surface only will be meshed. +It is then recommended to use the parameter `parameters::surface_only()` to speedup +the meshing process. + \tparam IGT stands for a geometric traits class providing the types and functors required to implement the intersection tests and intersection computations for polyhedral boundary surfaces. This parameter has to be @@ -162,11 +166,12 @@ public: /*! Constructor from a polyhedral surface. - No feature detection is done at this level. Note that a copy of `bounding_polyhedron` will be done. - The polyhedron `bounding_polyhedron` has to be closed and free of intersections. - The interior of `bounding_polyhedron` will be meshed. + No feature detection is done at this level. Note that a copy of `polyhedron` will be done. + The polyhedron `polyhedron` must be free of intersections. + If `polyhedron` is closed, its inside will be meshed, + otherwise there will be no interior and only the surface will be meshed. */ - Polyhedral_mesh_domain_with_features_3(const Polyhedron& bounding_polyhedron + Polyhedral_mesh_domain_with_features_3(const Polyhedron& polyhedron #ifndef DOXYGEN_RUNNING , CGAL::Random* p_rng = nullptr #endif @@ -174,10 +179,13 @@ public: : Base(p_rng) , borders_detected_(false) { stored_polyhedra.resize(1); - stored_polyhedra[0] = bounding_polyhedron; + stored_polyhedra[0] = polyhedron; get(face_patch_id_t(), stored_polyhedra[0]); this->add_primitives(stored_polyhedra[0]); this->build(); + + if(!is_closed(polyhedron)) + set_surface_only(); } #ifndef CGAL_NO_DEPRECATED_CODE