diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Doxyfile.in b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Doxyfile.in index 2fb802adac7..354afa8e8c8 100644 --- a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Doxyfile.in +++ b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Doxyfile.in @@ -5,7 +5,11 @@ EXTRACT_ALL = false HIDE_UNDOC_CLASSES = true WARN_IF_UNDOCUMENTED = false HTML_EXTRA_FILES = ${CGAL_PACKAGE_DOC_DIR}/fig/nefertiti.png \ - ${CGAL_PACKAGE_DOC_DIR}/fig/ARAP.png \ - ${CGAL_PACKAGE_DOC_DIR}/fig/orbifold.png - - + ${CGAL_PACKAGE_DOC_DIR}/fig/ARAP_new.jpg \ + ${CGAL_PACKAGE_DOC_DIR}/fig/orbifold_new.jpg \ + ${CGAL_PACKAGE_DOC_DIR}/fig/uniform_new.jpg \ + ${CGAL_PACKAGE_DOC_DIR}/fig/LSCM_new.jpg \ + ${CGAL_PACKAGE_DOC_DIR}/fig/conformal_new.jpg \ + ${CGAL_PACKAGE_DOC_DIR}/fig/authalic_new.jpg \ + ${CGAL_PACKAGE_DOC_DIR}/fig/floater_new.jpg \ + ${CGAL_PACKAGE_DOC_DIR}/fig/hand_base.jpg \ diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Surface_mesh_parameterization.txt b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Surface_mesh_parameterization.txt index deeecf26788..c37f5f10a11 100644 --- a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Surface_mesh_parameterization.txt +++ b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/Surface_mesh_parameterization.txt @@ -7,7 +7,8 @@ namespace CGAL { \anchor chapsurface_mesh_parameterization \cgalAutoToc -\authors Laurent Saboret, Pierre Alliez, Bruno Lévy, and Andreas Fabri +\authors Laurent Saboret, Pierre Alliez, Bruno Lévy, Andreas Fabri, and +Mael Rouxel-Labbé \section Surface_mesh_parameterizationIntroduction Introduction @@ -40,7 +41,7 @@ planar domain (convex polygon vs. free border) and by the bijectivity guarantees of the mapping. The package proposes an interface for any model of the concept `FaceGraph`, -such as the classes `Surface_mesh`, `Polyhedron_3`, `Seam_mesh` or the mesh +such as the classes `Surface_mesh`, `Polyhedron_3`, `Seam_mesh`, or the mesh classes of OpenMesh. Since parameterizing meshes requires an efficient representation of sparse @@ -52,7 +53,9 @@ Note that linear solvers commonly use double precision floating point numbers. Therefore, this package is intended to be used with a \cgal %Cartesian kernel with doubles. \cgalFigureBegin{Surface_mesh_parameterizationfigintroduction,introduction.jpg} -Texture mapping via Least Squares Conformal Maps parameterization. Top: original mesh and texture. Bottom: parameterized mesh (left: parameter space, right: textured mesh). +Texture mapping via Least Squares Conformal Maps parameterization. +Top: original mesh and texture. Bottom: parameterized mesh (left: parameter space, +right: textured mesh). \cgalFigureEnd \section Surface_mesh_parameterizationBasics Basics @@ -96,7 +99,7 @@ of this program. \cgalFigureAnchor{Surface_mesh_parameterizationfigsimple}
- +
\cgalFigureCaptionBegin{Surface_mesh_parameterizationfigsimple} Input (left), parameter space (middle), and textured mesh (right) corresponding to the @@ -176,6 +179,22 @@ The different parameterization methods can be classified into three categories depending on the type of border parameterization that is required: fixed border, free border, and borderless. +Illustrations of the different methods are obtained with the same input model, +the hand model, shown in Figure \cgalFigureRef{Surface_mesh_parameterizationfigbase}. +The hand is a topological sphere, and a `Seam_mesh` is used to cut it into +a topological disk. In Figure \cgalFigureRef{Surface_mesh_parameterizationfigbase}, +the seam is traced in red and the four cones used for Orbifold Tutte +Parameterization (Section \ref Surface_mesh_parameterizationOrbi) are marked with green dots. + +\cgalFigureAnchor{Surface_mesh_parameterizationfigbase} +
+ +
+\cgalFigureCaptionBegin{Surface_mesh_parameterizationfigbase} +The base mesh used in the illustrations of the different methods throughout this +Section. The seam is traced in red. Vertices marked with green dots are cones. +\cgalFigureCaptionEnd + \subsection Surface_mesh_parameterizationFixedBorder Fixed Border Surface Parameterizations Fixed border surface parameterizations are characterized by having a constrained border @@ -200,9 +219,13 @@ vertex \f$ v_i\f$ for a diagonal element, and to 0 for any other matrix entry. Although a bijective mapping is guaranteed when the border is convex, this method does not minimize either angle nor area distortion. -\cgalFigureBegin{Surface_mesh_parameterizationfiguniform,uniform.png} -Left: Tutte Barycentric mapping parameterization (the red line depicts the cut graph). Right: parameter space. -\cgalFigureEnd +\cgalFigureAnchor{Surface_mesh_parameterizationfiguniform} +
+ +
+\cgalFigureCaptionBegin{Surface_mesh_parameterizationfiguniform} +Tutte Barycentric mapping parameterization (the blue line depicts the cut graph). Rightmost: parameter space. +\cgalFigureCaptionEnd \subsubsection Surface_mesh_parameterizationDiscreteAuthalic Discrete Authalic Parameterization @@ -217,9 +240,13 @@ the border is convex. This method solves two \#vertices x \#vertices sparse linear systems. The matrix (the same for both systems) is asymmetric. -\cgalFigureBegin{Surface_mesh_parameterizationfigauthalic,authalic.png} -Discrete Authalic Parameterization. Right: parameter space. -\cgalFigureEnd +\cgalFigureAnchor{Surface_mesh_parameterizationfigauthalic} +
+ +
+\cgalFigureCaptionBegin{Surface_mesh_parameterizationfigauthalic} +Discrete Authalic Parameterization (the blue line depicts the cut graph). Rightmost: parameter space. +\cgalFigureCaptionEnd \subsubsection Surface_mesh_parameterizationDiscreteConformal Discrete Conformal Map @@ -239,9 +266,13 @@ definite (if the border vertices are eliminated from the linear system and if the mesh contains no hole), and thus can be efficiently solved using dedicated linear solvers. -\cgalFigureBegin{Surface_mesh_parameterizationfigconformal,conformal.png} -Left: Discrete Conformal Map. Right: parameter space. -\cgalFigureEnd +\cgalFigureAnchor{Surface_mesh_parameterizationfigconformal} +
+ +
+\cgalFigureCaptionBegin{Surface_mesh_parameterizationfigconformal} +Discrete Conformal Map. Rightmost: parameter space. +\cgalFigureCaptionEnd \subsubsection Surface_mesh_parameterizationFloaterMean Floater Mean Value Coordinates @@ -255,9 +286,13 @@ with a guaranteed one-to-one mapping when the border is convex. This method solves two \#vertices x \#vertices sparse linear systems. The matrix (the same for both systems) is asymmetric. -\cgalFigureBegin{Surface_mesh_parameterizationfigfloater,floater.png} -Floater Mean Value Coordinates. Right: parameter space. -\cgalFigureEnd +\cgalFigureAnchor{Surface_mesh_parameterizationfigfloater} +
+ +
+\cgalFigureCaptionBegin{Surface_mesh_parameterizationfigfloater} +Floater Mean Value Coordinates. Rightmost: parameter space. +\cgalFigureCaptionEnd \subsubsection secBorderParameterizationsforFixedMethods Border Parameterizations for Fixed Methods @@ -320,9 +355,13 @@ is not guaranteed by this method. It solves a (2 \f$ \times\f$ \#triangles) \f$ \times\f$ \#vertices sparse linear system in the least squares sense, which implies solving a symmetric matrix. -\cgalFigureBegin{Surface_mesh_parameterizationfigLSCM,LSCM.png} -Least Squares Conformal Maps. Right: parameter space. -\cgalFigureEnd +\cgalFigureAnchor{Surface_mesh_parameterizationfigLSCM} +
+ +
+\cgalFigureCaptionBegin{Surface_mesh_parameterizationfigLSCM} +Least Squares Conformal Maps. Rightmost: parameter space. +\cgalFigureCaptionEnd \subsubsection Surface_mesh_parameterizationARAP As Rigid As Possible Parameterization @@ -337,16 +376,16 @@ to guarantee that the parameterized mesh is a triangulation. A generalization of the formulation of the local optimization introduces a scalar coefficient λ that allows the user to balance angle and shape distortion: the closer λ is to 0, the more importance is given to the minimization -of angle distortion (conforming parameterization); inversely, when λ grows, +of angle distortion; inversely, when λ grows, the parameterizer gives more and more importance to the minimization of shape -distortion (as rigid as possible). +distortion. \cgalFigureAnchor{Surface_mesh_parameterizationfigARAP}
- +
\cgalFigureCaptionBegin{Surface_mesh_parameterizationfigARAP} -As Rigid As Possible parameterization (the cut is traced in red). Right: parameter space. +As Rigid As Possible parameterization (the blue line depicts the cut graph). Rightmost: parameter space. \cgalFigureCaptionEnd \subsubsection secBorderParameterizationsforFreeMethods Border Parameterizations for Free Methods @@ -381,25 +420,26 @@ and is a generalization of Tutte’s embedding to other topologies, and in parti spheres, which we consider here. The orbifold-Tutte embedding bijectively maps the original surface, that is required to be a topological ball, to a canonical, topologically equivalent, two-dimensional flat surface called an Euclidean orbifold. -There are 17 Euclidean orbifolds, of which only the 4 sphere orbifolds are implemented for now. +There are 17 Euclidean orbifolds, of which only the 4 sphere orbifolds are currently implemented +in CGAL. The orbifold-Tutte embedding yields a seamless, globally bijective parameterization that, similarly to the classic Tutte embedding, only requires solving a sparse linear system for its computation. -The algorithm requires the user to additionally select a set of vertices of the -input mesh and mark them as cones, that is singularities of the unfolding. -Internally, the process requires the uses of seams between the cones, but the choice +The algorithm requires the user to select a set of vertices of the +input mesh and mark them as cones, which will be the singularities of the unfolding. +Internally, the process requires the use of (virtual) seams between the cones, but the choice of these seams do not influence the result. The `Seam_mesh` structure (see also Section \ref secCuttingaMesh) is used for this purpose. \cgalFigureAnchor{Surface_mesh_parameterizationfigOrbifold}
- +
\cgalFigureCaptionBegin{Surface_mesh_parameterizationfigOrbifold} Type IV Orbifold Tutte Embedding. The (four) base cones are shown in green and the -virtual cut is shown in red. Right: parameter space. +virtual cut is traced in blue. Rightmost: parameter space. \cgalFigureCaptionEnd \section secCuttingaMesh Cutting a Mesh @@ -422,7 +462,7 @@ halfedge property using a `Unique_hash_map`. Note that vertices on a seam are duplicated in a `Seam_mesh` structure and thus the UV-coordinates are here associated to the halfedges of the -seam mesh. +underlying (input) mesh. \cgalExample{Surface_mesh_parameterization/seam_Polyhedron_3.cpp} @@ -486,11 +526,11 @@ The main author of the first version of this package was Laurent Saboret, who worked as an engineer at Inria Sophia-Antipolis. For CGAL 4.11 the package has undergone a major rewrite by Andreas Fabri and -Mael Rouxel-Labbé and the Orbifold Tutte Embedding and As-Rigid-As-Possible -parameterization techniques were added. All algorithms are now based on -the`FaceGraph` API. Additionally, the class `Seam_mesh` was introduced to handle -virtual borders. It is also a model of a `FaceGraph`, and replaces a wrapper -which had a more complicated API. +Mael Rouxel-Labbé. The Orbifold Tutte Embedding and As-Rigid-As-Possible +parameterization techniques were added and all algorithms are now based on +the `FaceGraph` API. Additionally, the class `Seam_mesh` was introduced to handle +virtual borders. The class `Seam_mesh` is also a model of a `FaceGraph`, +and replaces a wrapper which had a more complicated API. */ } /* namespace CGAL */ diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/ARAP_new.jpg b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/ARAP_new.jpg new file mode 100644 index 00000000000..ca7a4142893 Binary files /dev/null and b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/ARAP_new.jpg differ diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/LSCM_new.jpg b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/LSCM_new.jpg new file mode 100644 index 00000000000..3d29edcc065 Binary files /dev/null and b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/LSCM_new.jpg differ diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/authalic_new.jpg b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/authalic_new.jpg new file mode 100644 index 00000000000..2018c9d91a8 Binary files /dev/null and b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/authalic_new.jpg differ diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/conformal_new.jpg b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/conformal_new.jpg new file mode 100644 index 00000000000..37024927a9c Binary files /dev/null and b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/conformal_new.jpg differ diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/floater_new.jpg b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/floater_new.jpg new file mode 100644 index 00000000000..40484263e04 Binary files /dev/null and b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/floater_new.jpg differ diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/hand_base.jpg b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/hand_base.jpg new file mode 100644 index 00000000000..c1657de4c2e Binary files /dev/null and b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/hand_base.jpg differ diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/orbifold_new.jpg b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/orbifold_new.jpg new file mode 100644 index 00000000000..8d398c893ec Binary files /dev/null and b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/orbifold_new.jpg differ diff --git a/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/uniform_new.jpg b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/uniform_new.jpg new file mode 100644 index 00000000000..6dcb657e2fa Binary files /dev/null and b/Surface_mesh_parameterization/doc/Surface_mesh_parameterization/fig/uniform_new.jpg differ