CGAL 4.8 released

CGAL 4.8 released


Download CGAL-4.8

CGAL-4.8 documentation

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.