CGAL 4.13 offers the following improvements and new functionality over CGAL 4.12:
Changelog
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.
Installation
- The library
CGAL_Qt5
now contains a fork of the version 2.7.0 oflibQGLViewer
. The corresponding code is in the packageGraphicsView
. The dependency for the external librarylibQGLViewer
is therefore dropped for all demos.
General
- 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 aRay_3
has been added to the conceptConstructProjectedPoint_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 functionextreme_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 classesDelaunay_cell_base_with_circumcenter_3
orRegular_cell_base_with_circumcenter_3
, depending on which type of triangulation they are using. - Breaking change: The deprecated functions
mirror_index
andmirror_vertex
of the classTriangulation_face_base_2
have been removed. Users should use the equivalent functions from the classTriangulation_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, andcreate_implicit_mesh_domain()
, to create a domain from an implicit function.
- The class templates
Implicit_mesh_domain_3
,Gray_image_mesh_domain_3
, andLabeled_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
andMeshFacetCriteria_3
now require the triangulation to be passed in theiroperator()
. 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
andMeshFacetCriteria_3
(that is, usingFacet_badness
andCell_badness
instead ofIs_facet_bad
andIs_cell_bad
). - The concept
MeshFacetCriteria_3
no longer requires the functionoperator()(Cell_handle c, int i)
. - The concept
MeshEdgeCriteria_3
no longer requires the functionoperator()(const Edge& e)
. - The concept
MeshComplexWithFeatures_3InTriangulation_3
no longer requires the functionsnumber_of_edges(Curve_index index)
andnumber_of_corners(Corner_index index)
. - Introduced the concept
MeshTriangulationTraits_3
, which covers the needs of the traits class used inMesh_3
(andPeriodic_3_mesh_3
). The traits class used as template parameter ofMesh_triangulation_3
andPeriodic_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 thebool
parameter incorefine()
. - 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()
andCGAL::wlop_simplify_and_regularize_point_set()
.
Classification
- 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.
Interpolation
- 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
andGradientFittingTraits
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 classCGAL::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.