diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index c52173c61a70..bedbfc898326 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -33,7 +33,7 @@ Release date: July 2023 instead of `void`, that is used inside the class `Region_growing` for detecting if the input conditions for the new region are satisfied. This change affects only user-defined types of regions. - **Breaking change**: The constructors of all models used together with the region growing algorithm - now enable users to provide parameters through the [named parameters](https://doc.cgal.org/latest/BGL/group__bgl__namedparameters.html) mechanism. + now enable users to provide parameters through the [named parameters](https://doc.cgal.org/5.6/BGL/group__bgl__namedparameters.html) mechanism. - All fitting classes in the region growing framework are now using better versions of the region conditions, more precise and faster, including the correct normal orientations. - Added new models of the concept `RegionType` for getting linear regions in a set of 2D and 3D diff --git a/Maintenance/public_release/announcement/announcement.md b/Maintenance/public_release/announcement/announcement.md index 4976234e2415..eb9cd301033a 100644 --- a/Maintenance/public_release/announcement/announcement.md +++ b/Maintenance/public_release/announcement/announcement.md @@ -1,63 +1,108 @@ -The CGAL Open Source Project is pleased to announce the release 5.5 of CGAL, the Computational Geometry Algorithms Library. +The CGAL Open Source Project is pleased to announce the release 5.6 of CGAL, the Computational Geometry Algorithms Library. -Besides fixes and general enhancement to existing packages, the following has changed since CGAL 5.4: +Besides fixes and general enhancement to existing packages, the following has changed since CGAL 5.5: -### [3D Alpha Wrapping (new package)](https://doc.cgal.org/5.5/Manual/packages.html#PkgAlphaWrap3) +### General Changes -- This component takes a 3D triangle mesh, soup, or point set as input, and generates a valid (watertight, intersection-free, and combinatorially 2-manifold) surface triangle mesh that contains the input. - The algorithm proceeds by shrink-wrapping and refining a 3D Delaunay triangulation, starting from a loose bounding box of the input. - Two user-defined parameters, alpha and offset, offer control over the maximum size of cavities where the shrink-wrapping process can enter, and the tightness of the final surface mesh to the input, respectively. Once combined, these parameters provide a means to trade fidelity - to the input for complexity of the output. +- **Breaking change**: Package-specific assertions, preconditions, and postconditions (such as `CGAL_triangulation_assertion`) have been removed. Corresponding CGAL-wide versions (such as `CGAL_assertion`) should be used instead. - See also the [announcement page](https://www.cgal.org/2022/05/18/alpha_wrap/). +### [Shape Detection](https://doc.cgal.org/5.6/Manual/packages.html#PkgShapeDetection) (major changes) -### [2D Straight Skeleton and Polygon Offsetting (breaking change)](https://doc.cgal.org/5.5/Manual/packages.html#PkgStraightSkeleton2) -- Fix the output of the function [CGAL::create_exterior_skeleton_and_offset_polygons_with_holes_2()](https://doc.cgal.org/5.5/Straight_skeleton_2/group__PkgStraightSkeleton2OffsetFunctions.html#gaa159f093e5d6d7fdb62c1660a44f95fe) - to not take into account the offset of the outer frame. -- Fix the computation of the exterior offset of a polygon with holes that was not computing the offset of the holes +- **Breaking change**: The region growing part of the package have been reworked to fix design issues introduced with the handling of `FaceGraph` models. In particular, the notion of `Item` has been introduced to reference an element in the input range of elements. Region maps now operates on `Item` and no longer on the value type of the input range. +- **Breaking change**: The method `update()` in the concept `RegionType` now returns a `Boolean` instead of `void`, that is used inside the class `Region_growing` for detecting if the input conditions for the new region are satisfied. This change affects only user-defined types of regions. +- **Breaking change**: The constructors of all models used together with the region growing algorithm now enable users to provide parameters through the [named parameters](https://doc.cgal.org/5.6/BGL/group__bgl__namedparameters.html) mechanism. +- All fitting classes in the region growing framework are now using better versions of the region conditions, more precise and faster, including the correct normal orientations. +- Added new models of the concept `RegionType` for getting linear regions in a set of 2D and 3D segments and on 2D and 3D polylines. +- Added the class `Polyline_graph` for extracting a set of polylines from a face graph, which splits this graph into a set of user-defined regions. +- Added new shapes to the Region Growing algorithm on a point set: circles in 2D, spheres in 3D, and cylinders in 3D. -### [3D Convex Hulls](https://doc.cgal.org/5.5/Manual/packages.html#PkgConvexHull3) +### [2D Straight Skeleton and Polygon Offsetting](https://doc.cgal.org/5.6/Manual/packages.html#PkgStraightSkeleton2) (major changes) +- Added weighted straight skeletons: weighted straight skeletons are a generalization of straight skeletons. Contour edges are assigned a positive weight, which can be understood as assigning a speed to the wavefront spawned from the contour edge. +- Added straight skeleton extrusion: this CGAL package now implements the extrusion of weighted straight skeletons of polygons with holes. The output is a closed, combinatorially 2-manifold surface triangle mesh. + See also the [news entry](https://www.cgal.org/2023/05/09/improved_straight_skeleton/). -- Added an [overload of the function `CGAL::convex_hull_3()`](https://doc.cgal.org/5.5/Convex_hull_3/group__PkgConvexHull3Functions.html#ga52fca4745c2ef0351063fbe66b035fd1), which writes the result in an indexed triangle set. +### [2D and 3D Linear Geometry Kernel](https://doc.cgal.org/5.6/Manual/packages.html#PkgKernel23) -### [2D Polygons](https://doc.cgal.org/5.5/Manual/packages.html#PkgPolygon2) +- Added the functor [`CompareAngle_3`](https://doc.cgal.org/5.6/Kernel_23/classKernel_1_1CompareAngle__3.html) to the concept [`Kernel`](https://doc.cgal.org/5.6/Kernel_23/classKernel.html) to compare an angle defined by three points to the cosinus of another angle. -- Add vertex, edge, and hole ranges. -- The concept [`GeneralPolygonWithHoles_2`](https://doc.cgal.org/5.5/Polygon/classGeneralPolygonWithHoles__2.html) now requires the nested type `Polygon_2` instead of `General_polygon_2`. +### [Combinatorial Maps](https://doc.cgal.org/5.6/Manual/packages.html#PkgCombinatorialMaps), [Generalized Maps](https://doc.cgal.org/5.6/Manual/packages.html#PkgGeneralizedMaps), and [Linear Cell Complex](https://doc.cgal.org/5.6/Manual/packages.html#PkgLinearCellComplex) -### [2D Regularized Boolean Set-Operations](https://doc.cgal.org/5.5/Manual/packages.html#PkgBooleanSetOperations2) -- The concept [`GeneralPolygonSetTraits_2`](https://doc.cgal.org/5.5/Boolean_set_operations_2/classGeneralPolygonSetTraits__2.html) now requires the nested type `Construct_polygon_with_holes_2` instead of `Construct_general_polygon_with_holes_2`. +- Added a version that uses indices instead of handles as dart and attribute descriptors. As the indices are integers convertible from and to `std::size_t`, they can be used as index into vectors which store properties. To use the index version, `Use_index` must be defined and be equal to `CGAL::Tag_true` in the item class. -### [Combinatorial Maps](https://doc.cgal.org/5.5/Manual/packages.html#PkgCombinatorialMaps) +### [Linear Cell Complex](https://doc.cgal.org/5.6/Manual/packages.html#PkgLinearCellComplex) -- Removed old code deprecated in CGAL 4.9 and 4.10 (global functions, and information associated with darts). +- Added the class [`Linear_cell_complex_incremental_builder_3`](https://doc.cgal.org/5.6/Linear_cell_complex/classCGAL_1_1Linear__cell__complex__incremental__builder__3.html). -### [2D Arrangements](https://doc.cgal.org/5.5/Manual/packages.html#PkgArrangementOnSurface2) -- Fixed the `intersect_2`, `compare_y_at_x_right`, and `compare_y_at_x_left` function objects of the traits class template [`Arr_geodesic_arc_on_sphere_traits_2`](https://doc.cgal.org/5.5/Arrangement_on_surface_2/classCGAL_1_1Arr__geodesic__arc__on__sphere__traits__2.html) that handles geodesic arcs on sphere and applied a small syntactical fix to the tracing traits. +### [2D Arrangements](https://doc.cgal.org/5.6/Manual/packages.html#PkgArrangementOnSurface2) -### [Tetrahedral Mesh Generation](https://doc.cgal.org/5.5/Manual/packages.html#PkgMesh3) +- Introduced an overload function template, namely `draw(arr)`, that renders arrangements based on the `Basic_viewer_qt` class template. As of now, only 2D arrangements on the plane induced by (i) segments, (ii) conics, and (iii) circular arcs or (linear) segments are supported. +- Improved the traits class template that handles conics, namely [`Arr_conic_traits_2`](https://doc.cgal.org/5.6/Arrangement_on_surface_2/classCGAL_1_1Arr__conic__traits__2.html). This includes the following: 1. Fixed a couple of bugs and slightly optimized some functions. 2. Introduced functionality that approximates conics with polylines. (This is used to draw conic curves.) 3. **Breaking change**: Changed the interface to generate conic curves. In the past, curves where generated directly using the constructors of the conic and x-monotone conic constructs. Now, they are constructed via function objects provided by the traits. This eliminates the constructions of temporary kernels. The old functionality is obsolete, but still supported for a limited number of versions. It depends on a static member function of the traits. In a future version this function will no longer be static, implying that the old functionality will no longer be supported. +- Introduced functionality that approximates circular segments with polylines. (This is used to draw conic curves.) -- Added the function [`remove_isolated_vertices()`](https://doc.cgal.org/5.5/Mesh_3/classCGAL_1_1Mesh__complex__3__in__triangulation__3.html#ace57c4e777da457c6e33b4f6e89949ce) as a post-processing step for the tetrahedral mesh generation. +### [Polygon Mesh Processing](https://doc.cgal.org/5.6/Manual/packages.html#PkgPolygonMeshProcessing) -### [Polygon Mesh Processing](https://doc.cgal.org/5.5/Manual/packages.html#PkgPolygonMeshProcessing) -- Added the function [`CGAL::Polygon_mesh_processing::orient_triangle_soup_with_reference_triangle_soup()`](https://doc.cgal.org/5.5/Polygon_mesh_processing/group__PMP__orientation__grp.html#ga855b1c55c201b91ab04eebd2811a87fd), which enables re-orienting the faces of a triangle soup based on the orientation of the nearest face in a reference triangle soup. -- Added the function [`CGAL::Polygon_mesh_processing::compatible_orientations()`](https://doc.cgal.org/5.5/Polygon_mesh_processing/group__PMP__orientation__grp.html#ga9ac9b9434084b64f3304df636c3178a3), which enables to retrieve the (in)compatibility of orientations of faces from different connected components. -- Added the function [`CGAL::Polygon_mesh_processing::tangential_relaxation()`](https://doc.cgal.org/5.5/Polygon_mesh_processing/group__PMP__meshing__grp.html#ga136c659162e5360354db5879db7431b4), which applies an area-based tangential mesh smoothing to the vertices of a surface triangle mesh. -- Added the named parameter `visitor` to the function [`triangulate_hole()`](https://doc.cgal.org/5.5/Polygon_mesh_processing/group__PMP__hole__filling__grp.html#gad2d3c43bce0ef90a16530478196d7f42), which enables to track progress with callbacks. -- Added more functions in the [visitor of the corefinement based methods](https://doc.cgal.org/5.5/Polygon_mesh_processing/classPMPCorefinementVisitor.html) to track progress. +- Added functions [`CGAL::Polygon_mesh_processing::region_growing_of_planes_on_faces()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PkgPolygonMeshProcessingRef.html#ga50dcd2f6295f584d2e378b57290ae2af) and [`CGAL::Polygon_mesh_processing::detect_corners_of_regions()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PkgPolygonMeshProcessingRef.html#gac8e445730d718a2fc49604e865017d2e), which enable partitioning a mesh into planar regions using the region growing algorithm from the [Shape Detection](https://doc.cgal.org/5.6/Manual/packages.html#PkgShapeDetection) package. -### [Surface Mesh Simplification](https://doc.cgal.org/5.5/Manual/packages.html#PkgSurfaceMeshSimplification) -- Introduced four variations of the Garland-Heckbert simplification algorithm based on the probabilistic approach of Trettner and Kobbelt (Fast and Robust QEF Minimization using Probabilistic Quadrics): [`GarlandHeckbert_plane_policies`](https://doc.cgal.org/5.5/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1GarlandHeckbert__plane__policies.html), [`GarlandHeckbert_probabilistic_plane_policies`](https://doc.cgal.org/5.5/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1GarlandHeckbert__probabilistic__plane__policies.html), [`GarlandHeckbert_triangle_policies`](https://doc.cgal.org/5.5/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1GarlandHeckbert__triangle__policies.html), and [`GarlandHeckbert_probabilistic_triangle_policies`](https://doc.cgal.org/5.5/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1GarlandHeckbert__probabilistic__triangle__policies.html). -- The class `GarlandHeckbert_policies` has been deprecated, `GarlandHeckbert_plane_policies` replaces it. +- Added the functions [`CGAL::Polygon_mesh_processing::remesh_planar_patches()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__meshing__grp.html#ga7fca6fa2db94560ab6d32e6a77fc35b6) and [`CGAL::Polygon_mesh_processing::remesh_almost_planar_patches()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__meshing__grp.html#ga0e6da479548199a5d82c3cf0ed36e8a0), which can be used to remesh patches of coplanar faces in a mesh. -### [Point Set Processing](https://doc.cgal.org/5.5/Manual/packages.html#PkgPointSetProcessing3) +- Added the function [`CGAL::Polygon_mesh_processing::surface_Delaunay_remeshing()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__meshing__grp.html#gaff62f9415d2fe96d1d3095351f156ced), which can be used to remesh a surface triangle mesh using the Delaunay refinement algorithm from the [3D Mesh Generation](https://doc.cgal.org/5.6/Manual/packages.html#PkgMesh3) package. -- A new optional named parameter, `min_points_per_cell` has been added to [`grid_simplify_point_set()`](https://doc.cgal.org/5.5/Point_set_processing_3/group__PkgPointSetProcessing3Algorithms.html#ga7757ef9b3900e42fde26f5a0ac56e20f). By adding a minimal number of points in a cell such that a point is retained, one can also filter out low density areas and outliers: in the case of densely sampled point clouds, this yields better results than using grid simplification and then outlier removal, while being very vast. The default value is `1` to keep the previous behavior as default. +- Added the function [`CGAL::Polygon_mesh_processing::remove_almost_degenerate_faces()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__geometric__repair__grp.html#ga48008d2b66de8a68a7068f29db15dad6), which can be used to remove badly shaped triangles faces in a mesh. -### [dD Spatial Searching](https://doc.cgal.org/5.5/Manual/packages.html#PkgSpatialSearchingD) +- Added the functions [`CGAL::Polygon_mesh_processing::does_triangle_soup_self_intersect()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__intersection__grp.html#ga4909920dc48b8285e69feb845feb1e53) and [`CGAL::Polygon_mesh_processing::triangle_soup_self_intersections()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__intersection__grp.html#ga1c5fee17bd0d92d5a2fba77ed94d4b4d) to identify and report self-intersections in a triangle soup, similarly to existing functions on triangle meshes. -- Added the member function [`write_graphviz()`](https://doc.cgal.org/5.5/Spatial_searching/classCGAL_1_1Kd__tree.html#ac2851b5cafb8d5cce0dc5fb107c8f13f) to the class `Kd_tree` that writes the tree in a stream in the [Graphviz](https://graphviz.org/) format. +- Added the function [`CGAL::Polygon_mesh_processing::triangulate_polygons()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__meshing__grp.html#ga8b7db6aa8c3e79526b594739ba926d82), which allows users to triangulate polygon soups. -### [CGAL and the Boost Graph Library (BGL)](https://doc.cgal.org/5.5/Manual/packages.html#PkgBGL) +- Added a named parameter to [`CGAL::Polygon_mesh_processing::smooth_shape()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__meshing__grp.html#ga57fa999abe8dc557003482444df2a189) to disable the scaling, which otherwise aims to compensate volume loss during smoothing. -- Added the function [`invert_selection()`](https://doc.cgal.org/5.5/BGL/structCGAL_1_1Face__filtered__graph.html#aa428541ebbdd35f9a6e9a3ffd60178df) in the class [`Face_filtered_graph`](https://doc.cgal.org/5.5/BGL/structCGAL_1_1Face__filtered__graph.html), which toggles the selected status of a graph: selected faces are deselected, and unselected faces are selected. +- Deprecated the overloads of functions [`CGAL::Polygon_mesh_processing::triangulate_hole()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__hole__filling__grp.html#ga3abdf2d0558822e85f060966b69cae98), [`CGAL::Polygon_mesh_processing::triangulate_and_refine_hole()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__hole__filling__grp.html#ga9868fac4d9dca77462ad7828bc99d8a1), and [`CGAL::Polygon_mesh_processing::triangulate_refine_and_fair_hole()`](https://doc.cgal.org/5.6/Polygon_mesh_processing/group__PMP__hole__filling__grp.html#ga18eac756a8f8e5d5f73e645fd4e26cad) which have output iterators for vertices and faces as parameter. They are replaced by overloads with two additional named parameters. + +### [2D Convex Hulls](https://doc.cgal.org/5.6/Manual/packages.html#PkgConvexHull2) + +- **Breaking change**: The concept [`ConvexHullTraits_2`](https://doc.cgal.org/5.6/Convex_hull_2/classConvexHullTraits__2.html) no longer requires the functor `Less_signed_distance_to_line_2`, but requires the functor `Compare_signed_distance_to_line_2` instead. +- The long-deprecated classes `Convex_hull_projective_xy_traits_2`, `Convex_hull_projective_xz_traits_2`, and `Convex_hull_projective_yz_traits_2` have been removed. Users should use [`Projection_traits_xy_3`](https://doc.cgal.org/5.6/Kernel_23/classCGAL_1_1Projection__traits__xy__3.html), [`Projection_traits_xz_3`](https://doc.cgal.org/5.6/Kernel_23/classCGAL_1_1Projection__traits__xz__3.html), and [`Projection_traits_yz_3`](https://doc.cgal.org/5.6/Kernel_23/classCGAL_1_1Projection__traits__yz__3.html) instead. + +### [2D Triangulations](https://doc.cgal.org/5.6/Manual/packages.html#PkgTriangulation2) + +- Added the function [`CGAL::mark_domain_in_triangulation()`](https://doc.cgal.org/5.6/Triangulation_2/group__PkgTriangulation2Miscellaneous.html#ga0409755d0eb89100810230443a85e7eb) to mark faces connected with non-constrained edges as inside of the domain based on the nesting level. + +### [2D Conforming Triangulations and Meshes](https://doc.cgal.org/5.6/Manual/packages.html#PkgMesh2) + +- Added new overloads to the function [`write_VTU()`](https://doc.cgal.org/5.6/Mesh_2/group__PkgMesh2IO.html), with property maps for specifying the domain. +- Deprecated usage of boost parameters in favor of function named parameters in [`CGAL::lloyd_optimize_mesh_2()`](https://doc.cgal.org/5.6/Mesh_2/group__PkgMesh2Functions.html#gafeaf59d3fa014da287f8514913b38d05). +- Deprecated two overloads of the function [`refine_Delaunay_mesh()`](https://doc.cgal.org/5.6/Mesh_2/group__PkgMesh2Functions.html), and replaced them with versions using function named parameters. + +### [2D Hyperbolic Triangulations](https://doc.cgal.org/5.6/Manual/packages.html#PkgHyperbolicTriangulation2) + +- **Breaking change**: the concept [`HyperbolicTriangulationFaceBase_2`](https://doc.cgal.org/5.6/Hyperbolic_triangulation_2/classHyperbolicTriangulationFaceBase__2.html) has been modified to better reflect the triangulation's requirements and avoid a conflict with the requirements described by the concept `TriangulationDataStructure_2::Face`. The model [`CGAL::Hyperbolic_triangulation_face_base_2`](https://doc.cgal.org/5.6/Hyperbolic_triangulation_2/classCGAL_1_1Hyperbolic__triangulation__face__base__2.html) has been adapted correspondingly. + +### [3D Simplicial Mesh Data Structure](https://doc.cgal.org/5.6/Manual/packages.html#PkgSMDS3) (new package) + +- This new package wraps all the existing code that deals with a [`MeshComplex_3InTriangulation_3`](https://doc.cgal.org/5.6/SMDS_3/classMeshComplex__3InTriangulation__3.html) to describe 3D simplicial meshes, and makes the data structure independent from the [tetrahedral mesh generation](https://doc.cgal.org/5.6/Manual/packages.html#PkgMesh3) package. + +### [Tetrahedral Remeshing](https://doc.cgal.org/5.6/Manual/packages.html#PkgTetrahedralRemeshing) +- **Breaking change**: The template parameters of [`CGAL::Tetrahedral_remeshing::Remeshing_vertex_base_3`](https://doc.cgal.org/5.6/Tetrahedral_remeshing/group__PkgTetrahedralRemeshingClasses.html#ga7ef4f8c0c1ed715c34389ea4ee851a92) and [`CGAL::Tetrahedral_remeshing::Remeshing_cell_base_3`](https://doc.cgal.org/5.6/Tetrahedral_remeshing/classCGAL_1_1Tetrahedral__remeshing_1_1Remeshing__cell__base__3.html) have been modified. + +### [3D Mesh Generation](https://doc.cgal.org/5.6/Manual/packages.html#PkgMesh3) + +- Added two new named parameters to the named constructor [`CGAL::create_labeled_image_mesh_domain()`](https://doc.cgal.org/5.6/Mesh_3/classCGAL_1_1Labeled__mesh__domain__3.html#aec3f58e9883a8036a1b3e379df7d8fa9) for automatic detection and protection of 1D-curves that lie at the intersection of three or more subdomains extracted from labeled images. +- Added [`CGAL::Sizing_field_with_aabb_tree`](https://doc.cgal.org/5.6/Mesh_3/structCGAL_1_1Sizing__field__with__aabb__tree.html), a geometry-aware sizing field for feature edges in polyhedral domains. +- Added new meshing criterion [`edge_min_size`](https://doc.cgal.org/5.6/Mesh_3/classCGAL_1_1Mesh__criteria__3.html#a5f1c2649cb7ea346a3b6a2a8724b4df1) to avoid subdividing sharp edges that are shorter than a prescribed size bound. +- Added new meshing criteria [`facet_min_size`](https://doc.cgal.org/5.6/Mesh_3/classCGAL_1_1Mesh__criteria__3.html#a5f1c2649cb7ea346a3b6a2a8724b4df1) and [`cell_min_size`](https://doc.cgal.org/5.6/Mesh_3/classCGAL_1_1Mesh__criteria__3.html#a5f1c2649cb7ea346a3b6a2a8724b4df1) to prevent Delaunay refinement from creating simplices smaller than a prescribed bound. +- Deprecated usage of boost parameters in favor of function named parameters. + +### [3D Periodic Mesh Generation](https://doc.cgal.org/5.6/Manual/packages.html#PkgPeriodic3Mesh3) + +- Periodic Mesh Generation now supports non-cubic domains. +- Deprecated usage of boost parameters in favor of function named parameters. + +### [Surface Mesh Simplification](https://doc.cgal.org/5.6/Manual/packages.html#PkgSurfaceMeshSimplification) +- The stop predicates [`Count_stop_predicate`](https://doc.cgal.org/5.6/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Count__stop__predicate.html) and [`Count_ratio_stop_predicate`](https://doc.cgal.org/5.6/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Count__ratio__stop__predicate.html) are renamed to [`Edge_count_stop_predicate`](https://doc.cgal.org/5.6/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Edge__count__stop__predicate.html) and [`Edge_count_ratio_stop_predicate`](https://doc.cgal.org/5.6/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Edge__count__ratio__stop__predicate.html). Older versions have been deprecated. +- Introduced [`Face_count_stop_predicate`](https://doc.cgal.org/5.6/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Face__count__stop__predicate.html) and [`Face_count_ratio_stop_predicate`](https://doc.cgal.org/5.6/Surface_mesh_simplification/classCGAL_1_1Surface__mesh__simplification_1_1Face__count__ratio__stop__predicate.html), which can be used to stop the simplification algorithm based on a desired number of faces in the output, or a ratio between input and output face numbers. + +### [2D Regularized Boolean Set Operations](https://doc.cgal.org/5.6/Manual/packages.html#PkgBooleanSetOperations2) +- Exposed all required member functions of the [`GeneralPolygonWithHoles_2`](https://doc.cgal.org/5.6/Polygon/classGeneralPolygonWithHoles__2.html) concept (e.g., [`clear_outer_boundary()`](https://doc.cgal.org/5.6/Polygon/classGeneralPolygonWithHoles__2.html#a9f5f035047505a2ccab3e68770f51bc6), [`clear_holes()`](https://cgal.geometryfactory.com/CGAL/doc/master/Polygon/classGeneralPolygonWithHoles__2.html#a2a507be648f127ac605da8c670ea2580), and [`clear()`](https://doc.cgal.org/5.6/Polygon/classGeneralPolygonWithHoles__2.html#a2ca4d9b43cc9216c1b2cdb080a915944) ). + +### Known Bug + +- MSVC 2015 is still supported by this version of CGAL, but the feature _Segment Cell Iterator_ of the class [`CGAL::Triangulation_3`](https://doc.cgal.org/5.6/Triangulation_3/classCGAL_1_1Triangulation__3.html) does not compile with MSVC 2015. diff --git a/Maintenance/public_release/announcement/mailing.eml b/Maintenance/public_release/announcement/mailing.eml index 23ea320c9418..eaa3f34962c1 100644 --- a/Maintenance/public_release/announcement/mailing.eml +++ b/Maintenance/public_release/announcement/mailing.eml @@ -1,130 +1,177 @@ -Subject: CGAL 5.5 Released, Computational Geometry Algorithms Library +Subject: CGAL 5.6 Released, Computational Geometry Algorithms Library Content-Type: text/plain; charset="utf-8" Body: -The CGAL Open Source Project is pleased to announce the release 5.5 of +The CGAL Open Source Project is pleased to announce the release 5.6 of CGAL, the Computational Geometry Algorithms Library. Besides fixes and general enhancement to existing packages, the -following has changed since CGAL 5.4: +following has changed since CGAL 5.5: + +General Changes + +- Breaking change: Package-specific assertions, preconditions, and + postconditions (such as CGAL_triangulation_assertion) have been + removed. Corresponding CGAL-wide versions (such as CGAL_assertion) + should be used instead. + +Shape Detection (major changes) + +- Breaking change: The region growing part of the package have been + reworked to fix design issues introduced with the handling of + FaceGraph models. In particular, the notion of Item has been + introduced to reference an element in the input range of elements. + Region maps now operates on Item and no longer on the value type of + the input range. +- Breaking change: The method update() in the concept RegionType now + returns a Boolean instead of void, that is used inside the class + Region_growing for detecting if the input conditions for the new + region are satisfied. This change affects only user-defined types of + regions. +- Breaking change: The constructors of all models used together with + the region growing algorithm now enable users to provide parameters + through the named parameters mechanism. +- All fitting classes in the region growing framework are now using + better versions of the region conditions, more precise and faster, + including the correct normal orientations. +- Added new models of the concept RegionType for getting linear + regions in a set of 2D and 3D segments and on 2D and 3D polylines. +- Added the class Polyline_graph for extracting a set of polylines + from a face graph, which splits this graph into a set of + user-defined regions. +- Added new shapes to the Region Growing algorithm on a point set: + circles in 2D, spheres in 3D, and cylinders in 3D. + +2D Straight Skeleton and Polygon Offsetting (major changes) + +- Added weighted straight skeletons: weighted straight skeletons are a + generalization of straight skeletons. Contour edges are assigned a + positive weight, which can be understood as assigning a speed to the + wavefront spawned from the contour edge. +- Added straight skeleton extrusion: this CGAL package now implements + the extrusion of weighted straight skeletons of polygons with holes. + The output is a closed, combinatorially 2-manifold surface triangle + mesh. See also the news entry. + +Combinatorial Maps, Generalized Maps, and Linear Cell Complex + +- Added a version that uses indices instead of handles as dart and + attribute descriptors. As the indices are integers convertible from + and to std::size_t, they can be used as index into vectors which + store properties. To use the index version, Use_index must be + defined and be equal to CGAL::Tag_true in the item class. -3D Alpha Wrapping (new package) - -- This component takes a 3D triangle mesh, soup, or point set as - input, and generates a valid (watertight, intersection-free, and - combinatorially 2-manifold) surface triangle mesh that contains the - input. The algorithm proceeds by shrink-wrapping and refining a 3D - Delaunay triangulation, starting from a loose bounding box of the - input. Two user-defined parameters, alpha and offset, offer control - over the maximum size of cavities where the shrink-wrapping process - can enter, and the tightness of the final surface mesh to the input, - respectively. Once combined, these parameters provide a means to - trade fidelity to the input for complexity of the output. - - See also https://www.cgal.org/2022/05/18/alpha_wrap/. - -2D Straight Skeleton and Polygon Offsetting (breaking change) - -- Fix the output of the function - CGAL::create_exterior_skeleton_and_offset_polygons_with_holes_2() to - not take into account the offset of the outer frame. -- Fix the computation of the exterior offset of a polygon with holes - that was not computing the offset of the holes - -3D Convex Hulls - -- Added an overload of the function CGAL::convex_hull_3(), which - writes the result in an indexed triangle set. +2D Arrangements -2D Polygons +- Introduced an overload function template, namely draw(arr), that + renders arrangements based on the Basic_viewer_qt class template. As + of now, only 2D arrangements on the plane induced by (i) + segments, (ii) conics, and (iii) circular arcs or (linear) segments + are supported. +- Improved the traits class template that handles conics, namely + Arr_conic_traits_2. This includes the following: 1. Fixed a couple + of bugs and slightly optimized some functions. 2. Introduced + functionality that approximates conics with polylines. (This is used + to draw conic curves.) 3. Breaking change: Changed the interface to + generate conic curves. In the past, curves where generated directly + using the constructors of the conic and x-monotone conic constructs. + Now, they are constructed via function objects provided by the + traits. This eliminates the constructions of temporary kernels. The + old functionality is obsolete, but still supported for a limited + number of versions. It depends on a static member function of the + traits. In a future version this function will no longer be static, + implying that the old functionality will no longer be supported. +- Introduced functionality that approximates circular segments with + polylines. (This is used to draw conic curves.) -- Add vertex, edge, and hole ranges. -- The concept GeneralPolygonWithHoles_2 now requires the nested type - Polygon_2 instead of General_polygon_2. +Polygon Mesh Processing -2D Regularized Boolean Set-Operations +- Added functions + CGAL::Polygon_mesh_processing::region_growing_of_planes_on_faces() + and CGAL::Polygon_mesh_processing::detect_corners_of_regions(), + which enable partitioning a mesh into planar regions using the + region growing algorithm from the Shape Detection package. -- The concept GeneralPolygonSetTraits_2 now requires the nested type - Construct_polygon_with_holes_2 instead of - Construct_general_polygon_with_holes_2. +- Added the functions + CGAL::Polygon_mesh_processing::remesh_planar_patches() and + CGAL::Polygon_mesh_processing::remesh_almost_planar_patches(), which + can be used to remesh patches of coplanar faces in a mesh. -Combinatorial Maps +- Added the function + CGAL::Polygon_mesh_processing::surface_Delaunay_remeshing(), which + can be used to remesh a surface triangle mesh using the Delaunay + refinement algorithm from the 3D Mesh Generation package. -- Removed old code deprecated in CGAL 4.9 and 4.10 (global functions, - and information associated with darts). +- Added the function + CGAL::Polygon_mesh_processing::remove_almost_degenerate_faces(), + which can be used to remove badly shaped triangles faces in a mesh. -2D Arrangements +- Added the functions + CGAL::Polygon_mesh_processing::does_triangle_soup_self_intersect() + and + CGAL::Polygon_mesh_processing::triangle_soup_self_intersections() to + identify and report self-intersections in a triangle soup, similarly + to existing functions on triangle meshes. -- Fixed the intersect_2, compare_y_at_x_right, and compare_y_at_x_left - function objects of the traits class template - Arr_geodesic_arc_on_sphere_traits_2 that handles geodesic arcs on - sphere and applied a small syntactical fix to the tracing traits. +- Added the function + CGAL::Polygon_mesh_processing::triangulate_polygons(), which allows + users to triangulate polygon soups. -Tetrahedral Mesh Generation +- Added a named parameter to + CGAL::Polygon_mesh_processing::smooth_shape() to disable the + scaling, which otherwise aims to compensate volume loss during + smoothing. -- Added the function remove_isolated_vertices() as a post-processing - step for the tetrahedral mesh generation. +- Deprecated the overloads of functions + CGAL::Polygon_mesh_processing::triangulate_hole(), + CGAL::Polygon_mesh_processing::triangulate_and_refine_hole(), and + CGAL::Polygon_mesh_processing::triangulate_refine_and_fair_hole() + which have output iterators for vertices and faces as parameter. + They are replaced by overloads with two additional named parameters. -Polygon Mesh Processing -- Added the function - CGAL::Polygon_mesh_processing::orient_triangle_soup_with_reference_triangle_soup(), - which enables re-orienting the faces of a triangle soup based on the - orientation of the nearest face in a reference triangle soup. -- Added the function - CGAL::Polygon_mesh_processing::compatible_orientations(), which - enables to retrieve the (in)compatibility of orientations of faces - from different connected components. -- Added the function - CGAL::Polygon_mesh_processing::tangential_relaxation(), which - applies an area-based tangential mesh smoothing to the vertices of a - surface triangle mesh. -- Added the named parameter visitor to the function - triangulate_hole(), which enables to track progress with callbacks. -- Added more functions in the visitor of the corefinement based - methods to track progress. +Tetrahedral Remeshing -Surface Mesh Simplification +- Breaking change: The template parameters of + CGAL::Tetrahedral_remeshing::Remeshing_vertex_base_3 and + CGAL::Tetrahedral_remeshing::Remeshing_cell_base_3 have been + modified. -- Introduced four variations of the Garland-Heckbert simplification - algorithm based on the probabilistic approach of Trettner and - Kobbelt (Fast and Robust QEF Minimization using Probabilistic - Quadrics): GarlandHeckbert_plane_policies, - GarlandHeckbert_probabilistic_plane_policies, - GarlandHeckbert_triangle_policies, and - GarlandHeckbert_probabilistic_triangle_policies. -- The class GarlandHeckbert_policies has been deprecated, - GarlandHeckbert_plane_policies replaces it. -Point Set Processing +3D Mesh Generation -- A new optional named parameter, min_points_per_cell has been added - to grid_simplify_point_set(). By adding a minimal number of points - in a cell such that a point is retained, one can also filter out low - density areas and outliers: in the case of densely sampled point - clouds, this yields better results than using grid simplification - and then outlier removal, while being very vast. The default value - is 1 to keep the previous behavior as default. +- Added two new named parameters to the named constructor + CGAL::create_labeled_image_mesh_domain() for automatic detection and + protection of 1D-curves that lie at the intersection of three or + more subdomains extracted from labeled images. +- Added CGAL::Sizing_field_with_aabb_tree, a geometry-aware sizing + field for feature edges in polyhedral domains. +- Added new meshing criterion edge_min_size to avoid subdividing sharp + edges that are shorter than a prescribed size bound. +- Added new meshing criteria facet_min_size and cell_min_size to + prevent Delaunay refinement from creating simplices smaller than a + prescribed bound. +- Deprecated usage of boost parameters in favor of function named + parameters. -dD Spatial Searching -- Added the member function write_graphviz() to the class Kd_tree that - writes the tree in a stream in the Graphviz format. +Known Bug -CGAL and the Boost Graph Library (BGL) +- MSVC 2015 is still supported by this version of CGAL, but the + feature Segment Cell Iterator of the class CGAL::Triangulation_3 + does not compile with MSVC 2015. -- Added the function invert_selection() in the class - Face_filtered_graph, which toggles the selected status of a graph: - selected faces are deselected, and unselected faces are selected. +See https://www.cgal.org/2023/07/28/cgal56/ for a complete list of changes. -See https://www.cgal.org/2022/07/15/cgal55/ for a -complete list of changes. +The development of CGAL will then now on the future CGAL-6.0 (planned +for December 2023), with bug-fixes regularly backported to the branches +for CGAL-5.5.x and CGAL-5.6.x. -The same day, we also published CGAL-5.4.2 is the second bug-fix release for -CGAL-5.4. See https://www.cgal.org/2022/07/15/cgal5.4.2/. +CGAL-6.0 will be the first release of CGAL requiring C++17 or later. It +will also support Qt6. The CGAL project is a collaborative effort to develop a robust,