CGAL 4.8 offers the following improvements and new functionality over CGAL 4.7:

## Changelog

### General

- The support for Qt3 is dropped and all demos using it have been removed.

### Installation

- Starting with Visual C++ 2015 we no longer require
`Boost.Thread`

as we use the C++11 keyword`thread_local`

and the C+11 class`std::mutex`

. - The same holds for g++ 4.8 or later when the C++11 standard is used.

### Optimal Transportation Curve Reconstruction (new package)

- This package implements a method to reconstruct and simplify 2D point sets. The input is a set of 2D points with mass attributes, possibly hampered by noise and outliers. The output is a set of line segments and isolated points which approximate the input points.

### 2D Regularized Boolean Set-Operations

- Improved the performance of operations in some settings.
**Breaking change**: This improvement requires changes of the face and halfedge type of the underlying arrangement Dcel. See the concepts`GeneralPolygonSetDcelHalfedge`

and`GeneralPolygonSetDcelFace`

for more details. If you use a different simplex types, inheriting your simplices from`CGAL::Gps_face_base`

and`CGAL::Gps_halfedge_base`

is sufficient to accommodate for the update.

### 3D Boolean Operations on Nef Polyhedra

- Added 3 new constructors: from a point range, from a point, and from a segment.

### Combinatorial Maps

**Breaking change**: Changed the type of Boolean marks, old type is int, new type is`size_type`

. If no more mark is available,`get_new_mark`

throws an exception, instead of returning`-1`

.

### 2D Arrangements

- Sped up the edge removal in case the incident faces contains many holes.
- Set the format of polylines and polycurves. The format of a general polyline or polycurve consists of the sequence of subcurves that comprise the original curve. The format of a polyline of linear segments consists of the sequence of points that define the original curve. (The latter restores the format used before polycurves were introduced in 4.7.) Fix the extraction from istream and insertion into ostream operators of polylines and polycurves accordingly.
- Fixed the traits class that handles Bezier curves. In particular, fix the case where the curve is closed (i.e, the first and last control points coincide).

### 3D Mesh Generation

- Added support of 3D gray level images as input for the tetrahedral mesh generation.
**Breaking change:**All models of the concept`MeshDomain_3`

must now provide a member function`bbox()`

.

### Advancing Front Surface Reconstruction

- Optional template functor
`Filter`

is replaced by another optional template functor`Priority`

. This allows to change the way facets are prioritized by the algorithm instead of having a simple option to reject some facets.**Breaking change**: Programs using the old`Filter`

API will not compile anymore as it must be replaced with the`Priority`

API as described in the manual. Codes using the default behavior are not impacted.

### Polygon Mesh Processing

- Added a new triangle-based isotropic remeshing algorithm for
triangulated surface meshes,
`CGAL::Polygon_mesh_processing::isotropic_remeshing()`

and a helper function for isotropic remeshing :`CGAL::Polygon_mesh_processing::split_long_edges()`

- Added the function
`CGAL::Polygon_mesh_processing::border_halfedges()`

to collect the border of a given face range - Added the function
`CGAL::Polygon_mesh_processing::remove_isolated_vertices()`

to be used on any polygon mesh - Added the function
`CGAL::Polygon_mesh_processing::triangulate_face()`

to triangulate a single face of a polygon mesh - Added an overload for
`CGAL::Polygon_mesh_processing::triangulate_faces()`

to triangulate a range of faces of a polygon mesh - Added function
`keep_large_connected_components()`

- Added measuring functions for polygon meshes, to compute length, area, and volume of simplices or group of simplices of a polygon mesh.
- Added function
`bbox_3()`

to compute the bounding box of a polygon mesh.

### Point Set Processing

**Breaking change:**new template parameter`Concurrency_tag`

for the functions`compute_average_spacing()`

,`edge_aware_upsample_point_set()`

,`jet_estimate_normals()`

,`jet_smooth_point_set()`

, and`pca_estimate_normals()`

. To update your code simply add as first template parameter`CGAL::Sequential_tag`

or`CGAL::Parallel_tag`

when calling one of these functions.`CGAL::Parallel_tag`

can no longer be used in Point Set Processing algorithms if TBB is not available.- Added a new simplification algorithm based on hierarchical clustering:
`CGAL::hierarchy_simplify_point_set()`

. It allows either to uniformly simplify the point set or to automatically adapt the local density of points to the local variation of the input computed by principal component analysis. - New IO functions for PLY format (Polygon File Format):
`CGAL::read_ply_points()`

,`CGAL::read_ply_points_and_normals()`

,`CGAL::write_ply_points()`

and`CGAL::write_ply_points_and_normals()`

.

### Surface Mesh Parameterization

`LSCM_parameterizer_3`

now uses by default Eigen instead of OpenNL as a model of`SparseLinearAlgebraTraits_d`

.

### Spatial Searching

- Added function to find any point in a range query, that is neither all points, nor the closest one.

### Principal Component Analysis

- Added a template parameter
`DiagonalizeTraits`

for functions`CGAL::linear_least_squares_fitting_2()`

and`CGAL::linear_least_squares_fitting_3()`

. This allows to either choose the legacy internal diagonalization code from CGAL or the Eigen implementation (or any class that is a model of`DiagonalizeTraits`

). Variants of the function that automatically deduce the kernel also automatically select the diagonalizer, so the API is mostly preserved.

### CGAL and Solvers

- This package now includes all CGAL concepts for solvers with models using the third party Eigen library.

### CGAL and the Boost Graph Library (BGL)

- Added function
`CGAL::split_graph_into_polylines()`

that allows to extract from a soup of segments given as a graph, polylines with nodes of degree at most 2. In addition a functor can be passed to the function to specify additional polyline endpoints. - New functions to manipulate selection of faces, edges and vertices
in a halfedge graph are added:
`CGAL::expand_face_selection()`

,`CGAL::reduce_face_selection()`

,`CGAL::expand_edge_selection()`

,`CGAL::reduce_edge_selection()`

`CGAL::expand_vertex_selection()`

,`CGAL::reduce_vertex_selection()`

and`CGAL::select_incident_faces()`

. - Added a helper function
`CGAL::clear`

which clears a MutableFaceGraph efficiently and generically.