CGAL 5.6 offers the following improvements and new functionality over CGAL 5.5:
Changelog
General Changes
- Breaking change: Package-specific assertions, preconditions, and postconditions (such as
CGAL_triangulation_assertion
) have been removed. Corresponding CGAL-wide versions (such asCGAL_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 ofItem
has been introduced to reference an element in the input range of elements. Region maps now operates onItem
and no longer on the value type of the input range. - Breaking change: The method
update()
in the conceptRegionType
now returns aBoolean
instead ofvoid
, that is used inside the classRegion_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.
2D and 3D Linear Geometry Kernel
- Added the functor
CompareAngle_3
to the conceptKernel
to compare an angle defined by three points to the cosinus of another angle.
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 toCGAL::Tag_true
in the item class.
Linear Cell Complex
- Added the class
Linear_cell_complex_incremental_builder_3
.
2D Arrangements
- Introduced an overload function template, namely
draw(arr)
, that renders arrangements based on theBasic_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.)
Polygon Mesh Processing
-
Added functions
CGAL::Polygon_mesh_processing::region_growing_of_planes_on_faces()
andCGAL::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. -
Added the functions
CGAL::Polygon_mesh_processing::remesh_planar_patches()
andCGAL::Polygon_mesh_processing::remesh_almost_planar_patches()
, which can be used to remesh patches of coplanar faces in a mesh. -
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. -
Added the function
CGAL::Polygon_mesh_processing::remove_almost_degenerate_faces()
, which can be used to remove badly shaped triangles faces in a mesh. -
Added the functions
CGAL::Polygon_mesh_processing::does_triangle_soup_self_intersect()
andCGAL::Polygon_mesh_processing::triangle_soup_self_intersections()
to identify and report self-intersections in a triangle soup, similarly to existing functions on triangle meshes. -
Added the function
CGAL::Polygon_mesh_processing::triangulate_polygons()
, which allows users to triangulate polygon soups. -
Added a named parameter to
CGAL::Polygon_mesh_processing::smooth_shape()
to disable the scaling, which otherwise aims to compensate volume loss during smoothing. -
Deprecated the overloads of functions
CGAL::Polygon_mesh_processing::triangulate_hole()
,CGAL::Polygon_mesh_processing::triangulate_and_refine_hole()
, andCGAL::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.
2D Convex Hulls
- Breaking change: The concept
ConvexHullTraits_2
no longer requires the functorLess_signed_distance_to_line_2
, but requires the functorCompare_signed_distance_to_line_2
instead. - The long-deprecated classes
Convex_hull_projective_xy_traits_2
,Convex_hull_projective_xz_traits_2
, andConvex_hull_projective_yz_traits_2
have been removed. Users should useProjection_traits_xy_3
,Projection_traits_xz_3
, andProjection_traits_yz_3
instead.
2D Triangulations
- Added the function
CGAL::mark_domain_in_triangulation()
to mark faces connected with non-constrained edges as inside of the domain based on the nesting level.
2D Conforming Triangulations and Meshes
- Added new overloads to the function
write_VTU()
, with property maps for specifying the domain. - Deprecated usage of boost parameters in favor of function named parameters in
CGAL::lloyd_optimize_mesh_2()
. - Deprecated two overloads of the function
refine_Delaunay_mesh()
, and replaced them with versions using function named parameters.
2D Hyperbolic Triangulations
- Breaking change: the concept
HyperbolicTriangulationFaceBase_2
has been modified to better reflect the triangulation’s requirements and avoid a conflict with the requirements described by the conceptTriangulationDataStructure_2::Face
. The modelCGAL::Hyperbolic_triangulation_face_base_2
has been adapted correspondingly.
3D Simplicial Mesh Data Structure (new package)
- This new package wraps all the existing code that deals with a
MeshComplex_3InTriangulation_3
to describe 3D simplicial meshes, and makes the data structure independent from the tetrahedral mesh generation package.
3D Mesh Generation
- 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
andcell_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.
3D Periodic Mesh Generation
- Periodic Mesh Generation now supports non-cubic domains.
- Deprecated usage of boost parameters in favor of function named parameters.
Surface Mesh Simplification
- The stop predicates
Count_stop_predicate
andCount_ratio_stop_predicate
are renamed toEdge_count_stop_predicate
andEdge_count_ratio_stop_predicate
. Older versions have been deprecated. - Introduced
Face_count_stop_predicate
andFace_count_ratio_stop_predicate
, 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
- Exposed all required member functions of the
GeneralPolygonWithHoles_2
concept (e.g.,clear_outer_boundary()
,clear_holes()
, andclear()
).