CGAL 6.0 offers the following improvements and new functionality over CGAL 5.6:
Changelog
General Changes
- CGAL 6.0 is the first release of CGAL that requires a C++ compiler
with the support of C++17 or later. The new list of supported compilers is:
- Visual C++ 15.9, 16.10, 17.0 (from Visual Studio 2017, 2019 and 2022) or later
- Gnu g++ 11.4.0 or later (on Linux or macOS)
- LLVM Clang version 15.0.7 or later (on Linux)
- Apple Clang compiler versions 10.0.1, 12.0.5, and 15.0.0 (on macOS)
- The minimal supported version of Boost is now 1.72.0.
- GMP/MPFR are no longer mandatory to use CGAL, Boost.Multiprecision. can be used instead.
- The CGAL
Core
library is no longer based on GMP, but on Boost.Multiprecision. Either GMP backend or Boost backend can be used. - All demos are now based on Qt6.
- Breaking change: The CMake file
UseCGAL.cmake
has been removed from CGAL. Usages of the CMake variables${CGAL_USE_FILE}
and${CGAL_LIBRARIES}
must be replaced by a link to the imported targetCGAL::CGAL
, for example:target_link_library(your_target PRIVATE CGAL::CGAL)
.
Kinetic Space Partition (new package)
- This package implements kinetic space partition: based on a set of planar input shapes, the bounding box of the input data is split into convex volumes. The complexity of the partition can be adjusted with a single parameter.
Kinetic Surface Reconstruction (new package)
- The package implements a piece-wise planar surface reconstruction pipeline from point clouds combining methods from the Shape Detection, Shape Regularization and Kinetic Shape Partition packages and graph-cut to reconstruct surfaces from point clouds.
Basic Viewer (new package)
- The basic viewer package provides interactive visualization for most CGAL packages,
such as 2D Arrangements,
2D Regularized Boolean Set-Operations,
Linear Cell Complex,
3D Boolean Operations on Nef Polyhedra,
2D Periodic Triangulations,
3D Point Set,
2D Polygons,
3D Polyhedral Surface,
2D Straight Skeleton and Polygon Offsetting,
Surface Mesh,
2D Triangulations,
3D Triangulations,
2D Voronoi Diagrams,
and more.
The most simple use case of the basic viewer is the call of the global
CGAL::draw()
function. There is one suchdraw()
function for each CGAL package that has a basic viewer. Such a call opens an interactive window showing the given model and allowing to navigate in the scene, show or hide some specific cells, show the interior of the model if any, etc. TheBasic_viewer
is based on Qt6.
Polygon Repair (new package)
- This package provides algorithms to repair 2D polygons, polygons with holes, and multipolygons with holes, by selecting faces of the arrangement of the input using the odd-even heuristic.
2D and 3D Linear Geometry Kernel
- Breaking change: Replaced all instances of
boost::variant
withstd::variant
in the intersection functions. - Breaking change: Replaced all instances of
boost::optional
withstd::optional
in the intersection functions.
3D Polyhedral Surface
- The demo of this package, also known as “Polyhedron Demo” has been renamed “CGAL Lab” and moved to its own package (“Lab”).
2D and 3D Fast Intersection and Distance Computation (AABB Tree)
- The AABB tree can now be used with 2D or 3D primitives:
- The concepts
AABBGeomTraits
andAABBRayIntersectionGeomTraits
have been replaced byAABBGeomTraits_3
and byAABBRayIntersectionGeomTraits_3
, respectively. - The concepts
AABBGeomTraits_2
andAABBRayIntersectionGeomTraits_2
have been introduced, as the 2D counterparts. - The class
CGAL::AABB_traits
is deprecated and replaced byCGAL::AABB_traits_3
. - The class
CGAL::AABB_traits_2
is introduced as the 2D counterpart. - The class
CGAL::AABB_segment_primitive
has been deprecated and replaced by the classCGAL::AABB_segment_primitive_3
. - The class
CGAL::AABB_triangle_primitive
has been deprecated and replaced by the classCGAL::AABB_triangle_primitive_3
. - The following 2D primitive classes have been added:
CGAL::AABB_segment_primitive_2
,CGAL::AABB_polyline_segment_primitive_2
,CGAL::AABB_triangle_primitive_2
,CGAL::AABB_indexed_triangle_primitive_2
.
- The concepts
- Breaking change: The concept
AABBTraits
now refines the conceptSearchTraits
. - Breaking change: Replaced all instances of
boost::optional
withstd::optional
.
2D Arrangements
- Breaking change: Replaced all instances of
boost::variant
withstd::variant
. - Breaking change: The type of the result of point location queries has been changed to
std::variant
. Support for the old macroCGAL_ARR_POINT_LOCATION_VERSION
has been removed. - Breaking change: Eliminated the error-prone C-type casting that was used to define observers.
In general, backward compatibility was maintained; however, the class template
CGAL::Arr_observer
has been replaced by an alias template. (The classCGAL::Arr_observer
was renamed toCGAL::Aos_observer
). - Introduced
Arr_dcel
, which essentially replaces the formerCGAL::Arr_default_dcel
. Backward compatibility was maintained by the introduction of the alias templateCGAL::Arr_default_dcel
.CGAL::Arr_dcel
, as opposed to the formerCGAL::Arr_default_dcel
is templated (in addition to the geometry traits) byVertex
,Halfedge
, andFace
template parameters, and they have default type values. All this enables the layered extension of DCEL records. - Fixed a bug in the zone construction code applied to arrangements of geodesic arcs on a sphere, when inserting an arc that lies on the identification curve.
- Introduced a new interactive program that demonstrates 2D arrangements embedded on the sphere
called
earth
. The program (i) reads a database of all administrative boundaries of the countries in the world, (ii) displays the globe with all countries and land covered by water (which is land not covered by countries) on a window, and (ii) enables interaction with the user.
3D Envelopes
- Breaking change:
Construct_projected_boundary_2
inEnvelopeTraits_3
now usesstd::variant
instead ofCGAL::Object
. - Passed the base class of
CGAL::Env_plane_traits_3
as a template parameter with a default value (being the 2D arrangement linear traits). Similarly, passed the base class ofCGAL::Env_triangle_traits_3
as a template parameter with a default value (being the 2D arrangement segment traits).
Combinatorial Maps and Generalized Maps
- Added the function
insert_cell_1_between_two_cells_2()
to theGenericMap
concept, which enables users to insert an edge between two different faces in order to create faces with holes.
Quadtrees, Octrees, and Orthtrees
- Breaking change:
- Node splitting behavior and per-node data are now customizable via the Traits class.
- Nodes are now stored as a property map, with properties of each node accessed by index.
- Nearest neighbors functions only work for Orthtrees which provide the necessary functionality.
CGAL and the Boost Graph Library (BGL)
- Added the function
CGAL::remove_all_elements()
, which removes vertices, halfedges, and faces without collecting garbage and without removing properties. - Dynamic property maps can now have a default value.
- The class
CGAL::Face_filtered_graph
now supports patch IDs of any type and not justfaces_size_type
. The only requirement is that the type is hashable.
Polygon Mesh Processing
- Added the function
CGAL::Polygon_mesh_processing::autorefine_triangle_soup()
, which can be used to refine a soup of triangles such that no pair of triangles intersects in their interiors. Also added, the functionCGAL::Polygon_mesh_processing::autorefine()
operating directly on a triangle mesh and updating it using the aforementioned function on a triangle soup. - Added the class
CGAL::Corefinement::Non_manifold_output_visitor
, which can be used in corefinement based functions to deal with non-manifold outputs. - Added the option to use a variable sizing field for
CGAL::Polygon_mesh_processing::isotropic_remeshing()
, and a sizing function based on a measure of local curvature for adaptive remeshing. - Added the function
CGAL::Polygon_mesh_processing::interpolated_corrected_curvatures()
which can be used to compute the mean and Gaussian curvatures, as well as the principal curvature and directions. - Added the function
CGAL::Polygon_mesh_processing::refine_mesh_at_isolevel()
which can be used to refine a polygon mesh along an isocurve. - Added the function
CGAL::Polygon_mesh_processing::add_bbox()
, which enables adding a tight or extended, triangulated or not, bounding box to a face graph.
2D Triangulations
- Breaking change: the concept
TriangulationTraits_2
now requires an additional functorCompare_xy_2
.
3D Triangulations
- Added three member functions
vertices()
to the classCGAL::Triangulation_3
. Each of them returns an array containing the vertices of the given triangulation simplex.
dD Triangulations
- Breaking change:
CGAL::TDS_full_cell_mirror_storage_policy
is now unsupported in dimension larger than 127. - Breaking change: Inserting multiple unweighted points in the same position now keeps the first one, instead of switching to the latest. This only affects custom point types where not all points in the same position are equivalent.
Tetrahedral Remeshing
- Added a sizing field as new parameter of
CGAL::tetrahedral_isotropic_remeshing()
, which can be used to perform non-uniform and adaptive remeshing. - Breaking change: The template parameters of
CGAL::Tetrahedral_remeshing::Remeshing_cell_base_3
have been modified, reverting changes introduced in CGAL 5.6. - Breaking change: The vertex base of
CGAL::Tetrahedral_remeshing::Remeshing_vertex_base_3
must now be a model of the conceptSimplicialMeshVertexBase_3
(and not onlyTriangulationVertexBase_3
).
3D Simplicial Mesh Data Structure
- Breaking change: The template parameters of
CGAL::Simplicial_mesh_cell_base_3
have been modified to enable passing a geometric traits and a custom cell base class.
3D Mesh Generation
- Breaking change: Removed the concept
TriangleAccessor
, the template parameterTriangleAccessor
, as well as the classTriangle_accessor
. These were no longer used for several releases. - Breaking change: Removed the class templates
CGAL::Gray_image_mesh_domain_3
,CGAL::Implicit_mesh_domain_3
, andCGAL::Labeled_image_mesh_domain_3
, which were deprecated since CGAL-4.13. - Added new meshing criterion
edge_distance
, an upper bound for the distance from the edge to the 1D feature. - Breaking change: the concept
MeshEdgeCriteria_3
was modified to include the new meshing criterionedge_distance
.
3D Surface Mesh Generation
- This package is deprecated and the package 3D Mesh Generation should be used instead.
Surface Mesh Parameterization
- Breaking change: The method
CGAL::Surface_mesh_parameterization::LSCM_parameterizer_3
now requires the Eigen library. - Breaking change: CGAL no longer ships its own version of OpenNL.
Surface Mesh
- Breaking change: The return type of
CGAL::Surface_mesh::property_map()
has been changed tostd::optional
.
3D Point Set
- Breaking change: The return type of
CGAL::Point_set_3::property_map()
has been changed tostd::optional
.
Shape Detection
- Breaking change: Replaced all instances of
boost::shared_ptr
withstd::shared_ptr
.
2D Straight Skeleton and Polygon Offsetting
- Breaking change: Replaced all instances of
boost::shared_ptr
withstd::shared_ptr
. - Breaking change: Replaced all instances of
boost::optional
withstd::optional
.