From 5e38ed54df10e9c57a36d0414e574a27b4791b6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mael=20Rouxel-Labb=C3=A9?= Date: Fri, 22 Mar 2024 17:33:43 +0100 Subject: [PATCH] Fix double "Figure" in doc --- BGL/doc/BGL/BGL.txt | 6 ++--- .../doc/Classification/Classification.txt | 8 +++--- .../doc/Isosurfacing_3/Isosurfacing_3.txt | 4 +-- Mesh_2/doc/Mesh_2/Mesh_2.txt | 4 +-- Mesh_3/doc/Mesh_3/Mesh_3.txt | 2 +- .../doc/Minkowski_sum_2/Minkowski_sum_2.txt | 4 +-- Orthtree/doc/Orthtree/Orthtree.txt | 2 +- .../Polygon_mesh_processing.txt | 4 +-- SMDS_3/doc/SMDS_3/SMDS_3.txt | 2 +- .../doc/Shape_detection/Shape_detection.txt | 22 ++++++++-------- .../Surface_mesh_approximation.txt | 26 +++++++++---------- .../Surface_mesh_parameterization.txt | 6 ++--- .../Tetrahedral_remeshing.txt | 2 +- .../Concepts/TriangulationDataStructure.h | 6 ++--- .../doc/Triangulation/Triangulation.txt | 4 +-- .../doc/Triangulation_3/Triangulation_3.txt | 2 +- .../doc/Visibility_2/visibility_2.txt | 2 +- 17 files changed, 53 insertions(+), 53 deletions(-) diff --git a/BGL/doc/BGL/BGL.txt b/BGL/doc/BGL/BGL.txt index cf7e8a73903..cc92527243a 100644 --- a/BGL/doc/BGL/BGL.txt +++ b/BGL/doc/BGL/BGL.txt @@ -585,7 +585,7 @@ so that they virtually become border edges when exploring a seam mesh w The input mesh is referred to as underlying mesh of the seam mesh. We denote `tm` and `sm` the underlying mesh and the seam mesh respectively. -Figure \cgalFigureRef{fig_Seam_mesh_1} shows an example of mesh on which two +\cgalFigureRef{fig_Seam_mesh_1} shows an example of mesh on which two edges, defined by the halfedge pairs `h2-h3` and `h6-h7`, are marked as seams. The introduction of virtual borders modifies the elementary \bgl graph traversal operations: when we circulate around the target of `h7` in the underlying mesh, @@ -599,7 +599,7 @@ A seam mesh with two seam edges `(h2, h3)` and `(h6, h7)`. \cgalFigureEnd A vertex of the underlying mesh may correspond to multiple vertices in the seam mesh. -For example in Figure \cgalFigureRef{fig_Seam_mesh_1}, the target of `h7` corresponds to two +For example in \cgalFigureRef{fig_Seam_mesh_1}, the target of `h7` corresponds to two vertices in the seam mesh, on either side of the virtual border created by the seam edges. For this reason, a vertex `v` of the seam mesh is internally represented as a halfedge `h` of the seam mesh. To obtain a canonical definition, the halfedge `h` is defined as the halfedge @@ -611,7 +611,7 @@ For vertices `v` in the underlying mesh that are not on a seam edge, we choose \subsubsection BGLSeamMeshTraversal Seam Mesh Traversal Using the function `next(halfedge_descriptor, FaceGraph)`, we can walk around a face but also around -a border of a mesh. For the seam mesh `sm` from Figure \cgalFigureRef{fig_Seam_mesh_1}, +a border of a mesh. For the seam mesh `sm` from \cgalFigureRef{fig_Seam_mesh_1}, we have `opposite(h2, sm) == h3*`, and it holds that `face(h3*, sm) == null_face()`. We can walk along this virtual border: starting at `h3*` and repeatedly calling `next(..,sm)`, we will traverse `h6*`, `h7*`, `h2*`, before reaching `h3*` again. diff --git a/Classification/doc/Classification/Classification.txt b/Classification/doc/Classification/Classification.txt index 48c7531b362..2c5a4e3b2d1 100644 --- a/Classification/doc/Classification/Classification.txt +++ b/Classification/doc/Classification/Classification.txt @@ -10,7 +10,7 @@ This component implements the algorithm described in \cgalCite{cgal:lm-clscm-12} \section Classification_Organization Package Organization -%Classification of data sets is achieved as follows (see Figure \cgalFigureRef{Classification_organization_fig}): +%Classification of data sets is achieved as follows (see \cgalFigureRef{Classification_organization_fig}): - some analysis is performed on the input data set; - features are computed based on this analysis; @@ -314,7 +314,7 @@ Though it is possible to set them up one by one, \cgal also provides a method [t - the same mechanism is repeated until all features' ranges have been tested. Weights are only changed one by one, the other ones are kept to the values that gave the latest best score. -This usually converges to a satisfying solution (see Figure \cgalFigureRef{Classification_trainer_fig}). The number of trials is user defined, set to 300 by default. Using at least 10 times the number of features is advised (for example, at least 300 iterations if 30 features are used). If the solution is not satisfying, more inliers can be selected, for example, in a region that the user identifies as misclassified with the current configuration. The training algorithm keeps, as initialization, the best weights found at the previous round and carries on trying new weights by taking new inliers into account. +This usually converges to a satisfying solution (see \cgalFigureRef{Classification_trainer_fig}). The number of trials is user defined, set to 300 by default. Using at least 10 times the number of features is advised (for example, at least 300 iterations if 30 features are used). If the solution is not satisfying, more inliers can be selected, for example, in a region that the user identifies as misclassified with the current configuration. The training algorithm keeps, as initialization, the best weights found at the previous round and carries on trying new weights by taking new inliers into account. \cgalFigureBegin{Classification_trainer_fig,classif_training.png} Example of evolution of the mean intersection-over-union. The purple curve is the score computed at the current iteration, green curve is the best score found so far. @@ -322,7 +322,7 @@ Example of evolution of the mean intersection-over-union. The purple curve is th \subsubsection Classification_sowf_result Result -Figure \cgalFigureRef{Classification_sowf_result_fig} shows an example of output on a defect-laden point set. The accuracy on this example is 0.97 with a mean intersection-over-union of 0.85 (see section \ref Classification_evaluation). +\cgalFigureRef{Classification_sowf_result_fig} shows an example of output on a defect-laden point set. The accuracy on this example is 0.97 with a mean intersection-over-union of 0.85 (see section \ref Classification_evaluation). \cgalFigureBegin{Classification_sowf_result_fig,noise_outliers.png} Example of classification on a point set with medium noise and outliers (left: input, right: output). _Ground_ is orange, _roofs_ are pink, _vegetation_ is green. Outliers are classified with an additional label _outlier_ in black. @@ -398,7 +398,7 @@ smoothing by providing a model of `CGAL::Classification::NeighborQuery`. - `CGAL::Classification::classify_with_graphcut()`: this method offers the best quality but requires longer computation time (see -Figure \cgalFigureRef{Classification_image}, bottom-right). The +\cgalFigureRef{Classification_image}, bottom-right). The total energy that is minimized is the sum of the partial data term \f$E_{di}(x_i)\f$ and of a pairwise interaction energy defined by the standard Potts model \cgalCite{cgal:l-mrfmi-09} : diff --git a/Isosurfacing_3/doc/Isosurfacing_3/Isosurfacing_3.txt b/Isosurfacing_3/doc/Isosurfacing_3/Isosurfacing_3.txt index 37e7da5804d..af4598ba90b 100644 --- a/Isosurfacing_3/doc/Isosurfacing_3/Isosurfacing_3.txt +++ b/Isosurfacing_3/doc/Isosurfacing_3/Isosurfacing_3.txt @@ -57,7 +57,7 @@ A vertex is created for each grid edge with a sign change, i.e., where the edge More specifically, the vertex position is computed via linear interpolation of the scalar field values evaluated at the cell corners forming the edge. These vertices are connected to form triangles within the cell, depending on the configuration -of signs at the cell corners. Figure \cgalFigureRef{IsosurfacingMCCases} illustrates the configurations in 2D. +of signs at the cell corners. \cgalFigureRef{IsosurfacingMCCases} illustrates the configurations in 2D. In 3D, there is no less than 33 cases (not shown) \cgalCite{cgal:c-mcctci-95}. \cgalFigureAnchor{IsosurfacingMCCases} @@ -84,7 +84,7 @@ MC often generates more triangles, and more skinny triangles with small or large depicting the mesh edges in black in addition to the shaded facets. MC does not preserve the sharp features present in the isovalue of the input scalar field -(see Figure \cgalFigureRef{IsosurfacingMCDC}). +(see \cgalFigureRef{IsosurfacingMCDC}). \subsection SubSecTMC Topologically Correct Marching Cubes (TMC) diff --git a/Mesh_2/doc/Mesh_2/Mesh_2.txt b/Mesh_2/doc/Mesh_2/Mesh_2.txt index 7d31bb1fc85..ee95dd99fb5 100644 --- a/Mesh_2/doc/Mesh_2/Mesh_2.txt +++ b/Mesh_2/doc/Mesh_2/Mesh_2.txt @@ -262,8 +262,8 @@ of their Voronoi cells, and updating the Delaunay connectivity of the triangulat The center of mass is computed with respect to a sizing function that was designed to preserve the local density of points in the mesh generated by Delaunay refinement. -See Figure \cgalFigureRef{Lloydfigure} for a mesh generated by `refine_Delaunay_mesh_2()` and optimized -with `lloyd_optimize_mesh_2()`. Figure \cgalFigureRef{LloydHistogramfigure} +See \cgalFigureRef{Lloydfigure} for a mesh generated by `refine_Delaunay_mesh_2()` and optimized +with `lloyd_optimize_mesh_2()`. \cgalFigureRef{LloydHistogramfigure} shows the histogram of angles inside these meshes. \cgalFigureBegin{Lloydfigure,lloyd.png} diff --git a/Mesh_3/doc/Mesh_3/Mesh_3.txt b/Mesh_3/doc/Mesh_3/Mesh_3.txt index abe63982656..387d0874cd9 100644 --- a/Mesh_3/doc/Mesh_3/Mesh_3.txt +++ b/Mesh_3/doc/Mesh_3/Mesh_3.txt @@ -1364,7 +1364,7 @@ We provide below speed-up charts generated using the parallel version of the mes The machine used is a PC running Windows 7 64-bits with two 6-core Intel Xeon CPU X5660 clocked at 2.80 GHz with 32GB of RAM. The program has been compiled with Microsoft Visual C++ 2012 in Release mode. -Figure \cgalFigureRef{figure_refinement_speedup} shows mesh refinement speed-up, and figure \cgalFigureRef{figure_lloyd_speedup} +\cgalFigureRef{figure_refinement_speedup} shows mesh refinement speed-up, and \cgalFigureRef{figure_lloyd_speedup} shows Lloyd optimization speed-up. ODT optimization exhibits similar speed-up. \cgalFigureBegin{figure_refinement_speedup,refinement_speedup.png} diff --git a/Minkowski_sum_2/doc/Minkowski_sum_2/Minkowski_sum_2.txt b/Minkowski_sum_2/doc/Minkowski_sum_2/Minkowski_sum_2.txt index 6c6567f67e9..e703f5ba56d 100644 --- a/Minkowski_sum_2/doc/Minkowski_sum_2/Minkowski_sum_2.txt +++ b/Minkowski_sum_2/doc/Minkowski_sum_2/Minkowski_sum_2.txt @@ -235,7 +235,7 @@ The program below computes the Minkowski sum of two polygons that are read from an input file. In this case the sum may contain holes. The Minkowski sum, for example, of the polygons described in the default input file `room_star.dat` is not simple and contains four holes, -as illustrated in Figure \cgalFigureRef{mink_figsum_holes}. +as illustrated in \cgalFigureRef{mink_figsum_holes}. \cgalExample{Minkowski_sum_2/sum_with_holes.cpp} @@ -503,7 +503,7 @@ template to compute Boolean set operations more efficiently, we apply a simple approximation scheme such that each irrational line segment is approximated by two rational segments. -Consider the example depicted in Figure \cgalFigureRef{mink_figapprox_offset}, +Consider the example depicted in \cgalFigureRef{mink_figapprox_offset}, where the exact offset edge \f$ o_1 o_2\f$ is obtained by shifting the polygon edge \f$ p_1 p_2\f$ by a vector of length \f$ r\f$ that forms an angle \f$ \phi\f$ with the \f$ x\f$-axis. We select two points diff --git a/Orthtree/doc/Orthtree/Orthtree.txt b/Orthtree/doc/Orthtree/Orthtree.txt index bfe72403866..cc2ebe022ee 100644 --- a/Orthtree/doc/Orthtree/Orthtree.txt +++ b/Orthtree/doc/Orthtree/Orthtree.txt @@ -169,7 +169,7 @@ custom traversal that only traverses the first branch of the octree: \subsection Comparison of Traversals -Figure \cgalFigureRef{Orthtree_traversal_fig} shows in which order +\cgalFigureRef{Orthtree_traversal_fig} shows in which order nodes are visited depending on the traversal method used. \cgalFigureBegin{Orthtree_traversal_fig, quadtree_traversal.png} diff --git a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt index e532de3e728..f61081efece 100644 --- a/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt +++ b/Polygon_mesh_processing/doc/Polygon_mesh_processing/Polygon_mesh_processing.txt @@ -125,7 +125,7 @@ provided: a uniform and a curvature-adaptive sizing field. With `CGAL::Polygon_m all triangle edges are targeted to have equal lengths. With `CGAL::Polygon_mesh_processing::Adaptive_sizing_field`, triangle edge lengths depend on the local curvature -- shorter edges appear in regions with a higher curvature and vice versa. The outline of the adaptive sizing field algorithm is available in \cgalCite{dunyach2013curvRemesh}. The distinction between uniform and adaptive -sizing fields is depicted in figure \cgalFigureRef{uniform_and_adaptive}. +sizing fields is depicted in \cgalFigureRef{uniform_and_adaptive}. As the number of iterations increases, the mesh tends to be smoother and closer to the target edge length. @@ -602,7 +602,7 @@ reports all pairs of intersecting triangles. \subsubsection SIExample Self Intersections Example The following example illustrates the detection of self intersection in the `pig.off` mesh. -The detected self-intersection is illustrated on Figure \cgalFigureRef{SelfIntersections}. +The detected self-intersection is illustrated on \cgalFigureRef{SelfIntersections}. \cgalExample{Polygon_mesh_processing/self_intersections_example.cpp} diff --git a/SMDS_3/doc/SMDS_3/SMDS_3.txt b/SMDS_3/doc/SMDS_3/SMDS_3.txt index 7fcd35d7336..dff08599e10 100644 --- a/SMDS_3/doc/SMDS_3/SMDS_3.txt +++ b/SMDS_3/doc/SMDS_3/SMDS_3.txt @@ -34,7 +34,7 @@ of the support 3D triangulation, per dimension from 0 to 3: - corner vertices (0D), - feature edges (1D), - surface facets (2D), -- domain cells (3D). See Figure \cgalFigureRef{figure_c3t3_cells}. +- domain cells (3D). See \cgalFigureRef{figure_c3t3_cells}. The concept `MeshComplex_3InTriangulation_3` is a data structure devised to represent these three-dimensional complexes embedded in a `Triangulation_3`. diff --git a/Shape_detection/doc/Shape_detection/Shape_detection.txt b/Shape_detection/doc/Shape_detection/Shape_detection.txt index c51a84aad19..d58d86eeacc 100644 --- a/Shape_detection/doc/Shape_detection/Shape_detection.txt +++ b/Shape_detection/doc/Shape_detection/Shape_detection.txt @@ -19,7 +19,7 @@ This \cgal component implements two algorithms for shape detection: \section Shape_detection_RANSAC Efficient RANSAC -From an unstructured point set with unoriented normals, this algorithm detects a set of shapes (see Figure \cgalFigureRef{Efficient_RANSAC_overview}). +From an unstructured point set with unoriented normals, this algorithm detects a set of shapes (see \cgalFigureRef{Efficient_RANSAC_overview}). Five types of primitive shapes are provided by this package: plane, sphere, cylinder, cone, and torus. Other primitive shapes can be easily added by the user (see Section \ref Shape_detection_RANSACExample_with_custom_shapes). @@ -67,7 +67,7 @@ A high value of `epsilon` leads to the detection of fewer large shapes and hence A low value of `epsilon` yields a more detailed detection, but may lead to either lower coverage or over-segmentation. Over-segmentation translates into detection of fragmented shapes when `epsilon` is within or below the noise level. When the input point set is made of free-form parts, a higher tolerance `epsilon` enables to detect more primitive shapes that approximate some of the free-form surfaces. -The impact of this parameter is depicted by Figure \cgalFigureRef{Efficient_RANSAC_parameter_epsilon_variation}. Its impact on performance is evaluated in Section \ref Shape_detection_RANSACPerformance. +The impact of this parameter is depicted by \cgalFigureRef{Efficient_RANSAC_parameter_epsilon_variation}. Its impact on performance is evaluated in Section \ref Shape_detection_RANSACPerformance. \cgalFigureBegin{Efficient_RANSAC_parameter_epsilon_variation, Efficient_RANSAC/epsilon_variation2.png} Impact of the epsilon parameter over the levels of detail of the detection. @@ -84,7 +84,7 @@ the points covered by a shape are mapped to a 2D parameter space chosen to minim This 2D parameter space is discretized using a regular grid, and a connected component search is performed to identify the largest cluster. The parameter `cluster_epsilon` defines the spacing between two cells of the regular grid, so that two points separated by a distance of at most \f$2\sqrt{2}\f$ `cluster_epsilon` are considered adjacent. For non-developable shapes, the connected components are identified by computing a neighboring graph in 3D and walking in the graph. -The impact of the parameter `cluster_epsilon` is depicted in Figure \cgalFigureRef{Efficient_RANSAC_parameter_connectivity}. +The impact of the parameter `cluster_epsilon` is depicted in \cgalFigureRef{Efficient_RANSAC_parameter_connectivity}. \cgalFigureBegin{Efficient_RANSAC_parameter_connectivity, Efficient_RANSAC/varying_connectivity.png} The parameter `cluster_epsilon` controls the connectivity of the points covered by a detected shape. @@ -207,10 +207,10 @@ which is used by the example \ref Shape_detection/efficient_RANSAC_with_custom_s The running time and detection performance of the Efficient RANSAC depend on the chosen parameters. A selective error tolerance parameter leads to higher running time and fewer shapes, as many shape candidates are generated to find the largest shape. -We plot the detection performance against the `epsilon` error tolerance parameter for detecting planes in a complex scene with 5M points (see Figure \cgalFigureRef{Efficient_RANSAC_performance_epsilon}). +We plot the detection performance against the `epsilon` error tolerance parameter for detecting planes in a complex scene with 5M points (see \cgalFigureRef{Efficient_RANSAC_performance_epsilon}). The `probability` parameter controls the endurance when searching for the largest candidate at each iteration. It barely impacts the number of detected shapes, has a moderate impact on the size of the detected shapes, and increases the running time. -We plot the performance against the `probability` parameter (see Figure \cgalFigureRef{Efficient_RANSAC_performance_probability}). +We plot the performance against the `probability` parameter (see \cgalFigureRef{Efficient_RANSAC_performance_probability}). \cgalFigureBegin{Efficient_RANSAC_performance_epsilon, Efficient_RANSAC/epsilon_graph.png} The graph depicts the number of detected shapes (purple) and the coverage (green), that is the ratio assignedPoints / totalPoints, against the `epsilon` tolerance parameter. @@ -358,7 +358,7 @@ The right choice of the parameters above plays an important role in producing a For example, if we consider the fuzzy sphere neighborhood, when `sphere_radius` is too large, we have fewer regions, and the details are not clearly separated. Meanwhile, if `sphere_radius` is too small, we produce more regions, and the point set may be over-segmented. Consider a 2D map of an intersection of streets in a city as -in Figure \cgalFigureRef{Region_growing_parameter_sphere_radius_variation}. Each region is painted with +in \cgalFigureRef{Region_growing_parameter_sphere_radius_variation}. Each region is painted with a unique color. As `sphere_radius` increases, the details become less clear. When `sphere_radius` = 0.3 (c), the best visual result is produced. @@ -379,7 +379,7 @@ The first two parameters are used by the functions `RegionType::is_part_of_regio while the third parameter is used by the function `RegionType::is_valid_region()` from the `RegionType` concept. The right choice of `maximum_distance` and `maximum_angle` parameters is also very important. -For example, Figure \cgalFigureRef{Region_growing_parameter_max_angle_variation} shows that the +For example, \cgalFigureRef{Region_growing_parameter_max_angle_variation} shows that the roof top of the house can be distinguished as two planes (painted in blue and dark red) when `maximum_angle` is strict enough (c), or it can be recognized as only one plane (painted in pale yellow) in the other case (b). @@ -403,7 +403,7 @@ Typical usage of the Region Growing component consists of five steps: -# Postprocess. Given a 2D point set, we detect 2D lines using the fuzzy sphere neighborhood. We then color all points -from the found regions and save them in a file (see Figure \cgalFigureRef{Region_growing_on_point_set_2}). +from the found regions and save them in a file (see \cgalFigureRef{Region_growing_on_point_set_2}). A point set with normals is stored in `std::vector`. \cgalExample{Shape_detection/region_growing_lines_on_point_set_2.cpp} @@ -417,7 +417,7 @@ The following example shows a similar example, this time detecting circles inste \paragraph Shape_detection_RegionGrowingPoints_example_3D_planes Detecting 3D Planes If we are given a 3D point set, then the example below shows how to detect 3D planes using the K nearest neighbors search. -We color all points from the found regions and save them in a file (see Figure \cgalFigureRef{Region_growing_on_point_set_3}). +We color all points from the found regions and save them in a file (see \cgalFigureRef{Region_growing_on_point_set_3}). The example also shows how to retrieve all points, which are not assigned to any region, and how to use a custom output iterator. A point set with normals is stored in `CGAL::Point_set_3`. @@ -484,7 +484,7 @@ In particular, it provides - `CGAL::Shape_detection::Polygon_mesh::Least_squares_plane_fit_region` class that fits a 3D plane to the vertices of all mesh faces, which have been added to the region so far, and controls the quality of this fit. -This component accepts any model of the concept `FaceListGraph` as a polygon mesh. Figure \cgalFigureRef{Region_growing_on_surface_mesh} +This component accepts any model of the concept `FaceListGraph` as a polygon mesh. \cgalFigureRef{Region_growing_on_surface_mesh} gives an \ref Shape_detection_RegionGrowingMesh_examples "example" of the region growing algorithm for detecting 3D planes on `CGAL::Surface_mesh`. @@ -573,7 +573,7 @@ The Efficient RANSAC algorithm is very quick, however, since it is not determini Instead, the region growing algorithm usually takes longer to complete, but it may provide better quality output in the presence of large scenes with numerous small details. Since it iterates throughout all items of the scene, there are fewer chances to miss a shape. In addition, it is deterministic (for a given input and a given set of parameters, it always returns the same output, -whereas the Efficient RANSAC algorithm is randomized and so the output may vary at each run), see Figure \cgalFigureRef{Shape_detection_comparison}. +whereas the Efficient RANSAC algorithm is randomized and so the output may vary at each run), see \cgalFigureRef{Shape_detection_comparison}. \cgalFigureBegin{Shape_detection_comparison, Efficient_RANSAC/comparison.png} Comparison of the Efficient RANSAC and region growing algorithms. diff --git a/Surface_mesh_approximation/doc/Surface_mesh_approximation/Surface_mesh_approximation.txt b/Surface_mesh_approximation/doc/Surface_mesh_approximation/Surface_mesh_approximation.txt index e2ea8e5b1b5..e7ff50e17cf 100644 --- a/Surface_mesh_approximation/doc/Surface_mesh_approximation/Surface_mesh_approximation.txt +++ b/Surface_mesh_approximation/doc/Surface_mesh_approximation/Surface_mesh_approximation.txt @@ -29,7 +29,7 @@ A class interface is also provided for advanced users, in which a series of plia \section sma_overview Overview -The package contains 3 main components: approximation algorithm, pliant operators and meshing as shown in Figure \cgalFigureRef{workflow}. +The package contains 3 main components: approximation algorithm, pliant operators and meshing as shown in \cgalFigureRef{workflow}. \cgalFigureBegin{workflow, workflow.svg} From left to right are 3 components of the approximation package: approximation algorithm (left), optional pliant operations (middle) and meshing (right). @@ -37,11 +37,11 @@ From left to right are 3 components of the approximation package: approximation \subsection sma_approximation Approximation -The left part of Figure \cgalFigureRef{workflow} depicts the workflow of the approximation algorithm. +The left part of \cgalFigureRef{workflow} depicts the workflow of the approximation algorithm. \subsubsection sma_clustering Clustering Iteration -Figure \cgalFigureRef{iterations} depicts several Lloyd \cgalCite{cgal:l-lsqp-82} clustering iterations on the plane-sphere model with planar proxies and the \f$ \mathcal{L}^{2,1} \f$ metric. We plot the fitting error against each iteration. After 8 iterations, the error barely changes. Based on this observation, we consider that the clustering converges if the error change between the current and previous iteration is lower than a user-specified threshold (indicated by two green dash lines). +\cgalFigureRef{iterations} depicts several Lloyd \cgalCite{cgal:l-lsqp-82} clustering iterations on the plane-sphere model with planar proxies and the \f$ \mathcal{L}^{2,1} \f$ metric. We plot the fitting error against each iteration. After 8 iterations, the error barely changes. Based on this observation, we consider that the clustering converges if the error change between the current and previous iteration is lower than a user-specified threshold (indicated by two green dash lines). \cgalFigureBegin{iterations, iterations.jpg} Discrete Lloyd iterations on the plane-sphere model with planar proxies and the \f$ \mathcal{L}^{2,1} \f$ metric: (left) random seeding of 6 proxies; (center) after one iteration; (right) after 8 iterations, the regions settle. The red lines depict the proxy normals drawn at the seed faces. @@ -66,7 +66,7 @@ and the remaining error is added to the next proxy error in order to keep the to \f[ E'_{k+1} = (E_k - N_k * E_{avg}) + E_{k+1}. \f] -Figure \cgalFigureRef{seeding_method} depicts different seeding methods. Random initialization randomly selects a set of input triangle faces as proxy seeds. While it is very fast, the subsequent clustering process can be entrapped in a bad local minimum, especially on shapes with regions surrounded by sharp creases (left closeup). Incremental initialization adds the proxies one by one at the most distorted region. It can thus be slow due to the large number of interleaved relaxation iterations. Hierarchical initialization (selected by default) repeatedly doubles the number of proxies in a hierarchical refinement sequence, so as to generate clustering regions with evenly distributed fitting errors. Time consumption is typically in-between the former two. Statistics and comparisons are available in Section \ref sma_perf. +\cgalFigureRef{seeding_method} depicts different seeding methods. Random initialization randomly selects a set of input triangle faces as proxy seeds. While it is very fast, the subsequent clustering process can be entrapped in a bad local minimum, especially on shapes with regions surrounded by sharp creases (left closeup). Incremental initialization adds the proxies one by one at the most distorted region. It can thus be slow due to the large number of interleaved relaxation iterations. Hierarchical initialization (selected by default) repeatedly doubles the number of proxies in a hierarchical refinement sequence, so as to generate clustering regions with evenly distributed fitting errors. Time consumption is typically in-between the former two. Statistics and comparisons are available in Section \ref sma_perf. \cgalFigureBegin{seeding_method, seeding_method.jpg} Different seeding methods on the sphere-cube model. From left to right: initial partition (\f$ \mathcal{L}^{2,1} \f$ metrics and 20 proxies), add 5 proxy seeds (red faces) with random, incremental and hierarchical methods respectively. @@ -78,7 +78,7 @@ Different seeding methods on the sphere-cube model. From left to right: initial To determine when to stop adding more proxies, we can specify either the maximum number of proxies required to approximate the geometry or the minimum error drop percentage with respect to the very first partition. More specifically, we can decide: - Maximum number of proxies. Adding proxies until the specified number is met. - Minimum error drop. Starting from the very first partition (with one proxy per connected component) with fitting error \f$ \hat E \f$, the algorithm adds proxies until the approximation error drops below the specified percentage \f$ target\_drop * \hat E \f$. -As depicted by Figure \cgalFigureRef{nb_proxies}, specifying a minimum error drop of 10% (yellow dash lines) as stopping criterion, yields 12 proxies on the plane-sphere model. When both criteria are provided, the first criterion met stops the seeding. Different seeding examples are depicted by Figure \cgalFigureRef{meshing}. +As depicted by \cgalFigureRef{nb_proxies}, specifying a minimum error drop of 10% (yellow dash lines) as stopping criterion, yields 12 proxies on the plane-sphere model. When both criteria are provided, the first criterion met stops the seeding. Different seeding examples are depicted by \cgalFigureRef{meshing}. To balance between performance and speed, we recommend using hierarchical seeding and specifying both stopping criteria. @@ -92,14 +92,14 @@ Using different number of proxies to approximate the plane-sphere model. From le For interactive use, the approach can yield better approximations of the geometry via adding/removing proxies and tunneling out of local minima via additional operations: - Merging. Merging two adjacent regions. - Splitting. Splitting one specified region into smaller ones to reduce the error. By default bisection is performed but N-section is also possible. We first select the request number of face seeds from the specified region, then perform the refitting process confined to the region. -- Adding. Adding one or more proxies to further reduce the approximation error. As for the seeding process, addition can be performed incrementally or hierarchically, as shown in Figure \cgalFigureRef{seeding_method}. +- Adding. Adding one or more proxies to further reduce the approximation error. As for the seeding process, addition can be performed incrementally or hierarchically, as shown in \cgalFigureRef{seeding_method}. - Teleporting. A teleportation operator is a combination of merging and adding proxies: merging the pair of adjacent regions and adding a proxy seed to the worst region. More specifically, the pair of regions whose merging realizes the smallest error after merging and local re-fitting, is selected for merging. In practice, the teleport operation can temporarily either decrease or increase the total approximation error. We provide an optional heuristic to evaluate if the teleportation is worth it by verifying whether the error increase induced by a (simulated) deletion is smaller than half of the error of the worst region. If this test fails, no teleportation is judged necessary. \cgalFigureBegin{operations, operations.jpg} Operations on the sphere-cube union model. Upper row: merging (9 proxies) and the reverse bisection splitting (10 partitions) on the confined region. Lower row: one teleportation operation of merging and adding a face seed, the sphere is approximated with one more proxy. \cgalFigureEnd -As depicted in Figure \cgalFigureRef{operations}, teleportation provides a means to relocate a local minimum region entrapped in the planar part (left) to the most needed regions on the sphere (right). In \ref sma_example3, the class interface is used to control the approximation process through the aforementioned operations. +As depicted in \cgalFigureRef{operations}, teleportation provides a means to relocate a local minimum region entrapped in the planar part (left) to the most needed regions on the sphere (right). In \ref sma_example3, the class interface is used to control the approximation process through the aforementioned operations. \subsection sma_meshing Meshing @@ -115,9 +115,9 @@ A vertex is selected as a basic anchor if it is: \subsubsection sma_anchors_subdivision Subdivision Anchors -Walking along the boundary of a proxy region (counterclockwise), a chord is a sequence of halfedges connecting two anchors. One cluster boundary cycle may consist of several chords. A connected region with holes may yield several boundary cycles (Figure \cgalFigureRef{operations}, planar part before teleportation). +Walking along the boundary of a proxy region (counterclockwise), a chord is a sequence of halfedges connecting two anchors. One cluster boundary cycle may consist of several chords. A connected region with holes may yield several boundary cycles (\cgalFigureRef{operations}, planar part before teleportation). -In order to approximate complex boundaries well, more anchors are generated by recursive chord subdivision (Figure \cgalFigureRef{chord}). An anchor \f$ \mathbf{c} \f$ is added at the furthest vertex of a chord \f$ (\mathbf{a}, \mathbf{b}) \f$, split it into \f$ (\mathbf{a}, \mathbf{c}) \f$ and \f$ (\mathbf{c}, \mathbf{b}) \f$, if the distance \f$ d = \Vert \mathbf{c} , (\mathbf{a}, \mathbf{b}) \Vert \f$ is beyond certain threshold. To make \f$ d \f$ independent to the scale of the input: +In order to approximate complex boundaries well, more anchors are generated by recursive chord subdivision (\cgalFigureRef{chord}). An anchor \f$ \mathbf{c} \f$ is added at the furthest vertex of a chord \f$ (\mathbf{a}, \mathbf{b}) \f$, split it into \f$ (\mathbf{a}, \mathbf{c}) \f$ and \f$ (\mathbf{c}, \mathbf{b}) \f$, if the distance \f$ d = \Vert \mathbf{c} , (\mathbf{a}, \mathbf{b}) \Vert \f$ is beyond certain threshold. To make \f$ d \f$ independent to the scale of the input: \f[ d = d / input\_mesh\_average\_edge\_length. \f] Optionally, \f$ d \f$ can be measured as the ratio of the chord length: \f[ d = d / \Vert(\mathbf{a}, \mathbf{b})\Vert. \f] @@ -129,7 +129,7 @@ Varying the chord error. From left to right: clustering partition, and meshing w \subsubsection sma_anchors_additional Additional Anchors -For a boundary cycle without any anchor such as the hole depicted Figure \cgalFigureRef{operations}, we first add a starting anchor to the boundary. We then subdivide this circular chord to ensure that every boundary cycle has at least 2 anchors (i.e., every chord is connecting 2 different anchors, Figure \cgalFigureRef{anchors}). Finally, we add additional anchors to ensure that at least three anchor vertices are generated on every boundary cycle. +For a boundary cycle without any anchor such as the hole depicted \cgalFigureRef{operations}, we first add a starting anchor to the boundary. We then subdivide this circular chord to ensure that every boundary cycle has at least 2 anchors (i.e., every chord is connecting 2 different anchors, \cgalFigureRef{anchors}). Finally, we add additional anchors to ensure that at least three anchor vertices are generated on every boundary cycle. \cgalFigureBegin{anchors, anchors.jpg} Adding anchors. From left to right: starting from a partition (grey) with a hole (white) and two encircled regions (green and blue), we add a starting anchor (orange disk) to the boundary cycle (red dash line) without any anchor (2nd), subdivide the circular chord (3rd, the number indicates the level of recursion) and add anchors to the boundary cycle with less than 2 anchors (4th, red dash lines). @@ -139,7 +139,7 @@ Adding anchors. From left to right: starting from a partition (grey) with a hole With the anchors defined, their chord connection graph forms a general polygon mesh. Because of non-flat, concave polygon or polygons with holes, we need to triangulate this initial polygon mesh. The triangulation is generated by computing a discrete variant of a constrained 2D Delaunay triangulation, where distances are measured on the input triangle mesh. -The first image of Figure \cgalFigureRef{triangulation} depicts how the Delaunay triangulation of set of points (colored disks) is deduced from its dual Voronoi diagram (colored regions separated by blue lines) by connecting the points indicated by the vertices (red circles) where 3 Voronoi cells meet. In an analogous manner, we construct discrete Voronoi cells from which the triangulation is extracted. +The first image of \cgalFigureRef{triangulation} depicts how the Delaunay triangulation of set of points (colored disks) is deduced from its dual Voronoi diagram (colored regions separated by blue lines) by connecting the points indicated by the vertices (red circles) where 3 Voronoi cells meet. In an analogous manner, we construct discrete Voronoi cells from which the triangulation is extracted. In a first step, we start a flooding of the interior of the region, coloring the vertices according to their closest anchor vertex. We then only flood the boundary of a region so that every vertex on it is colored depending on the closest anchor vertex. This enforces the constrained edges by forcing the boundary to be in it. @@ -169,7 +169,7 @@ Free function with \ref bgl_namedparameters options. - `CGAL::Surface_mesh_approximation::approximate_triangle_mesh()`: given a triangle mesh, approximate the geometry with default \f$ \mathcal{L}^{2,1} \f$ metric. Class interface: -- `CGAL::Variational_shape_approximation`: allowing more customization of the proxy, metric and approximation process. As shown in Figure \cgalFigureRef{workflow}, typical calling order of the approximation and meshing process is: +- `CGAL::Variational_shape_approximation`: allowing more customization of the proxy, metric and approximation process. As shown in \cgalFigureRef{workflow}, typical calling order of the approximation and meshing process is: - \link CGAL::Variational_shape_approximation::initialize_seeds initialize seeds \endlink - \link CGAL::Variational_shape_approximation::run run clustering iterations \endlink - \link CGAL::Variational_shape_approximation::extract_mesh extract mesh \endlink @@ -209,7 +209,7 @@ The class interface `CGAL::Variational_shape_approximation` offers a flexible me Comparison of different error metrics on the bear model, with 200 proxies and hierarchical seeding. From left to right: \f$ \mathcal{L}^{2,1} \f$ metric, \f$ \mathcal{L}^2 \f$ metric and custom compact metric. \cgalFigureEnd -The following example defines a point-wise proxy to yield an isotropic approximation. The output mesh is depicted in Figure \cgalFigureRef{vsa_metric_comparison}. +The following example defines a point-wise proxy to yield an isotropic approximation. The output mesh is depicted in \cgalFigureRef{vsa_metric_comparison}. \cgalExample{Surface_mesh_approximation/vsa_isotropic_metric_example.cpp} 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 3aae43c9c42..5919a1aada7 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 @@ -93,7 +93,7 @@ using the `Surface_mesh` built-in property mechanism. \cgalExample{Surface_mesh_parameterization/simple_parameterization.cpp} -Figure \cgalFigureRef{Surface_mesh_parameterizationfigsimple} illustrates the input and output +\cgalFigureRef{Surface_mesh_parameterizationfigsimple} illustrates the input and output of this program. \cgalFigureAnchor{Surface_mesh_parameterizationfigsimple} @@ -179,9 +179,9 @@ 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 model, shown in \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}, +a topological disk. In \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. diff --git a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Tetrahedral_remeshing.txt b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Tetrahedral_remeshing.txt index a2e1c0fb136..e468439d533 100644 --- a/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Tetrahedral_remeshing.txt +++ b/Tetrahedral_remeshing/doc/Tetrahedral_remeshing/Tetrahedral_remeshing.txt @@ -37,7 +37,7 @@ preserve the input topology of the geometric complex. The tetrahedral remeshing algorithm improves the quality of dihedral angles, while targeting the user-defined uniform sizing field and preserving the -topology of the feature complex, as highlighted by Figure \cgalFigureRef{Remesh_liver}. +topology of the feature complex, as highlighted by \cgalFigureRef{Remesh_liver}. Experimental evidence shows that a higher number of remeshing iterations leads to a mesh with a improved fidelity to the sizing criterion, diff --git a/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h b/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h index 6ab5522df50..197a362532e 100644 --- a/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h +++ b/Triangulation/doc/Triangulation/Concepts/TriangulationDataStructure.h @@ -480,7 +480,7 @@ The indexing of the vertices in the full cell is such that, if `f` was a full cell of maximal dimension in the initial complex, then `(f,v)`, in this order, is the corresponding full cell in the updated triangulation. A handle to `v` is returned -(see Figure \cgalFigureRef{triangulationfiginsertincreasedim}). +(see \cgalFigureRef{triangulationfiginsertincreasedim}). \pre If the current dimension is -2 (empty triangulation), then `star` can be omitted (it is ignored), otherwise @@ -541,7 +541,7 @@ void clear(); /*! Contracts the `Face f` to a single vertex. Returns a handle to that vertex -(see Figure \cgalFigureRef{triangulationfigcollapseface}). +(see \cgalFigureRef{triangulationfigcollapseface}). \pre The boundary of the full cells incident to `f` is a topological sphere of dimension `tds`.`current_dimension()`-1). @@ -561,7 +561,7 @@ This method does exactly the opposite of full cells not containing `star` are removed, full cells containing `star` but not `v` lose vertex `star`, full cells containing `star` and `v` lose vertex `v` -(see Figure \cgalFigureRef{triangulationfiginsertincreasedim}). +(see \cgalFigureRef{triangulationfiginsertincreasedim}). \pre All cells contain either `star` or `v`. Edge `star-v` exists in the triangulation and `current_dimension() != -2`. diff --git a/Triangulation/doc/Triangulation/Triangulation.txt b/Triangulation/doc/Triangulation/Triangulation.txt index b239a2c05b0..4d54cf08afc 100644 --- a/Triangulation/doc/Triangulation/Triangulation.txt +++ b/Triangulation/doc/Triangulation/Triangulation.txt @@ -163,7 +163,7 @@ neighbors. Its vertices and neighbors are indexed from \f$ 0\f$ to \f$ d \f$. Th of its neighbors have the following meaning: the \f$ i\f$-th neighbor of \f$ \sigma\f$ is the unique neighbor of \f$ \sigma\f$ that does not contain the \f$ i\f$-th vertex of \f$ \sigma\f$; in other words, it is the neighbor of \f$ \sigma\f$ opposite to -the \f$ i\f$-th vertex of \f$ \sigma\f$ (Figure \cgalFigureRef{triangulationfigfullcell}). +the \f$ i\f$-th vertex of \f$ \sigma\f$ (\cgalFigureRef{triangulationfigfullcell}). The vertices and full cells of the triangulations are accessed through `handles` and `iterators`. A handle is a model of the @@ -183,7 +183,7 @@ to \f$ f \f$. \if READY_TO_PUBLISH \cgalAdvanced The index of a full cell \f$ c\f$ in the \f$ i\f$-th neighbor of \f$ c\f$ is called the \f$ i\f$-th mirror-index of -\f$ c\f$ (Figure \cgalFigureRef{triangulationfigfullcell}). Mirror indices are +\f$ c\f$ (\cgalFigureRef{triangulationfigfullcell}). Mirror indices are often needed for maintaining the triangulation data structure. Thus, it might be desirable, for performance reasons, to store the mirror indices alongside the references to the vertices and neighbors in a diff --git a/Triangulation_3/doc/Triangulation_3/Triangulation_3.txt b/Triangulation_3/doc/Triangulation_3/Triangulation_3.txt index 84daca88505..5eaa7e91874 100644 --- a/Triangulation_3/doc/Triangulation_3/Triangulation_3.txt +++ b/Triangulation_3/doc/Triangulation_3/Triangulation_3.txt @@ -807,7 +807,7 @@ in \cgalCite{msri52:liu-snoeyink-05}. \subsection Triangulation_3ParallelPerformance Parallel Performance -Figure \cgalFigureRef{Triangulation3figparallelspeedup} shows insertion +\cgalFigureRef{Triangulation3figparallelspeedup} shows insertion and removal speed-ups obtained using the parallel version of the triangulation algorithms of \cgal 4.5. The machine used is a PC running Windows 7 64-bits with two 6-core diff --git a/Visibility_2/doc/Visibility_2/visibility_2.txt b/Visibility_2/doc/Visibility_2/visibility_2.txt index d0dcdc09c49..e4ab65a512d 100644 --- a/Visibility_2/doc/Visibility_2/visibility_2.txt +++ b/Visibility_2/doc/Visibility_2/visibility_2.txt @@ -87,7 +87,7 @@ Where \f$ n \f$ denotes the number of vertices of \f$ f \f$ and \f$ h \f$ the nu Example representing a cathedral. \cgalFigureEnd -The left hand side of Figure \cgalFigureRef{cathedral-fig} depicts the outer boundary of a cathedral, +The left hand side of \cgalFigureRef{cathedral-fig} depicts the outer boundary of a cathedral, which is a simple polygon with 565 vertices. The right hand side shows the cathedral also with its inner pillars, which is a polygon (with holes) with 1153 vertices.