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.

### 2D Reconstruction and Simplification from Point Set (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.

### 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.

### Surface Mesh Parameterization

`LSCM_parameterizer_3`

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

.

### 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()`

.

### 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.