CGAL 4.13 beta2 released


CGAL 4.13 beta2 released

Download CGAL-4.13-beta2

CGAL-4.13-beta2 documentation

CGAL 4.13 offers the following improvements and new functionality over CGAL 4.12:


3D Periodic Mesh Generation (new package)

  • This package generates 3-dimensional periodic meshes. It computes isotropic simplicial meshes for domains described through implicit functional boundaries over the flat torus (which can also seen in the Euclidean space as a periodic cube). The output is a periodic 3D mesh of the domain volume and conformal surface meshes for all the boundary and subdividing surfaces. The package is closely related to the 3D Mesh Generation package, with similar concepts, classes, and API.


  • The library CGAL_Qt5 now contains a fork of the version 2.7.0 of libQGLViewer. The corresponding code is in the package GraphicsView. The dependency for the external library libQGLViewer is therefore dropped for all demos.


  • A new function CGAL::draw() is added in the packages Polyhedral Surface, Surface Mesh, Linear Cell Complex, 2D Triangulations, and 3D Triangulations, enabling to draw the corresponding data structures.

2D and 3D Linear Geometry Kernel

  • An operator() that takes a Ray_3 has been added to the concept ConstructProjectedPoint_3.

Convex hull 3

  • Added the function extreme_points_3() computing the points on the convex hull without underlying connectivity.
  • Added a traits adapter called Extreme_points_traits_adapter_3 that enables the use of the function extreme_points_3() on a range of keys, each key being associated to 3D point using a property map. This can be used to get the vertices of a mesh that are on it convex hull, or the indices of points in a range that are on it convex hull.
  • Fix a bug in the computation of the 3D convex hull that was leaving extra points within subset of coplanar points that do not belong to the minimal convex hull.

2D and 3D Triangulations

  • Added a new type of intersection to handle the insertion of intersecting constraints in a Constrained_triangulation_2.
  • Breaking change: The long-deprecated class Triangulation_cell_base_with_circumcenter_3 and its associated concept have been removed. Users should use the classes Delaunay_cell_base_with_circumcenter_3 or Regular_cell_base_with_circumcenter_3, depending on which type of triangulation they are using.
  • Breaking change: The deprecated functions mirror_index and mirror_vertex of the class Triangulation_face_base_2 have been removed. Users should use the equivalent functions from the class Triangulation_2.

3D Mesh Generation

  • Breaking change: The template parameters of the class template Labeled_mesh_domain_3 have been simplified. The three constructors of that class template have been replaced by a new unique constructor using Boost named parameters. Three new static template member functions that act as named constructors have been added:
    • create_gray_image_mesh_domain(), to create a domain from a 3D gray image,
    • create_labeled_image_mesh_domain(), to create a domain from a 3D labeled image, and
    • create_implicit_mesh_domain(), to create a domain from an implicit function.
  • The class templates Implicit_mesh_domain_3, Gray_image_mesh_domain_3, and Labeled_image_mesh_domain_3 are now deprecated.
  • Breaking change: The headers <CGAL/Mesh_3/Implicit_to_labeled_function_wrapper.h> and <CGAL/Mesh_3/Labeled_mesh_domain_3.h>, that were deprecated since CGAL 4.5, have been removed.
  • Breaking change: the concepts MeshCellCriteria_3 and MeshFacetCriteria_3 now require the triangulation to be passed in their operator(). Models of these concepts that are provided by CGAL have been modified accordingly.
  • Breaking change: It is no longer possible to use the deprecated, pre-CGAL 3.8 specifications in MeshCellCriteria_3 and MeshFacetCriteria_3 (that is, using Facet_badness and Cell_badness instead of Is_facet_bad and Is_cell_bad).
  • The concept MeshFacetCriteria_3 no longer requires the function operator()(Cell_handle c, int i).
  • The concept MeshEdgeCriteria_3 no longer requires the function operator()(const Edge& e).
  • The concept MeshComplexWithFeatures_3InTriangulation_3 no longer requires the functions number_of_edges(Curve_index index) and number_of_corners(Corner_index index).
  • Introduced the concept MeshTriangulationTraits_3, which covers the needs of the traits class used in Mesh_3 (and Periodic_3_mesh_3). The traits class used as template parameter of Mesh_triangulation_3 and Periodic_3_mesh_triangulation_3 must be a model of this concept.
  • Added the function Mesh_domain_with_polyline_features_3::add_corner(), which allows users to add a single corner (that is not incident to any polyline) to the mesh complex.
  • Breaking change: CGAL::lloyd_optimize_mesh_3 now depends on the Eigen library.

Polygon Mesh Processing

  • Added a named parameter in stitching functions that allows to choose whether the operation should be performed per connected component or globally.
  • Added a function, CGAL::Polygon_mesh_processing::transform(), to apply a transformation to a mesh.
  • Added a named parameter visitor in corefinement-related functions that makes it possible to pass a visitor to the function in order to track the creation of new faces.
  • Added a named parameter throw_on_self_intersection in all corefinement-related functions, which enables to check for self-intersecting faces involved in the intersection before trying to corefine the input meshes. This new parameter replaces the bool parameter in corefine().
  • Added the function corefine_and_compute_boolean_operations(), which can be used to compute the result of several Boolean operations between two volumes at the same time.
  • Added the function clip(), which can be used to clip a triangulated surface mesh by a plane or a clipping volume.
  • Constrained vertices are now guaranteed to be kept in the mesh after calling isotropic_remeshing() (and not only the points associated to constrained vertices, as it was before).
  • Added a function, CGAL::Polygon_mesh_processing::extrude_mesh(), to perform an extrusion of an open polygon mesh.

Estimation of Local Differential Properties of Point-Sampled Surfaces Reference

  • Breaking change: CGAL::Monge_via_jet_fitting now depends on the Eigen library.

Point Set Processing

  • Added a callback mechanism to the following functions: CGAL::bilateral_smooth_point_set(), CGAL::compute_average_spacing(), CGAL::grid_simplify_point_set(), CGAL::hierarchy_simplify_point_set(), CGAL::jet_estimate_normals(), CGAL::jet_smooth_point_set(), CGAL::pca_estimate_normals(), CGAL::remove_outliers() and CGAL::wlop_simplify_and_regularize_point_set().


  • Added data structures to handle classification of Surface Meshes and of Clusters.
  • Added public API to compute features in parallel.
  • Breaking change: features based on products/divisions of eigenvalues are replaced by simple eigenvalue features. Features based on statistics on the HSV color channels are replaced by simple HSV color channel features.
  • Breaking change: the API of CGAL::Classification::Point_set_feature_generator has been simplified.

Bounding Volumes

  • Breaking change: CGAL::Approximate_min_ellipsoid_d now depends on the Eigen library.


  • The output of the natural and regular neighbor functions (resp. the gradient fitting functions) is no longer restricted to a Point/Coordinate pair (resp. Point/Vector pair). Instead, users can provide their own functor to format the output as they desire.
  • The interpolation functions can now operate on any combination of Type/Coordinate, provided that the values and gradients functors can also be evaluated using ‘Type’. The combination of these two changes allow, for example, to operate with Vertex/Coordinate pairs, which enables a more efficient access to values and gradients by storing information directly in the vertex.
  • The concepts InterpolationTraits and GradientFittingTraits have been updated to reflect the real needs of the code (some types and operators were used in the code but did not appear in the concepts).

CGAL and the Boost Graph Library (BGL)

  • Added a helper function, CGAL::is_valid_polygon_mesh, that checks the validity of a polygon mesh using BGL functions.
  • Improved the function CGAL::Euler::collapse_edge such that the target vertex of the collapsed edge is now always kept after the collapse.
  • The function copy_face_graph() now uses named parameters, some allowing it to use property maps instead of output iterators.
  • Addition of the following named parameters :
    • vertex_to_vertex_output_iterator
    • halfedge_to_halfedge_output_iterator
    • face_to_face_output_iterator
    • vertex_to_vertex_map
    • halfedge_to_halfedge_map
    • face_to_face_map

CGAL and Solvers

  • Breaking change: CGAL::Diagonalize_traits is now deprecated and should not be used. The class CGAL::Eigen_diagonalize_traits (along with the Eigen library) should be used instead.

CGAL and Boost Property Maps

  • Added a read-write property map to convert on-the-fly geometric objects from Cartesian kernels.