From 032ad19677a18b96123950733178cbee07069b6d Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Mon, 15 Feb 2021 16:27:40 +0100 Subject: [PATCH] add custom initialization of gray image to user manual and re-organize to have both custom initializations (gray level and segmented) together --- Mesh_3/doc/Mesh_3/Mesh_3.txt | 40 ++++++++++++++----- Mesh_3/doc/Mesh_3/examples.txt | 2 + ..._gray_image_with_custom_initialization.cpp | 2 +- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/Mesh_3/doc/Mesh_3/Mesh_3.txt b/Mesh_3/doc/Mesh_3/Mesh_3.txt index 86a2dd81e38..45503259386 100644 --- a/Mesh_3/doc/Mesh_3/Mesh_3.txt +++ b/Mesh_3/doc/Mesh_3/Mesh_3.txt @@ -573,13 +573,6 @@ constructor of the `Mesh_criteria` instance. Cut view of a 3D mesh produced from an implicit domain \cgalFigureEnd -\subsubsection Mesh_33DDomainsGrayImageIsosurfaces 3D Domains Bounded by Isosurfaces in 3D Gray-Level Images - -The following example produces a 3D mesh for a domain whose boundary surface -is the isosurface associated to an isovalue inside the input gray-level -3D image. In the distribution you can also find the example \ref Mesh_3/mesh_3D_gray_vtk_image.cpp which can deal with DICOM files as input. - -\cgalExample{Mesh_3/mesh_3D_gray_image.cpp} \subsection Mesh_3MeshingMultipleDomains Meshing Multiple Domains @@ -682,8 +675,18 @@ This allows to remesh a surface, and is equivalent to the function `make_surface View of a remeshed surface. (Left) input mesh (Right) output mesh. Code from subsection \ref Mesh_3RemeshingPolyhedralSurface generates the file. \cgalFigureEnd -\subsection Mesh_3DomainsFromSegmented3DImages Domains From Segmented 3D Images +\subsection Mesh_3DomainsFrom3DImages Domains From 3D Images +\subsubsection Mesh_33DDomainsGrayImageIsosurfaces 3D Domains Bounded by Isosurfaces in 3D Gray-Level Images + +The following example produces a 3D mesh for a domain whose boundary surface +is the isosurface associated to an isovalue inside the input gray-level +3D image. In the distribution you can also find the example \ref Mesh_3/mesh_3D_gray_vtk_image.cpp which can deal with DICOM files as input. + +\cgalExample{Mesh_3/mesh_3D_gray_image.cpp} + + +\subsubsection Mesh_3DomainsFromSegmented3DImages Domains From Segmented 3D Images \anchor Mesh_3_subsection_examples_3d_image The following code produces a 3D mesh from a 3D image. The image is a segmented medical image in which each @@ -703,7 +706,7 @@ The resulting mesh is shown in \cgalFigureRef{figureliver_3d_image_mesh}. Cut view of a 3D mesh produced from a segmented liver image. Code from subsection \ref Mesh_3_subsection_examples_3d_image generates this file. \cgalFigureEnd -\subsubsection Mesh_3DomainsFromSegmented3DImagesWithCustomInitialization Domains From Segmented 3D Images, with a Custom Initialization +\subsubsection Mesh_3DomainsFrom3DImagesWithCustomInitialization Domains From 3D Images, with a Custom Initialization The example \ref Mesh_3/mesh_3D_image_with_custom_initialization.cpp is a modification of \ref Mesh_3/mesh_3D_image.cpp. The goal of that example is to show how @@ -788,6 +791,25 @@ create a 3D image using the undocumented API of CGAL_ImageIO. The code of the function `%random_labeled_image()` is in the header file \ref Mesh_3/random_labeled_image.h\. + +The example \ref Mesh_3/mesh_3D_gray_image_with_custom_initialization.cpp is another +custom initialization example, for meshing of 3D gray-level images. Similarly to +the segmented image example above, the code consists in: + -# the creation of an empty `%c3t3` object, + -# a call to a non-documented function + `initialize_triangulation_from_gray_image()` that inserts points in + the triangulation, + -# then the call to `refine_mesh_3()`. + +\snippet Mesh_3/mesh_3D_gray_image_with_custom_initialization.cpp Meshing + +The code of the function `initialize_triangulation_from_gray_image()` is +in the non-documented header \ref +CGAL/Mesh_3/initialize_triangulation_from_gray_image.h\. As it is +undocumented and may be removed or modified at any time, if you wish to +use it then you should copy-paste it to your user code. + + \subsection Mesh_3UsingVariableSizingField Using Variable Sizing Field \subsubsection Mesh_3SizingFieldasanAnalyticalFunction Sizing Field as an Analytical Function diff --git a/Mesh_3/doc/Mesh_3/examples.txt b/Mesh_3/doc/Mesh_3/examples.txt index eaa86c94551..c1c5e4de1a8 100644 --- a/Mesh_3/doc/Mesh_3/examples.txt +++ b/Mesh_3/doc/Mesh_3/examples.txt @@ -1,9 +1,11 @@ /*! \example Mesh_3/implicit_functions.cpp \example Mesh_3/mesh_3D_image.cpp +\example Mesh_3/mesh_3D_gray_image_with_custom_initialization.cpp \example Mesh_3/mesh_3D_image_with_features.cpp \example Mesh_3/mesh_3D_image_with_custom_initialization.cpp \example Mesh_3/random_labeled_image.h +\example CGAL/Mesh_3/initialize_triangulation_from_gray_image.h \example CGAL/Mesh_3/initialize_triangulation_from_labeled_image.h \example Mesh_3/mesh_3D_image_variable_size.cpp \example Mesh_3/mesh_hybrid_mesh_domain.cpp diff --git a/Mesh_3/examples/Mesh_3/mesh_3D_gray_image_with_custom_initialization.cpp b/Mesh_3/examples/Mesh_3/mesh_3D_gray_image_with_custom_initialization.cpp index c51439d5852..533637a3f75 100644 --- a/Mesh_3/examples/Mesh_3/mesh_3D_gray_image_with_custom_initialization.cpp +++ b/Mesh_3/examples/Mesh_3/mesh_3D_gray_image_with_custom_initialization.cpp @@ -59,7 +59,7 @@ int main(int argc, char* argv[]) domain, image, criteria, - 2.9f, + 2.9f,//isolevel Image_word_type(0)); CGAL::refine_mesh_3(c3t3, domain, criteria); /// [Meshing]