diff --git a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Concepts/RemeshingTriangulationTraits_3.h b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Concepts/RemeshingTriangulationTraits_3.h index 425aedd9905..26667f9b3a4 100644 --- a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Concepts/RemeshingTriangulationTraits_3.h +++ b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Concepts/RemeshingTriangulationTraits_3.h @@ -6,8 +6,8 @@ \cgalRefines TriangulationTraits_3 The concept `RemeshingTriangulationTraits_3` is the first template parameter -of the class Remeshing_triangulation_3. It defines the geometric objects (points, segments, -triangles and tetrahedra) forming the triangulation together with a few +of the class `Remeshing_triangulation_3`. It defines the geometric objects +(points, segments, triangles and tetrahedra) forming the triangulation together with a few geometric predicates and constructions on these objects. \cgalHasModel All models of `Kernel`. diff --git a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Tetrahedral_remeshing.txt b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Tetrahedral_remeshing.txt index d59a10d19fe..40d63c467a7 100644 --- a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Tetrahedral_remeshing.txt +++ b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Tetrahedral_remeshing.txt @@ -7,20 +7,69 @@ namespace CGAL { \authors Jane Tournois, Noura Faraj \cgalAutoToc -This chapter describes the tetrahedral remeshing algorithm... +\section secTetRemeshing Multi-Material Tetrahedral Remeshing -\section secmydefinitions Definitions +This package implements an algorithm for quality tetrahedral remeshing, +introduced by N.Faraj et al in%\cgalCite{faraj2016mvr}. +This practical iterative remeshing algorithm is designed to remesh +multi-material tetrahedral meshes, by iteratively performing a sequence of simple +elementary operations such as edge collapses, edge splits, edge flips, +and vertex relocations following a Laplacian smoothing. +The algorithm results in high quality isotropic meshes, with the desired mesh density, +while preserving the input geometric polyline and surfacic features. -Section on definitions here ... +Specific remeshing rules have been designed to satisfy the following criteria. +First, the algorithm preserves the geometric complex topology, including +multi-material surface patches and polyline features. Polyline features +can be defined as intersections between more than two subdomains, or listed by +the user. Second, it has been made possible to remesh only a selection of cells, +instead of remeshing the whole domain, while preserving or remeshing the +interface surfaces between the preserved and the remeshed tetrahedra. -\section secmyexamples Examples +All the local atomic operations that are performed by the algorithm +preserve the input topology of the geometric complex. -\subsection myFirstExample First Example +The tetrahedral remeshing algorithm improves the quality of dihedral angles, +while targetting the user-defined uniform sizing field and preserving the +topology of the feature complex. -The following example shows ... + +\section secTetRemeshingAPI API + +The tetrahedral remeshing algorithm is implemented as a single free function that +takes only two parameters : the input triangulation, and the desired edge length, +which drives the remeshing process. + +\ref BGLNamedParameters are used to deal with optional parameters. +The page \ref Remeshing_namedparameters describes their usage +and provides a list of the parameters that are used in this package for tuning +of the remeshing process and results. + + +\section secTetRemeshingExamples Examples + +\subsection ssecEx1 Tetrahedral Remeshing Example + +The following example shows the simplest use of the tetrahedral remeshing function. +The only needed parameter is a given target edge length that will drive the remeshing process +towards a high quality tetrahedral mesh with improved dihedral angles, and a more +uniform mesh, with edge lengths getting closer to the input parameter value. \cgalExample{Tetrahedral_remeshing/tetrahedral_remeshing_example.cpp } + + +\subsection ssecEx2 Tetrahedral Remeshing of A Selection + +Optional BGL named parameters can be used to get more precise +control on the remeshing process. In this example, a triangulation with two subdomains +(defined by indices stored in cells) is given as input, but only one of its subdomains +is remeshed. + \cgalExample{Tetrahedral_remeshing/tetrahedral_remeshing_of_one_subdomain.cpp } + + +\subsection ssecEx3 Tetrahedral Remeshing With Polyline Features + \cgalExample{Tetrahedral_remeshing/tetrahedral_remeshing_with_features.cpp } */ diff --git a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_example.cpp b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_example.cpp index dc014048bc1..b786380e7f3 100644 --- a/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_example.cpp +++ b/Tetrahedral_remeshing/examples/Tetrahedral_remeshing/tetrahedral_remeshing_example.cpp @@ -1,14 +1,13 @@ -#define CGAL_TETRAHEDRAL_REMESHING_VERBOSE +//#define CGAL_TETRAHEDRAL_REMESHING_VERBOSE #include -#include -#include -#include - #include #include +#include +#include +#include typedef CGAL::Exact_predicates_inexact_constructions_kernel K; @@ -64,11 +63,5 @@ int main(int argc, char* argv[]) std::ofstream out(file_out.c_str(), std::ios_base::out | std::ios_base::binary); save_binary_triangulation(out, t3); - //// ascii - //file_out = file_in.substr(0, file_in.find_first_of(".")); - //file_out.append("_out.mesh"); - //std::ofstream medit_out(file_out.c_str(), std::ios_base::out); - //c3t3.output_to_medit(medit_out); - return EXIT_SUCCESS; } diff --git a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/Remeshing_triangulation_3.h b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/Remeshing_triangulation_3.h index ede95b4d6d1..623b7513f53 100644 --- a/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/Remeshing_triangulation_3.h +++ b/Tetrahedral_remeshing/include/CGAL/Tetrahedral_remeshing/Remeshing_triangulation_3.h @@ -69,9 +69,6 @@ namespace Tetrahedral_remeshing \tparam Gt is the geometric traits class. It has to be a model of the concept `RemeshingTriangulationTraits_3`. - \tparam Info is the information the user would like to add to a cell. - It has to be `DefaultConstructible` and `Assignable`. - \tparam Concurrency_tag enables sequential versus parallel implementation of the triangulation data structure. Possible values are `Sequential_tag` (the default) and `Parallel_tag`. @@ -91,9 +88,9 @@ namespace Tetrahedral_remeshing typename Concurrency_tag = CGAL::Sequential_tag, typename Cb = CGAL::Triangulation_cell_base_3, typename Vb = CGAL::Triangulation_vertex_base_3 -#ifndef DOXYGEN_RUNNING + /// \cond SKIP_IN_MANUAL , typename Cell_visitor = Default_remeshing_visitor -#endif + /// \endcond > class Remeshing_triangulation_3 : public CGAL::Triangulation_3 Tds; typedef CGAL::Triangulation_3 Self; - typedef Self type; private: Cell_visitor m_visitor; + /// \cond SKIP_IN_MANUAL public: Cell_visitor& visitor() { return m_visitor; } + /// \endcond }; namespace internal diff --git a/Tetrahedral_remeshing/include/CGAL/tetrahedral_remeshing.h b/Tetrahedral_remeshing/include/CGAL/tetrahedral_remeshing.h index 46078b5b4ae..85403b891e8 100644 --- a/Tetrahedral_remeshing/include/CGAL/tetrahedral_remeshing.h +++ b/Tetrahedral_remeshing/include/CGAL/tetrahedral_remeshing.h @@ -43,7 +43,7 @@ namespace CGAL * * This function takes as input a 3-dimensional triangulation * and performs a sequence of atomic operations - * in order to generate as output a quality mesh with a prescribed edge length. + * in order to generate as output a high quality mesh with a prescribed density. * These atomic operations are performed as follows : * - edge splits, until all edges satisfy a prescribed length criterion, * - edge collapses, ntil all edges satisfy a prescribed length criterion, @@ -51,8 +51,11 @@ namespace CGAL * - global smoothing by vertex relocations, * - re-projection of boundary vertices to the initial surface. * - * This remeshing function can deal with multi-domains and preserves the geometry of - * subdomains throughout the remeshing process. Subdomains are defined by indices that + * This remeshing function can deal with multi-domains, multi-material boundaries and features. + * It preserves the geometry of + * subdomains throughout the remeshing process. + * + * Subdomains are defined by indices that * are stored in the cells of the input triangulation, following the `RemeshingCellBase_3` * concept. * The surfacic interfaces between subdomains are formed by facets which two incident cells @@ -63,9 +66,10 @@ namespace CGAL * * @tparam Triangulation a 3-dimensional triangulation * deriving from `Triangulation_3`, - * with cell base model of `RemeshingCellBase_3` + * with geometric traits model of `RemeshingTriangulationTraits_3`, + * cell base model of `RemeshingCellBase_3` * and vertex base model of `RemeshingVertexBase_3`. - * + * * @tparam NamedParameters a sequence of \ref Remeshing_namedparameters "Named Parameters" * * @param tr the triangulation to the remeshed @@ -85,7 +89,6 @@ namespace CGAL * \cgalParamBegin{edge_is_constrained_map} a property map containing the * constrained - or - not status of each edge of `tr`. A constrained edge can be split * or collapsed, but not flipped. -todo//// * Its endpoints could be moved by smoothing * \cgalParamEnd * \cgalParamBegin{cell_is_selected_map} a property map containing the * selected - or - not status for each cell of `tr` for remeshing. @@ -96,6 +99,7 @@ todo//// * Its endpoints could be moved by smoothing * \cgalNamedParamsEnd * @todo implement 1D smoothing for constrained edges + * @todo implement sizing field instead of uniform target edge length */ // * @tparam SizingField model of `CGAL::Sizing_field`