diff --git a/Documentation/doc/Documentation/Tutorials/Tutorial_reconstruction.txt b/Documentation/doc/Documentation/Tutorials/Tutorial_reconstruction.txt new file mode 100644 index 00000000000..9708789580d --- /dev/null +++ b/Documentation/doc/Documentation/Tutorials/Tutorial_reconstruction.txt @@ -0,0 +1,96 @@ +/*! + +\page tuto_reconstruction Reconstruction + +\author Simon Giraudot + +Surface reconstruction from point clouds is a wide research topic in +geometry processing. It can be achieved in many different ways +depending on the input properties and the output requirements. This +tutorials explains how the different algorithms of \cgal to perform +reconstruction in the most relevant way. + +\section TutorialsReconstruction_algorithms Which algorithm should I use? + +\cgal \cgalReleaseNumber offers three different algorithms for surface +reconstruction: + +- \ref PkgSurfaceReconstructionFromPointSets +- \ref PkgAdvancingFrontSurfaceReconstruction +- \ref PkgScaleSpaceReconstruction3 + +\todo Tabular with input/output properties and corresponding method + +\section TutorialsReconstruction_input Reading Input + +The reconstruction algorithms on \cgal take a range of iterators on a +container as input and use property maps to access the points (and the +normals if they are needed). Points are typically stored in plain text +format (denoted as 'xyz' format), each point separated by a newline +character and each coordinate separated by a white space. \cgal +provides functions to read such a format: + +- `read_xyz_points()` +- `read_xyz_points_and_normals()` + +Point may also be stored in an 'off' container, for which we also +provide function: + +- `read_off_points()` +- `read_off_points_and_normals()` + +Using these functions is pretty straightforward, as can be seen on the +following example: + +\code{.cpp} +#include +#include + +#include +#include + +// types +typedef CGAL::Exact_predicates_inexact_constructions_kernel Kernel; +typedef Kernel::Point_3 Point; + +int main(int argc, char*argv[]) +{ + std::vector points; + + char* filename = "my_file.xyz"; + std::ifstream stream(filename); + + if (!stream || + !CGAL::read_xyz_points(stream, std::back_inserter(points))) + { + std::cerr << "Error: cannot read file " << filename << std::endl; + return -1; + } + + std::cout << "Read " << points.size () << " point(s)" << std::endl; + + return 0; +} +\endcode + + +\section TutorialsReconstruction_preprocessing Preprocessing + +Because reconstruction algorithms have some specific requirements that +point clouds do not always meet, some preprocessing might be necessary +to get the best results. + +\subsection TutorialsReconstruction_preprocessing_simplification Simplification + +\subsection TutorialsReconstruction_preprocessing_smoothing Smoothing + + + +\section TutorialsReconstruction_reconstruction Reconstruction + +\section TutorialsReconstruction_postprocessing Postprocessing + +\section TutorialsReconstruction_output Writing Output + + +*/ diff --git a/Documentation/doc/Documentation/Tutorials/Tutorials.txt b/Documentation/doc/Documentation/Tutorials/Tutorials.txt new file mode 100644 index 00000000000..b04dea3aee8 --- /dev/null +++ b/Documentation/doc/Documentation/Tutorials/Tutorials.txt @@ -0,0 +1,7 @@ +/*! + +\page tutorials Tutorials + +- \subpage tuto_reconstruction + +*/ diff --git a/Documentation/doc/Documentation/fig/compare_reconstructions.png b/Documentation/doc/Documentation/fig/compare_reconstructions.png new file mode 100644 index 00000000000..5c9a41f0169 Binary files /dev/null and b/Documentation/doc/Documentation/fig/compare_reconstructions.png differ diff --git a/Documentation/doc/Documentation/fig/g-196x196-doc.png b/Documentation/doc/Documentation/fig/g-196x196-doc.png new file mode 100644 index 00000000000..4f76b36d170 Binary files /dev/null and b/Documentation/doc/Documentation/fig/g-196x196-doc.png differ diff --git a/Documentation/doc/Documentation/fig/reconstruction.svg b/Documentation/doc/Documentation/fig/reconstruction.svg new file mode 100644 index 00000000000..d32ecdb5c75 --- /dev/null +++ b/Documentation/doc/Documentation/fig/reconstruction.svg @@ -0,0 +1,1447 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Input + + + Preprocessing + + + Reconstruction + + + Postprocessing + + + Output + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Poisson reconstruction + + + + + + Advancing front reconstruction + + + + + + Scale space reconstruction + + + + + + Normal estimation + + + + + + Simplification + + + + + + Smoothing + + + + + + Points + + + + + + Points with normals + + + + + + Outlier removal + + + + + + Simplification + + + + + + Smoothing + + + + + + Outlier removal + + + + + + Normal orientation + + + + + + XYZ file + + + + + + OFF file + + + + + + read_xyz_points + + + + + + read_off_points + + + + + + PLY file + + + + + + read_ply_points + + + + + + LAS/LAZ file + + + + + + read_las_points + + + + + + Mesh + + + + + + Hole filling + + + + + + Remeshing + + + + + + OFF file + + + + + + write_off + + + + + + PLY file + + + + + + write_ply + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Documentation/doc/Documentation/fig/reconstruction_pipeline.png b/Documentation/doc/Documentation/fig/reconstruction_pipeline.png new file mode 100644 index 00000000000..ce240b9fad8 Binary files /dev/null and b/Documentation/doc/Documentation/fig/reconstruction_pipeline.png differ diff --git a/Documentation/doc/Documentation/fig/reconstruction_preproc.png b/Documentation/doc/Documentation/fig/reconstruction_preproc.png new file mode 100644 index 00000000000..ddcab5a9e0b Binary files /dev/null and b/Documentation/doc/Documentation/fig/reconstruction_preproc.png differ diff --git a/Documentation/doc/Documentation/main.txt b/Documentation/doc/Documentation/main.txt index ce7b9c8784b..37957765c48 100644 --- a/Documentation/doc/Documentation/main.txt +++ b/Documentation/doc/Documentation/main.txt @@ -54,6 +54,7 @@ For releases X.Y, with 3.1 <= X.Y <= 4.1 visit \subpage general_intro \subpage packages \subpage dev_manual +\subpage tutorials \htmlonly