4717 lines
191 KiB
Markdown
Executable File
4717 lines
191 KiB
Markdown
Executable File
Release History
|
||
===============
|
||
|
||
Release 4.13
|
||
------------
|
||
|
||
Release date: October 2018
|
||
|
||
### 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 of
|
||
`libQGLViewer`. The corresponding code is in the package
|
||
`GraphicsView`. The dependency for the external library
|
||
`libQGLViewer` 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 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)`.
|
||
g
|
||
- 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()`.
|
||
|
||
|
||
### 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` 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.
|
||
|
||
### 2D Arrangements
|
||
|
||
- Refracted and fixed the `graph_traits` for the dual of an arrangement of the
|
||
following types:
|
||
`Arrangement_on_surface_2`,
|
||
`Arrangement_2`,
|
||
`Arrangement_on_surface_with_history_2`, and
|
||
`Arrangement_with_history_2`.
|
||
|
||
- **Breaking change**: The old `<CGAL/graph_traits_Dual_Arrangement_2.h>`
|
||
header file has been replaced by the four header files below; each defines
|
||
the `graph_traits` for dual of the corresponding arrangement type.
|
||
`<CGAL/graph_traits_dual_arrangement_on_surface_2.h>`,
|
||
`<CGAL/graph_traits_dual_arrangement_2.h>`,
|
||
`<CGAL/graph_traits_dual_arrangement_on_surface_with_history_2.h>`, and
|
||
`<CGAL/graph_traits_dual_arrangement_with_history_2.h`.
|
||
|
||
|
||
Release 4.12
|
||
------------
|
||
|
||
Release date: April 2018
|
||
|
||
|
||
### Important Notice
|
||
|
||
- The CMake scripts used by CGAL have been changed to use modern patterns
|
||
introduced by CMake 2.8.12 and CMake 3.0: instead of setting CMake
|
||
variables, the script now defines imported targets and uses link
|
||
interfaces.
|
||
|
||
That is mostly backward-compatible with existing usages of CGAL CMake
|
||
scripts. The only non-compatible effect is that the `CMAKE_BUILD_TYPE`
|
||
and compilation flags are no longer copied from the `CGAL_DIR` to the
|
||
project using it. Note also that the `CMAKE_BUILD_TYPE` is no longer
|
||
set to `Release` by default. For a developer using the Visual Studio
|
||
IDE or the Xcode IDE, the change should be transparent. Developers using
|
||
makefiles or the Ninja build-system should set the `CMAKE_BUILD_TYPE`
|
||
to `Release` manually, to avoid using CGAL libraries without any
|
||
compile-time optimization.
|
||
|
||
### Header-only Mode
|
||
|
||
- Since CGAL-4.9, it has been possible to use CGAL by configuring it
|
||
using CMake, but without compiling the CGAL libraries. With CGAL-4.12,
|
||
it is now possible to use CGAL header-only, without even configuring
|
||
it. CMake is then used only to configure programs using CGAL.
|
||
|
||
### Compiler Support
|
||
|
||
- The Microsoft Visual C++ 2017 version 15.3 has introduced support for
|
||
C++17, with the compilation flag `/std:c++17`. CGAL 4.12 has an initial
|
||
support for that flag: the code will compile, but a lot of deprecation
|
||
warnings will remain. Note that Boost version 1.67 is the first version
|
||
of Boost supporting `/std:c++17`.
|
||
|
||
- The compilation flag `/permissive-` of Visual C++ is now supported.
|
||
|
||
### 2D Movable Separability of Sets (new package)
|
||
|
||
- A new package called "2D Movable Separability of Sets" has been
|
||
introduced. It handles a class of problems that deal with moving
|
||
sets of objects in the plane; the challenge is to avoid collisions
|
||
between the objects while considering different kinds of motions and
|
||
various definitions of separation.
|
||
|
||
At this point this package consists of the implementations of
|
||
various predicates and constructions related to castings of
|
||
polygonal objects. In particular, it can be used to determine
|
||
whether a feasible mold for a polygonal object does exist. If a mold
|
||
exists, the package can also be used to compute all possible
|
||
orientations of the feasible molds and the corresponding motions
|
||
needed to remove the casted object from the mold.
|
||
|
||
### Classification (new package)
|
||
|
||
- This package offers an algorithm that classifies a data set into a
|
||
user-defined set of labels (such as ground, vegetation, buildings,
|
||
etc.). A flexible API is provided so that users can classify any
|
||
type of data, compute their own local features on the input data
|
||
set, and define their own labels.
|
||
|
||
### Kinetic Data Structures (removed package)
|
||
|
||
- This package has been removed from CGAL-4.12. Users of the package
|
||
will have to keep using the source code available in CGAL-4.11 or
|
||
earlier.
|
||
|
||
|
||
### 3D Convex Hull
|
||
|
||
- **Breaking change**: The header `<CGAL/convex_hull_3.h>` no longer
|
||
includes `<CGAL/Polyhedron_3.h>`, as the convex hull function works
|
||
with any model of the concept `MutableFaceGraph`.
|
||
|
||
### 2D Arrangements
|
||
|
||
- When removing an edge from an arrangement and the user has requested to
|
||
remove the end-vertices in case they become redundant (either isolated or
|
||
approach infinity), defer the removal of the such end-vertices to occur
|
||
after the observer is notified that the edge has been removed. This is
|
||
symmetric (opposite) to the order of notification when an edge is inserted.
|
||
|
||
The user can restore old (non-symmetric) behaviour by defining the macro:
|
||
|
||
`CGAL_NON_SYMETRICAL_OBSERVER_EDGE_REMOVAL_BACKWARD_COMPATIBILITY`
|
||
|
||
### 2D Periodic Triangulations
|
||
|
||
- **Breaking change**: The class
|
||
`Periodic_2_triangulation_hierarchy_vertex_base_2` (and its
|
||
corresponding header) have been removed. Users should directly use
|
||
the class `Triangulation_hierarchy_vertex_base_2`, which is
|
||
identical.
|
||
- **Breaking change**: The functions `circumcenter()`,
|
||
`side_of_oriented_circle()`, and `is_extensible_in_1_sheet_h[12]()`
|
||
are related to Delaunay triangulations and have been moved from
|
||
`Periodic_2_triangulation_2` to
|
||
`Periodic_2_Delaunay_triangulation_2`.
|
||
|
||
### 2D Alpha Shapes
|
||
|
||
- It is now possible to use `CGAL::Periodic_2_triangulation_2` as
|
||
underlying triangulation for `Alpha_shape_2`.
|
||
|
||
### 3D Surface Mesh Generation
|
||
|
||
- Add the function `facets_in_complex_2_to_triangle_mesh()` that
|
||
exports `Surface_mesh_complex_2_in_triangulation_3` facets into
|
||
a `MutableFaceGraph`.
|
||
|
||
### 3D Mesh Generation
|
||
|
||
- Add the function `facets_in_complex_3_to_triangle_mesh()` that
|
||
exports `Mesh_complex_3_in_triangulation_3` facets into a
|
||
`MutableFaceGraph`.
|
||
- **Breaking change:** The concept `MeshDomainWithFeatures_3` has been
|
||
modified, to improve the performance and the reliability of the
|
||
sampling of 1D curves of the domain.
|
||
- Add the ability to ensure that the output mesh surface describes a
|
||
manifold, when the input surface is a manifold. New named parameters
|
||
`manifold()`, `manifold_with_boundary()`, and `non_manifold()` are
|
||
added.
|
||
|
||
### Optimal Transportation Curve Reconstruction
|
||
|
||
- New method `run_under_wasserstein_tolerance()` which allows the
|
||
user to perform curve reconstruction by relying on a threshold on
|
||
the Wasserstein distance. This is useful when the number of edges
|
||
in the expected output reconstruction is not known.
|
||
|
||
### Polygon Mesh Processing
|
||
|
||
- Added two functions for orienting connected components :
|
||
- `CGAL::Polygon_mesh_processing::orient()`
|
||
- `CGAL::Polygon_mesh_processing::orient_to_bound_a_volume()`
|
||
|
||
- Added a new function for intersection tests between triangle meshes
|
||
and/or polylines or range of polylines, and another one to report
|
||
all the pairs of meshes intersecting from a range of meshes:
|
||
- `CGAL::Polygon_mesh_processing::do_intersect()`
|
||
- `CGAL::Polygon_mesh_processing::intersecting_meshes()`
|
||
|
||
- Added new functions for feature detection and feature-guided
|
||
segmentation:
|
||
- `CGAL::Polygon_mesh_processing::detect_sharp_edges()`
|
||
- `CGAL::Polygon_mesh_processing::detect_vertex_incident_patches()`
|
||
- `CGAL::Polygon_mesh_processing::sharp_edges_segmentation()`
|
||
|
||
### Point Set Shape Detection
|
||
|
||
- **Breaking change**:
|
||
`CGAL::Shape_detection_3::Efficient_RANSAC_traits` is now called
|
||
`CGAL::Shape_detection_3::Shape_detection_traits`.
|
||
- New algorithm: `CGAL::Region_growing`. This is a deterministic
|
||
alternative to RANSAC for plane detection.
|
||
- **Breaking change**: the API of `CGAL::regularize_planes()` is
|
||
generalized to accept other types of input than the RANSAC output.
|
||
- Add a callback mechanism for both `CGAL::Efficient_RANSAC` and
|
||
`CGAL::Region_growing`.
|
||
|
||
### Point Set Processing
|
||
|
||
- **Breaking change**: the API of `CGAL::structure_point_set()` is
|
||
generalized to accept other types of input than the RANSAC output.
|
||
- **Breaking change**: the API of all functions of Point Set
|
||
Processing is modified to use ranges (instead of iterators) and
|
||
Named Parameters (similarly to the API of Polygon Mesh
|
||
Processing). The old API is kept as deprecated.
|
||
|
||
### CGAL and the Boost Graph Library (BGL)
|
||
|
||
- Add helper function `CGAL::expand_face_selection_for_removal` that
|
||
expands a face selection to avoid creating a non manifold mesh when
|
||
removing the selected faces.
|
||
|
||
- Added support for dynamic property maps.
|
||
|
||
- Added an interface to the [METIS library], which allows to partition
|
||
any mesh that is a model of `FaceListGraph`. Wrappers to the
|
||
METIS functions `METIS_PartMeshNodal` and `METIS_PartMeshDual` are
|
||
offered.
|
||
|
||
[METIS library]: http://glaros.dtc.umn.edu/gkhome/metis/metis/overview
|
||
|
||
|
||
Release 4.11
|
||
------------
|
||
|
||
Release date: September 2017
|
||
|
||
### 3D Periodic Regular Triangulations (new feature)
|
||
|
||
- Added the class `Periodic_3_regular_triangulation_3`, which provides
|
||
functionality for 3D periodic weighted Delaunay triangulations. The
|
||
construction is fully dynamic: it provides both point insertion and
|
||
vertex removal.
|
||
|
||
### dD Regular Triangulations (new feature)
|
||
|
||
- Added the class `Regular_triangulation`, which provides
|
||
functionality for dD weighted Delaunay triangulations. Note that the
|
||
removal of points is not yet supported.
|
||
|
||
### 2D and 3D Linear Geometry Kernel (breaking change)
|
||
|
||
- **Breaking change**: The dangerous implicit conversions between
|
||
weighted points and points in the concept `Kernel` have been
|
||
disabled. Constructors offering to build a weighted point from a
|
||
point (and reversely) are still requested by the concept `Kernel`
|
||
but must now be marked with the `explicit` specifier.
|
||
- **Breaking change**: The removal of implicit conversions between
|
||
points and weighted points in the concept `Kernel` has incidentally
|
||
created various minor breaking changes in the following packages: 2D
|
||
Alpha Shapes, 2D and 3D Triangulations, and 3D Mesh Generation. See
|
||
the full changelog for details.
|
||
|
||
### Surface Mesh
|
||
|
||
- **Breaking change**:
|
||
`operator >>(std::istream&, Surface_mesh&)` no longer clears
|
||
the surface mesh.
|
||
|
||
### Triangulated Surface Mesh Parameterization (breaking change)
|
||
|
||
- **Breaking change**: The package has been rewritten and can operate
|
||
on any model of the `MutableFaceGraph` concept. All previous
|
||
parameterization methods are still offered, although with a
|
||
different, simpler API. The documentation has been updated and
|
||
offers a gentle introduction to the new API. Users who wish to use
|
||
the former API must use a version prior to 4.11.
|
||
- **Breaking change**: The adapter to add virtual seams is now the
|
||
class `CGAL::Seam_mesh` in the package *CGAL and the BGL*.
|
||
- **Breaking change**: The package has been restructured and most
|
||
headers have been moved. In a general manner, users should replace
|
||
`<CGAL/XXX.h>` with `<CGAL/Surface_mesh_parameterization/XXX.h>`
|
||
- Add the *As Rigid As Possible Parameterization* method. This
|
||
parameterization allows the user to prioritize angle preservation,
|
||
shape preservation, or a balance of both.
|
||
- Add the *Orbifold Tutte Embedding* method. This parameterization
|
||
method allows to parameterize meshes that are topological spheres.
|
||
|
||
### 3D Surface Subdivision Methods (breaking changes)
|
||
|
||
- The subdivision algorithms now work on any model of a
|
||
`MutableFaceGraph`. A new API to the subdivision methods is offered,
|
||
which uses optional named parameters to pass the number of
|
||
iterations and a vertex property map.
|
||
- **Breaking change**: Removed the headers
|
||
`<CGAL/Subdivision_method_3.h>` and `<CGAL/Subdivision_mask_3.h>`.
|
||
The headers `<CGAL/Subdivision_method_3/subdivision_methods_3.h>`
|
||
and `<CGAL/Subdivision_method_3/subdivision_masks_3.h>` should
|
||
respectively be used instead.
|
||
- Sqrt3 subdivision can now handle input surfaces with a border.
|
||
|
||
### Scale-Space Surface Reconstruction (breaking change)
|
||
|
||
- **Breaking change**: the API was rewritten to separate the smoothing
|
||
and meshing algorithm and making it possible for the user to use
|
||
different ones. The default algorithms used are the same as before
|
||
this API change, but methods are moved to the classes
|
||
`Weighted_PCA_smoother` and `Alpha_shape_mesher`.
|
||
- Alternative smoothing and meshing methods are provided:
|
||
`Jet_smoother` and `Advancing_front_mesher`.
|
||
|
||
### 2D Alpha Shapes
|
||
|
||
- **Breaking change**: Mirrored the concepts of the 2D alpha shape
|
||
package with those of the 3D Alpha Shapes package. Consequently, a
|
||
new concept, `WeightedAlphaShapeTraits_2`, is introduced to provide
|
||
requirements on the traits class for 2D weighted alpha shapes. All
|
||
models of the concept `Kernel` are models of this new concept.
|
||
- The concept `AlphaShapeTraits_2` now provides requirements on the
|
||
traits class for 2D basic alpha shapes, and refines
|
||
`DelaunayTriangulationTraits_2`.
|
||
|
||
### Interpolation
|
||
|
||
- **Breaking change**: The concept `GradientFittingTraits` now
|
||
additionally requests a weighted point type `Weighted_point_d` and a
|
||
functor `Construct_point_d`. The model
|
||
`CGAL::Interpolation_gradient_fitting_traits_2` has been
|
||
appropriately modified to still be a model of the concept
|
||
`GradientFittingTraits`.
|
||
|
||
### 2D and 3D Triangulations
|
||
|
||
- **Breaking change**: Added a new functor requirement,
|
||
`Construct_point_2`, to the concepts `TriangulationTraits_2` and
|
||
`RegularTriangulationTraits_2` and a new functor requirement,
|
||
`Construct_point_3`, to the concepts `TriangulationTraits_3` and
|
||
`RegularTriangulationTraits_3`. All models of the concept `Kernel`
|
||
already provide these functors.
|
||
- **Breaking change**: Introduced the concepts
|
||
`RegularTriangulationVertexBase_2` and
|
||
`RegularTriangulationVertexBase_3`. These concepts describe the
|
||
requirements on classes meant to represent a vertex of a regular
|
||
triangulation. Concepts that previously refined
|
||
`TriangulationVertexBase_2` or `TriangulationVertexBase_3` but
|
||
described in fact a vertex class used in a regular triangulation,
|
||
such as the concept `MeshVertexBase_3` in the 3D mesh generation
|
||
package, now refine the corresponding new regular vertex concept.
|
||
- **Breaking change**: Uniformized the point type across all vertex
|
||
and cell concepts. The triangulation point type name is now always
|
||
`Point`. Note that this does not change the requirements but only
|
||
the name: `Point` is still expected to be equal to
|
||
`Traits::Point_[23]` for basic and Delaunay triangulations or to
|
||
`Traits::Weighted_point_[23]` for regular triangulations.
|
||
Consequently:
|
||
- The concept `RegularTriangulationVertexBase_2` now requests a
|
||
`Point` type (equal to `Traits::Weighted_point_2`)
|
||
- The concept `RegularTriangulationCellBase_3` now requests a
|
||
`Point` type instead of a `Weighted_point` type (but still equal
|
||
to `Traits::Weighted_point_3`)
|
||
- The concept `DelaunayTriangulationCellBase_3` now requests a
|
||
`Point` type instead of a `Point_3` type (but still equal to
|
||
`Traits::Point_3`).
|
||
- Introduced a new concept,
|
||
`RegularTriangulationCellBaseWithWeightedCircumcenter_3`, which
|
||
describes the requirements on a cell of a regular triangulation that
|
||
caches its circumcenter. The existing class
|
||
`Regular_triangulation_cell_base_with_weighted_circumcenter_3` is
|
||
the default model of this concept.
|
||
- Added a new 3D traits class,
|
||
`Robust_weighted_circumcenter_filtered_traits_3` which provides
|
||
robust versions of the kernel functors
|
||
`Construct_weighted_circumcenter_3`, `Compute_squared_radius_3`, and
|
||
`Compute_squared_radius_smallest_orthogonal_sphere_3`. This class
|
||
can be used as traits class in the the `Mesh_3` package to
|
||
efficiently yet robustly generate 3D meshes.
|
||
- Add a new type of polyhedral domain with features,
|
||
`Polyhedral_complex_mesh_domain_3`. The domain is defined by a
|
||
collection of triangulated surfaces, forming a complex.
|
||
|
||
### 3D Periodic Triangulations
|
||
|
||
- Added new locate and geometric access functions for 3D periodic
|
||
triangulations.
|
||
- The class `Periodic_3_Delaunay_triangulation_traits_3` now inherits
|
||
`Periodic_3_triangulation_traits_3`.
|
||
- **Breaking change**: Some geometric access functions in
|
||
`Periodic_3_triangulation_3` were renamed. The introduction of
|
||
`Periodic_3_regular_triangulation_3` required to distinguish between
|
||
functions such as `segment()` returning a segment of weightless
|
||
points, or a segment of weighted points. As a general rule, previous
|
||
geometrical access functions will return objects with point type
|
||
that of the triangulation (thus, weighted objects when using
|
||
weighted triangulations) and functions containing `construct` in the
|
||
name will always return weightless geometrical objects.
|
||
- **Breaking change**: The concept `Periodic_3TriangulationTraits_3`
|
||
now requests a domain getter: `get_domain()`.
|
||
- Introduced a new concept,
|
||
`RegularTriangulationCellBaseWithWeightedCircumcenter_3`, which
|
||
describes the requirements on a cell of a regular triangulation that
|
||
caches its circumcenter. The existing class
|
||
`Regular_triangulation_cell_base_with_weighted_circumcenter_3` is
|
||
the default model of this concept.
|
||
|
||
### 3D Mesh Generation
|
||
|
||
- **Breaking change**: The type of the surface center in the concept
|
||
`MeshCellBase_3` has been changed from `Triangulation::Point` to
|
||
`TriangulationTraits::Point_3` to reflect that it is a weightless
|
||
point.
|
||
- **Breaking change**: The function `invalidate_circumcenter()` of the
|
||
concept `MeshCellBase_3` is renamed to
|
||
`invalidate_weighted_circumcenter_cache()` and moved to the new
|
||
concept `RegularTriangulationCellBaseWithWeightedCircumcenter_3`,
|
||
which the concept `MeshCellBase_3` now refines.
|
||
|
||
### Poisson Surface Reconstruction
|
||
|
||
- A new global function
|
||
`CGAL::poisson_surface_reconstruction_delaunay()` is provided in
|
||
addition to the current class-based API in order to make it easier
|
||
to use.
|
||
|
||
### Point Set Processing
|
||
|
||
- New functions to read from and write to LAS/LAZ files (LIDAR
|
||
format), with or without taking additional properties into account.
|
||
- **Breaking change:** The API of the PLY function to read points with
|
||
properties is modified for unification with LAS (see
|
||
`CGAL::read_ply_points_with_properties()`). A new function to write
|
||
PLY with properties is provided
|
||
(`CGAL::write_ply_points_with_properties()`).
|
||
|
||
### Spatial Searching
|
||
|
||
- Add function `Kd_tree::remove(Point)`.
|
||
|
||
### 3D Fast Intersection and Distance Computation
|
||
|
||
- Add a template parameter to `AABB_traits` for a property map that
|
||
associates a bounding box to a primitive
|
||
|
||
### CGAL and the Boost Graph Library
|
||
|
||
- Add a partial specialization for the class
|
||
`CGAL::Linear_cell_complex_for_combinatorial_map` so that it is a
|
||
model of the graph concepts `BidirectionalGraph` and
|
||
`EdgeAndVertexListGraph` and of the concept `MutableFaceGraph`. This
|
||
class can thus now be used in all BGL functions and algorithms.
|
||
- Helper functions to create an icosahedron, a regular prism and a
|
||
pyramid have been added.
|
||
- Add class `CGAL::Face_filtered_graph` that wraps an existing graph
|
||
and hide all simplices that are not in the selected connected
|
||
components.
|
||
- Added the class `CGAL::Seam_mesh`. The `Seam_mesh` is a graph
|
||
adaptor which allows to create virtual borders when marking edges as
|
||
seam edges.
|
||
- Add the functions `read_off()` and `write_off()`.
|
||
|
||
Release 4.10
|
||
------------
|
||
|
||
Release date: May 2017
|
||
|
||
### Installation
|
||
|
||
- The minimum required version of CMake is now 3.1. All CMake versions
|
||
up to 3.7 are supported.
|
||
- The compilation of some demo may require a C++11 compiler. The CGAL
|
||
library itself still support C++03 compilers.
|
||
- The shell script `cgal_create_cmake_script` now enables C++14 by
|
||
default.
|
||
- A new mechanism to check which packages of CGAL are used have been
|
||
added. It is particularly interesting for commercial users to ensure
|
||
they have a valid commercial license for the packages they used.
|
||
This can also be used to make sure only LGPL header files are used.
|
||
- Because of a bug in the g++ compiler about the C++11 keyword
|
||
`thread_local`, the CGAL\_Core library now always requires
|
||
`Boost.Thread` if the g++ compiler is used.
|
||
|
||
### Generalized Maps (new package)
|
||
|
||
- This package implements Generalized Maps in d dimensions. A
|
||
generalized map is a data structure enabling to represent an
|
||
orientable or non orientable subdivided object by describing all the
|
||
cells of the subdivision (for example in 3D vertices, edges, faces,
|
||
volumes) and all the incidence and adjacency relationships between
|
||
these cells. This data structure is the generalization of the
|
||
combinatorial maps in order to be able to represent non orientable
|
||
objects.
|
||
|
||
### 3D Point Set (new package)
|
||
|
||
- This package provides a flexible data structure `CGAL::Point_set_3`
|
||
that allows the user to easily handle point sets with an arbitrary
|
||
number of attributes (such as normal vectors, colors, labeling,
|
||
etc.).
|
||
|
||
### Combinatorial Maps and Linear cell complex
|
||
|
||
- **Breaking change**: the requirements of the item class used to
|
||
customize a combinatorial map and a linear cell complex changed.
|
||
Instead of defining the type of darts used, you have to define the
|
||
information you want to add in each dart. You can define the
|
||
`CGAL_CMAP_DART_DEPRECATED` macro to keep the old behavior.
|
||
|
||
### Triangulated Surface Mesh Shortest Paths
|
||
|
||
- **Breaking change**: Rename all functions, types, and enums using
|
||
*barycentric coordinate* to *barycentric coordinates*.
|
||
|
||
### CGAL and the Boost Graph Library (BGL)
|
||
|
||
- **Breaking change**: Addition of a free function `reserve()` in the
|
||
concept `MutableFaceGraph`. Models provided by CGAL have been
|
||
updated.
|
||
|
||
### 2D and 3D Linear Geometry Kernel
|
||
|
||
- **Breaking change**: The function `compare_slopes()` was renamed
|
||
`compare_slope`.
|
||
- Added a 2D and 3D weighted point class and predicates and
|
||
constructions.
|
||
- Add functions `l_infinity_distance()` for 2D and 3D.
|
||
- Add a new functor in CGAL Kernel concept to compare the slope of two
|
||
3D segments. All models of the Kernel concept now provide the
|
||
functor `Compare_slope_3`, and the free function `compare_slope()`
|
||
is available.
|
||
- Add an operator in CGAL Kernel concept `Angle_3` to qualify the
|
||
angle between the normal of the triangle given by three points, and
|
||
a vector.
|
||
|
||
### 3D Convex Hull
|
||
|
||
- The convex hull function can also produce a `Surface_mesh`, and
|
||
generally speaking any model of the concept `MutableFaceGraph`
|
||
- The function `convex_hull_3_to_polyhedron_3()` is deprecated and
|
||
`convex_hull_3_to_face_graph.h` should be used instead.
|
||
- The class `Convex_hull_traits_3` now documents a nested type
|
||
`Polygon_mesh` instead of `Polyhedron_3`. The other nested type is
|
||
kept for backward compatibility.
|
||
- Remove the function `CGAL::convex_hull_incremental_3()` deprecated
|
||
since CGAL 4.6.
|
||
|
||
### 3D Boolean Operations on Nef Polyhedra
|
||
|
||
- Add a new constructor from a face graph model
|
||
|
||
### Linear cell complex
|
||
|
||
- Deprecate class `Linear_cell_complex` which is now renamed
|
||
`Linear_cell_complex_for_combinatorial_map_dart`.
|
||
|
||
### 2D Triangulation data structure
|
||
|
||
- Add function `insert_in_hole`.
|
||
|
||
### 2D Triangulations
|
||
|
||
- **Breaking change**: Removed the arbitrary dimensional weighted
|
||
point class. Users must use a version prior to 4.9 if they need this
|
||
class.
|
||
- **Breaking change**:The number type of weighted points in regular
|
||
triangulations is no longer a template parameter but the field type
|
||
of the geometric traits class. Users who need this feature must use
|
||
a version prior to 4.9
|
||
- The class `Regular_triangulation_filtered_traits_2` deprecated since
|
||
CGAL 3.6 has been removed.
|
||
- Deprecate the class `Regular_triangulation_euclidean_traits_2`, as
|
||
the weighted point and the function objects for weighted points are
|
||
part of the concept `Kernel`/
|
||
- The class `Regular_triangulation_2` can take a kernel as template
|
||
argument, that is one no longer has to use
|
||
`Regular_triangulation_euclidea_traits_2`, although this still
|
||
works.
|
||
|
||
### 3D Triangulations
|
||
|
||
- **Breaking change**: The number type of weighted points in regular
|
||
triangulations is no longer a template parameter but the field type
|
||
of the geometric traits class. Users who need this feature must use
|
||
a version prior to 4.9.
|
||
- The class `Regular_triangulation_filtered_traits_3` deprecated since
|
||
CGAL 3.6 has been removed.
|
||
- Deprecate the class `Regular_triangulation_euclidean_traits_3`, as
|
||
the weighted point and the function objects for weighted points are
|
||
part of the concept `Kernel`/
|
||
- The class `Regular_triangulation_3` can take a kernel as template
|
||
argument, that is one no longer has to use
|
||
`Regular_triangulation_euclidean_traits_3`, although this still
|
||
works.
|
||
- Add function `link_to_face_graph()` to copy the set of faces
|
||
incident to a vertex into a model of `FaceGraph`.
|
||
|
||
### 3D Mesh Generation
|
||
|
||
- The constructor
|
||
`CGAL::Polyhedral_mesh_domain_with_features_3(std::string)` is
|
||
deprecated.
|
||
|
||
### Polygon Mesh Processing
|
||
|
||
- Add fast and robust corefinement and Boolean operation functions for
|
||
triangulated surface meshes:
|
||
- `CGAL::Polygon_mesh_processing::corefine_and_compute_union()`
|
||
- `CGAL::Polygon_mesh_processing::corefine_and_compute_difference()`
|
||
- `CGAL::Polygon_mesh_processing::corefine_and_compute_intersection()`
|
||
- `CGAL::Polygon_mesh_processing::corefine()`
|
||
- `CGAL::Polygon_mesh_processing::does_bound_a_volume()`
|
||
- `CGAL::Polygon_mesh_processing::surface_intersection()`
|
||
- Add functions to compute approximated Hausdorff distances between
|
||
two meshes, a mesh and a point set, or a point set and a mesh:
|
||
`sample_triangle_mesh()`, `approximated_Hausdorff_distance()`,
|
||
`approximated_symmetric_Hausdorff_distance()`,
|
||
`max_distance_to_triangle_mesh()`, `max_distance_to_point_set()`.
|
||
- The function `CGAL::Polygon_mesh_processing::bbox_3()` has been
|
||
renamed `CGAL::Polygon_mesh_processing::bbox()`.
|
||
|
||
### Point Set Processing
|
||
|
||
- Function `CGAL::remove_outliers()` has an additional parameter based
|
||
on a distance threshold to make it easier and more intuitive to use.
|
||
- New functions for automatic scale estimations: either a global scale
|
||
or multiple local scales can be estimated for both 2D and 3D point
|
||
sets based on the assumption that they sample a curve in 2D or a
|
||
surface in 3D.
|
||
|
||
### CGAL and the Boost Graph Library (BGL)
|
||
|
||
- Add function `CGAL::convert_nef_polyhedron_to_polygon_mesh()` to
|
||
convert a `Nef_polyhedron_3` to any model of the `MutableFaceGraph`
|
||
concept.
|
||
- Add class `CGAL::Graph_with_descriptor_with_graph` that wraps an
|
||
existing graph and provides a reference to the said graph to all of
|
||
its descriptors.
|
||
|
||
### Cone Based Spanners
|
||
|
||
- Add a parameter to compute half Tao graph and half Theta graph.
|
||
- Add an ipelet for this package.
|
||
|
||
### Geometric Object Generators
|
||
|
||
- Add point random generators
|
||
- in a 3D triangle mesh model of the concept `FaceListGraph`
|
||
(`CGAL::Random_points_in_triangle_mesh_3`),
|
||
- on the boundary of a tetrahedral mesh
|
||
(`CGAL::Random_points_in_tetrahedral_mesh_boundary_3`),
|
||
- in a tetrahedral mesh
|
||
(`CGAL::Random_points_in_tetrahedral_mesh_3`),
|
||
- in a 2D triangle mesh
|
||
(`CGAL::Random_points_in_triangle_mesh_2`),
|
||
- in a range of 2D or 3D triangles
|
||
(`CGAL::Random_points_in_triangles_3` and
|
||
`CGAL::Random_points_in_triangles_2`).
|
||
- on a 3D segment (`CGAL::Random_points_on_segment_3`).
|
||
|
||
Release 4.9
|
||
-----------
|
||
|
||
Release date: Sept 2016
|
||
|
||
### Header-only mode
|
||
|
||
- CGAL can now be used in headers only mode, i.e. without compiling
|
||
the CGAL libraries and linking with these libraries when compiling
|
||
examples, tests and demos. Note that running CMake on CGAL is still
|
||
required in order to generate some configuration files.
|
||
|
||
### Cone Based Spanners (new package)
|
||
|
||
- This package provides algorithms for constructing two kinds of
|
||
cone-based spanners: Yao graph and Theta graph, given a set of
|
||
vertices on the plane and the directions of cone boundaries.
|
||
|
||
### 2D Minkowski Sums
|
||
|
||
- Introduce a convex decomposition strategy, namely
|
||
`Polygon_nop_decomposition_2`, that merely passed the input polygon
|
||
to the list of output polygons.
|
||
- Introduce overloads of the function `minkowski_sum_2()`, which
|
||
accepts 2 decomposition strategies.
|
||
- Introduce an overloaded function called
|
||
`minkowski_sum_by_decomposition_2(P, Q, decom_no_holes, decomp_with_holes)`,
|
||
which computes the 2D Minkowski sum using optimal choices of
|
||
decomposition strategies.
|
||
|
||
### Combinatorial Maps
|
||
|
||
- Deprecate global functions (`make_combinatorial_hexahedron()`,
|
||
`make_combinatorial_polygon()`, `make_combinatorial_tetrahedron()`,
|
||
`make_edge()`, `insert_cell_0_in_cell_1()`,
|
||
`insert_cell_0_in_cell_2()`, `insert_cell_1_in_cell_2()`,
|
||
`insert_cell_2_in_cell_3()`, `insert_dangling_cell_1_in_cell_2()`,
|
||
`is_insertable_cell_1_in_cell_2()`,
|
||
`is_insertable_cell_2_in_cell_3()`, `is_removable()`,
|
||
`remove_cell()`) which are now member functions in the
|
||
`CombinatorialMap` concept.
|
||
- It is not longer possible to use the old API switched on by defining
|
||
the macro `CGAL_CMAP_DEPRECATED`. This API was deprecated since CGAL
|
||
4.4.
|
||
|
||
### Point Set Processing
|
||
|
||
- New function `CGAL::read_ply_custom_points()` that allows the user
|
||
to read any additional point attribute from a PLY input point set.
|
||
- `CGAL::structure_point_set()`: new algorithm that takes advantage of
|
||
detected planes to produce a structured point set (with flat
|
||
regions, sharp edges and vertices).
|
||
|
||
### Point Set Shape Detection
|
||
|
||
- New post-processing algorithm: `CGAL::regularize_planes()`. This
|
||
allows the user to favor parallelism, orthogonality, coplanarity
|
||
and/or axial symmetry between detected planes.
|
||
|
||
### Polygon Mesh Processing
|
||
|
||
- Add the function
|
||
`CGAL::Polygon_mesh_processing::is_polygon_soup_a_polygon_mesh()` to
|
||
check whether a polygon soup is a polygon mesh.
|
||
- Add some new features to `CGAL::isotropic_remeshing()`:
|
||
- It is now possible to select fixed vertices that survive the
|
||
remeshing process, and to keep face attributes such as colors
|
||
valid after remeshing.
|
||
- The user can choose the number of relaxation steps happening at
|
||
each loop, and to run 1-dimensional relaxation along constrained
|
||
polylines.
|
||
- The functions `CGAL::Polygon_mesh_processing::triangulate_face()`
|
||
and `CGAL::Polygon_mesh_processing::triangulate_faces()` now
|
||
indicate whether some faces have not been triangulated.
|
||
|
||
### Surface Mesh Deformation
|
||
|
||
- Add a new tag `SRE_ARAP` to use the Smoothed Rotation Enhanced
|
||
As-Rigid-As-Possible deformation algorithm.
|
||
|
||
### 3D Fast Intersection and Distance Computation
|
||
|
||
- Add the functions `AABB_tree::first_intersection()` and
|
||
`AABB_tree::first_intersected_primitive()` that compute the
|
||
intersection which is closest to the source of a ray
|
||
|
||
### CGAL and the Boost Graph Library (BGL)
|
||
|
||
- Add a helper function `CGAL::copy_face_graph()` to copy a source
|
||
FaceListGraph into another FaceListGraph of different type.
|
||
- Add a class `CGAL::Dual` that creates the dual view of a `FaceGraph`
|
||
and a creation function `CGAL::dual(primal)`.
|
||
|
||
#### CGAL and Boost Property Maps
|
||
|
||
- It is not longer possible to use the old API of the property maps
|
||
provided by CGAL, switched on by defining the macro
|
||
`CGAL_USE_PROPERTY_MAPS_API_V1`. This API was deprecated since CGAL
|
||
4.3.
|
||
|
||
Release 4.8
|
||
-----------
|
||
|
||
Release date: April 2016
|
||
|
||
### General
|
||
|
||
- The support for Qt3 is dropped and all demos using it got 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
|
||
|
||
- Improve 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
|
||
|
||
- Add 3 new constructors: from a point range, from a point, and from a
|
||
segment.
|
||
|
||
### Combinatorial Maps
|
||
|
||
- **Breaking change**: Change 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
|
||
|
||
- Speed 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.
|
||
- Fix 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
|
||
|
||
- Add 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
|
||
|
||
- Add 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()`
|
||
- Add the function `CGAL::Polygon_mesh_processing::border_halfedges()`
|
||
to collect the border of a given face range
|
||
- Add the function
|
||
`CGAL::Polygon_mesh_processing::remove_isolated_vertices()` to be
|
||
used on any polygon mesh
|
||
- Add the function `CGAL::Polygon_mesh_processing::triangulate_face()`
|
||
to triangulate a single face of a polygon mesh
|
||
- Add an overload for
|
||
`CGAL::Polygon_mesh_processing::triangulate_faces()` to triangulate
|
||
a range of faces of a polygon mesh
|
||
- Add function `keep_large_connected_components()`
|
||
- Add measuring functions for polygon meshes, to compute length, area,
|
||
and volume of simplices or group of simplices of a polygon mesh.
|
||
- Add 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.
|
||
- Add 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
|
||
|
||
- Add function to find any point in a range query, that is neither all
|
||
points, nor the closest one.
|
||
|
||
### Principal Component Analysis
|
||
|
||
- Add 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)
|
||
|
||
- Add 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()`.
|
||
- Add a helper function `CGAL::clear` which clears a MutableFaceGraph
|
||
efficiently and generically.
|
||
|
||
Release 4.7
|
||
-----------
|
||
|
||
Release date: October 2015
|
||
|
||
### Installation
|
||
|
||
- The minimum required version of CMake is now 2.8.11. CMake versions
|
||
3.1, 3.2, and 3.3 are supported.
|
||
- All Qt4 demos have been updated and now require Qt5 to be compiled.
|
||
Qt5 version 5.3 or higher is required. The support for Qt4 is
|
||
dropped. To compile libCGAL\_Qt5 and demos, you must set the cmake
|
||
or environment variable `Qt5_DIR` to point to the path to the
|
||
directory containing the file `Qt5Config.cmake` created by your Qt5
|
||
installation. If you are using the open source edition it should be
|
||
`/path-to/qt-everywhere-opensource-src-<version>/qtbase/lib/cmake/Qt5`.
|
||
- The code of the 3D demos now uses modern OpenGL, with shaders,
|
||
instead of the fixed pipeline API of OpenGL-1.
|
||
- The Microsoft Windows Visual C++ compiler 2015 (VC14) is now
|
||
supported. However, since this compiler is not officially supported
|
||
by Intel TBB 4.4 and Qt 5.5 (the latest versions available at the
|
||
time of this release), the parallelism features of CGAL and Qt5
|
||
demos will not work.
|
||
|
||
### L Infinity Segment Delaunay Graphs (new package)
|
||
|
||
- The package provides the geometric traits for constructing the
|
||
segment Delaunay graph in the max-norm (L Infinity). The traits also
|
||
contain methods to draw the edges of the dual of the segment
|
||
Delaunay graph in the max-norm i.e., the segment Voronoi diagram in
|
||
the max-norm. The algorithm and traits rely on the segment Delaunay
|
||
graph algorithm and traits under the Euclidean distance. The segment
|
||
Voronoi diagram in the max-norm has applications in VLSI CAD.
|
||
|
||
### Advancing Front Surface Reconstruction (new package)
|
||
|
||
- This package provides a greedy algorithm for surface reconstruction
|
||
from an unorganized point set. Starting from a seed facet, a
|
||
piecewise linear surface is grown by adding Delaunay triangles one
|
||
by one. The most plausible triangles are added first, in a way that
|
||
avoids the appearance of topological singularities.
|
||
|
||
### Triangulated Surface Mesh Shortest Paths (new package)
|
||
|
||
- The package provides methods for computing shortest path on
|
||
triangulated surface meshes. Given a set of source points on the
|
||
surface, this package provides a data structure that can efficiently
|
||
provides the shortest path from any point on the surface to the
|
||
sources points. There is no restriction on the genus or the number
|
||
of connected components of the mesh.
|
||
|
||
### Triangulated Surface Mesh Skeletonization (new package)
|
||
|
||
- This package provides a (1D) curve skeleton extraction algorithm for
|
||
a triangulated polygonal mesh without borders based on the mean
|
||
curvature flow. The particularity of this skeleton is that it
|
||
captures the topology of the input. For each skeleton vertex one can
|
||
obtain its location and its corresponding vertices from the input
|
||
mesh. The code is generic and works with any model of the
|
||
\`FaceListGraph\` concept.
|
||
|
||
### 3D Point-Set Shape Detection (new package)
|
||
|
||
- This package implements the efficient RANSAC method for shape
|
||
detection, contributed by Schnabel et al. From an unstructured point
|
||
set with unoriented normals, the algorithm detects a set of shapes.
|
||
Five types of primitive shapes are provided by this package: plane,
|
||
sphere, cylinder, cone and torus. Detecting other types of shapes is
|
||
possible by implementing a class derived from a base shape.
|
||
|
||
### 2D Visibility (new package)
|
||
|
||
- This package provides several variants to compute the visibility
|
||
area of a point within polygonal regions in two dimensions.
|
||
|
||
### Polygon Mesh Processing (new package)
|
||
|
||
- This package implements a collection of methods and classes for
|
||
polygon mesh processing, ranging from basic operations on simplices,
|
||
to complex geometry processing algorithms. The implementation of
|
||
this package mainly follows algorithms and references given in
|
||
Botsch et al.'s book on polygon mesh processing.
|
||
|
||
### General
|
||
|
||
- Support for unordered sets and maps of the stdlib and of boost for
|
||
handle and index classes.
|
||
|
||
### Approximation of Ridges and Umbilics on Triangulated Surface Meshes
|
||
|
||
- This package now supports any model of the concept `FaceGraph`.
|
||
- **Breaking change:** The package no longer supports models of
|
||
`TriangulatedSurfaceMesh` which are not at the same time models of
|
||
the concept `FaceGraph`.
|
||
|
||
### dD Geometry Kernel
|
||
|
||
- Epick\_d gains 3 new functors: `Construct_circumcenter_d`,
|
||
`Compute_squared_radius_d`, `Side_of_bounded_sphere_d`. Those are
|
||
essential for the computation of alpha-shapes.
|
||
|
||
### 2D Arrangements
|
||
|
||
- Introduced a new traits class, called
|
||
`Arr_polycurve_traits_2<SubcurveTraits>`, which handles general
|
||
piece-wise (polycurve) curves. The pieces do not necessarily have to
|
||
be linear.
|
||
- Introduced two new concepts called `ArrangementApproximateTraits_2`
|
||
and `ArrangementConstructXMonotoneCurveTraits_2`.
|
||
- The existing `ArrangementLandmarkTraits_2` concept, which has
|
||
two requirements, now refines the two respective concepts above.
|
||
- The template parameter of the existing
|
||
`Arr_polyline_traits_2<SegmentTraits>` template must be
|
||
substituted with a traits class that is a model of the
|
||
`ArrangementConstructXMonotoneTraits_2` concept among the other
|
||
when `Arr_polyline_traits_2` is instantiated.
|
||
|
||
### 2D Minkowski Sums
|
||
|
||
- Added support for polygons with holes and optimized the construction
|
||
of Minkowski sums.
|
||
- Introduced an implementation of the "reduced convolution"
|
||
method, a variant of the method described in "2D Minkowski Sum
|
||
of Polygons Using Reduced Convolution" by Behar and Lien. The
|
||
new method supports polygons with holes and in many cases out
|
||
pergorms the implementation of the exsisting (full) convolution
|
||
method.
|
||
- Introduced two new classes that decompose polygons into convex
|
||
pieces (models of the `PolygonConvexDecomposition_2` concept)
|
||
based on vertical decomposition and constrained Delaunay
|
||
triangulation, respectively. These new models also support the
|
||
convex decomposition of polygons with holes.
|
||
|
||
### 3D Periodic Triangulations
|
||
|
||
- Rename `Periodic_3_triangulation_traits_3` to
|
||
`Periodic_3_Delaunay_triangulation_traits_3`.
|
||
- Rename the concept `Periodic_3TriangulationTraits_3` to
|
||
`Periodic_3DelaunayTriangulationTraits_3`.
|
||
- Create `Periodic_3_triangulation_traits_3` and the concept
|
||
`Periodic_3TriangulationTraits_3`.
|
||
|
||
### 2D Conforming Triangulations and Meshes
|
||
|
||
- Add an optimization method `CGAL::lloyd_optimize_mesh_2()` that
|
||
implements the Lloyd (or Centroidal Voronoi Tesselation)
|
||
optimization algorithm in a Constrained Delaunay Triangulation. For
|
||
optimization, the triangulation data structure on which the mesher
|
||
relies needs its `VertexBase` template parameter to be a model of
|
||
the new concept `DelaunayMeshVertexBase_2`.
|
||
|
||
### Point Set Processing and Surface Reconstruction from Point Sets
|
||
|
||
- Add the function `CGAL::compute_vcm()` for computing the Voronoi
|
||
Covariance Measure (VCM) of a point set. The output of this function
|
||
can be used with the function `CGAL::vcm_is_on_feature_edge()` to
|
||
determine whether a point is on or close to a feature edge. The
|
||
former function is also internally used by
|
||
`CGAL::vcm_estimate_normals()` to estimate the normals of a point
|
||
set and it is particularly suited to point sets with noise.
|
||
|
||
### Spatial Sorting
|
||
|
||
- Add the possibility to sort points on a sphere along a space-filling
|
||
curve using the functions `CGAL::hilbert_sort_on_sphere` and
|
||
`CGAL::spatial_sort_on_sphere`.
|
||
|
||
### Geometric Object Generators
|
||
|
||
- Add new random generator of points in a 2D and 3D triangle and in a
|
||
tetrahedron (`CGAL::Random_points_in_triangle_2`,
|
||
`CGAL::Random_points_in_triangle_3`,
|
||
`CGAL::Random_points_in_tetrahedron_3`).
|
||
|
||
Release 4.6.2
|
||
-------------
|
||
|
||
Release date: August 2015
|
||
|
||
This release only fixes bugs. See the list of fixed bugs on Github:
|
||
|
||
<https://github.com/CGAL/cgal/issues?q=milestone%3A4.6.2>
|
||
|
||
Release 4.6.1
|
||
-------------
|
||
|
||
Release date: June 2015
|
||
|
||
This release only fixes bugs. See the list of fixed bugs on Github:
|
||
|
||
<https://github.com/CGAL/cgal/issues?q=milestone%3A4.6.1+-label%3Ainvalid>
|
||
|
||
Release 4.6
|
||
-----------
|
||
|
||
Release date: April 2015
|
||
|
||
### Installation
|
||
|
||
- The required version of Boost is now 1.48 or higher.
|
||
|
||
### 2D Polyline Simplification (new package)
|
||
|
||
- This package enables to simplify polylines with the guarantee that
|
||
the topology of the polylines does not change. This can be done for
|
||
a single polyline as well as for a set of polyline constraints in a
|
||
constrained triangulation. The simplification can be controlled with
|
||
cost and stop functions.
|
||
|
||
### 2D Generalized Barycentric Coordinates (new package)
|
||
|
||
- This package offers an efficient and robust implementation of
|
||
two-dimensional closed-form generalized barycentric coordinates
|
||
defined for simple two-dimensional polygons.
|
||
|
||
### Scale-Space Surface Reconstruction (new package)
|
||
|
||
- This new package provides a class gathering a dedicated smoothing
|
||
algorithm and some convenience functions to help the creation of a
|
||
surface out of a point set using the 3D Alpha Shapes package. The
|
||
particularity of this reconstruction pipeline is that the input
|
||
point are in the output and no new points are created. Note that in
|
||
the current version, the output is a triangle soup that is not
|
||
necessarily a valid (manifold) polyhedral surface.
|
||
|
||
### Surface Mesh (new package)
|
||
|
||
- The surface mesh class provided by this package is an implementation
|
||
of the halfedge data structure allowing to represent polyhedral
|
||
surfaces. It is an alternative to the packages `CGAL::Polyhedron_3`
|
||
and `CGAL::HalfedgeDS`.
|
||
|
||
### dD Triangulation (new package)
|
||
|
||
- This new package provides classes for manipulating triangulations in
|
||
Euclidean spaces whose dimension can be specified at compile-time or
|
||
at run-time. It also provides a class that represents Delaunay
|
||
triangulations.
|
||
|
||
### dD Convex Hulls and Delaunay Triangulations
|
||
|
||
- This package is deprecated and the new package Triangulation should
|
||
be used instead.
|
||
|
||
### dD Geometry Kernel
|
||
|
||
- It has been reported that the recently introduced `Epick_d` kernel
|
||
may not work with Intel C++ Compiler prior to version 15.
|
||
Documentation has been updated.
|
||
|
||
### 3D Convex Hulls
|
||
|
||
- Add functions `halfspace_intersection_3` and
|
||
`halfspace_intersection_with_constructions_3` to compute the
|
||
intersection of halfspaces defining a closed polyhedron.
|
||
- Fix a bug introduced in CGAL 4.5 that can appear while computing the
|
||
convex hull of coplanar points.
|
||
- Fix a robustness issue in `Convex_hull_traits_3`. This traits is
|
||
used by default with the kernel
|
||
`Exact_predicates_inexact_constructions_kernel`.
|
||
- The function `CGAL::convex_hull_incremental_3` is deprecated and the
|
||
function `convex_hull_3` should be used instead.
|
||
|
||
### Combinatorial Maps and Linear Cell Complex
|
||
|
||
- Added `correct_invalid_attributes`,
|
||
`set_automatic_attributes_management` and
|
||
`are_attributes_automatically_managed` methods in `CombinatorialMap`
|
||
concept. This allows high level operations to not update non void
|
||
attributes during massive calls of these operations, but only after
|
||
the end of their executions.
|
||
|
||
### 2D Triangulations
|
||
|
||
- The class `Constrained_triangulation_plus_2` now can handle
|
||
polylines as constraints.
|
||
- As a consequence a `Constraint_id` has been introduced which
|
||
replaces `pair<Vertex_handle,Vertex_handle>` as identifier of a
|
||
constraint.
|
||
|
||
### 3D Mesh Generation
|
||
|
||
- Add member functions `output_boundary_to_off` and
|
||
`output_facets_in_complex_to_off` in the class
|
||
`CGAL::Mesh_complex_3_in_triangulation_3` to export the boundary of
|
||
a domain or a subdomain.
|
||
|
||
### 3D Fast Intersection and Distance Computation
|
||
|
||
- Add new constructors to `AABB_halfedge_graph_segment_primitive` and
|
||
`AABB_face_graph_triangle_primitive` in order to be able to build
|
||
primitives one by one.
|
||
|
||
### Spatial Searching
|
||
|
||
- Fixed a bug in `CGAL::Splitters.h` sliding midpoint rule, where
|
||
degenerated point sets (e.g.,points on segment) caused the kd-tree
|
||
to get linear.
|
||
- Improved performance of `Orthogonal_k_neighbor_search`. Note that VC
|
||
2013 does not compile `boost::container::deque` of Boost 1\_55 and
|
||
does hence have a workaround which does not have the improvement.
|
||
- **Breaking change:** The concept `OrthogonalDistance` has new
|
||
function overloads for `min_distance_to_rectangle` and
|
||
`max_distance_to_rectangle` with an additional reference parameter
|
||
`std::vector`.
|
||
- **Breaking change:** The order of the points in the iterator range
|
||
`[tree.begin(),tree.end()]` is not the order of insertion of the
|
||
points into the tree. This was not guaranteed before but might have
|
||
been observed and exploited by users.
|
||
- Derived `kd_tree_leaf_node` and `kd_tree_internal_node` from
|
||
`kd_tree_node` to save memory.
|
||
|
||
### Geometric Object Generators
|
||
|
||
- Add a new function `random_convex_hull_in_disc_2` that efficiently
|
||
generates a random polygon as the convex hull of uniform random
|
||
points chosen in a disc.
|
||
|
||
Release 4.5.2
|
||
-------------
|
||
|
||
Release date: February 2015
|
||
|
||
### General
|
||
|
||
- Fix a bug that prevented the compilation with recent versions of
|
||
Boost (>=1.56) when explicit conversions operators (from C++11)
|
||
are supported. That prevented the compilation with Microsoft Visual
|
||
Studio 2013.
|
||
|
||
### 3D Convex Hulls
|
||
|
||
- Fix a non-robust predicate bug that was showing up when input points
|
||
where lexicographically sorted.
|
||
|
||
### 3D Mesh Generation
|
||
|
||
- Fix a bug in the sliver perturbation optimization method. It could
|
||
create some holes on the surface of the mesh.
|
||
|
||
Release 4.5.1
|
||
-------------
|
||
|
||
Release date: December 2014
|
||
|
||
### 3D Mesh Generation
|
||
|
||
- Fix a bug in the sliver exudation preservation of boundaries.
|
||
|
||
Release 4.5
|
||
-----------
|
||
|
||
Release date: October 2014
|
||
|
||
### Installation
|
||
|
||
- Changes in the set of supported platforms:
|
||
- The Microsoft Windows Visual C++ compiler 2008 (VC9) is no
|
||
longer supported since CGAL-4.5.
|
||
- Since CGAL version 4.0, Eigen was the recommended third-party
|
||
library to use with *Planar Parameterization of Triangulated Surface
|
||
Meshes*, *Surface Reconstruction from Point Sets*, *Approximation of
|
||
Ridges and Umbilics on Triangulated Surface Meshes*, and *Estimation
|
||
of Local Differential Properties of Point-Sampled Surfaces*
|
||
packages. From CGAL version 4.5, Taucs, Blas and Lapack are no
|
||
longer supported.
|
||
- CGAL is now compatible with the new CMake version 3.0.
|
||
|
||
### Triangulated Surface Mesh Deformation (new package)
|
||
|
||
- This package allows to deform a triangulated surface mesh under
|
||
positional constraints of some of its vertices without requiring any
|
||
additional structure other than the surface mesh itself. The methods
|
||
provided implements an as-rigid-as-possible deformation. Note that
|
||
the main class name has changed between the 4.5-beta1 and the 4.5
|
||
releases to better match the CGAL naming conventions (from
|
||
`CGAL::Deform_mesh` to `CGAL::Surface_mesh_deformation`).
|
||
|
||
### CGAL and the Boost Graph Library (major changes)
|
||
|
||
- Cleanup of the `HalfedgeGraph` concept. In particular:
|
||
- Introduction of the notion of `halfedge_descriptor` in the
|
||
specialization of the class `boost::graph_traits`.
|
||
- Deprecation of `halfedge_graph_traits`.
|
||
- A model of `HalfedgeGraph` is considered as an undirected graph.
|
||
Thus any call to `edges()` should be replaced by `halfedges()`
|
||
and `num_edges()` now returns the number of (undirected) edges.
|
||
- **Breaking change:** `is_border_edge` and `is_border_halfedge`
|
||
properties are removed. The free functions `is_border()` and
|
||
`is_border_edge()` should be used instead.
|
||
- Renaming of `HalfedgeGraph` specific free functions.
|
||
- Introduction of the `FaceGraph` concept.
|
||
- Adaptation of the package *Triangulated Surface Mesh Simplification*
|
||
and of the class `AABB_halfedge_graph_segment_primitive` from the
|
||
package *3D Fast Intersection and Distance Computation* to the API
|
||
change.
|
||
- Update of the package *Triangulated Surface Mesh Segmentation* and
|
||
of the class `AABB_face_graph_triangle_primitive` from the package
|
||
*3D Fast Intersection and Distance Computation* to accept model of
|
||
the newly introduced concepts.
|
||
- Offer *Euler* operations as free functions for models of the graph
|
||
concepts provided by CGAL.
|
||
- Specialization of `boost::graph_traits` for
|
||
`OpenMesh::PolyMesh_ArrayKernelT` as proof of concept. A
|
||
`OpenMesh::PolyMesh_ArrayKernelT` becomes a model of the
|
||
aforementioned concepts when including
|
||
`CGAL/boost/graph/graph_traits_PolyMesh_ArrayKernelT.h`.
|
||
|
||
### dD Geometry Kernel
|
||
|
||
- A new model `Epick_d` of the `Kernel_d` concept is introduced. It
|
||
provides better performance through arithmetic filtering and
|
||
specializations for fixed dimensions. It may not work with compilers
|
||
as old as gcc-4.2, but was tested with gcc-4.4.
|
||
|
||
### 3D Convex Hulls
|
||
|
||
- Clean up the documentation of the concepts
|
||
|
||
### 2D Arrangements
|
||
|
||
- Fixed a bug in removing an unbounded curve (e.g., a ray) from an
|
||
arrangement induced by unbounded curves.
|
||
|
||
### 2D Snap Rounding
|
||
|
||
- Replaced use of private `kd_tree` with CGAL's official `Kd_tree`
|
||
from `Spatial_searching` package; results in a small performance
|
||
gain. Removed the private `kd_tree` package.
|
||
|
||
### 3D Triangulations
|
||
|
||
- Add an experimental parallel version of the Delaunay triangulation
|
||
and the regular triangulation algorithms, which allows parallel
|
||
insertion and removal of point ranges.
|
||
- Add caching of circumcenters to `Regular_triangulation_cell_base_3`.
|
||
The cache value is computed when `cell->circumcenter()` or
|
||
`rt.dual(cell)` functions are called.
|
||
|
||
### 3D Periodic Triangulations
|
||
|
||
- Add a method to locate point with inexact predicates.
|
||
|
||
### 3D Mesh Generation
|
||
|
||
- Add a new constructor for the class `Labeled_mesh_domain_3` which
|
||
takes an `Iso_cuboid_3`.
|
||
- Add a new labeling function wrapper for meshing multi-domain.
|
||
- The meshing functionality in the Qt demos in `demo/Polyhedron/` and
|
||
`demo/Mesh_3/` can now use the handling of 1d-features, that exists
|
||
in CGAL since version 3.8.
|
||
- Add an experimental parallel version of the 3D mesh refinement and
|
||
mesh optimization methods.
|
||
|
||
### Point Set Processing and Surface Reconstruction from Point Sets
|
||
|
||
- The former demo has been removed and is fully merge in the
|
||
Polyhedron demo.
|
||
|
||
### Point Set Processing
|
||
|
||
- Workaround a bug in dijsktra shortest path of boost 1.54 by shipping
|
||
and using the boost header from the 1.55 release. This header will
|
||
be used only if you are using the version 1.54 of boost.
|
||
|
||
### Triangulated Surface Mesh Simplification
|
||
|
||
- **Breaking change:** Due to the cleanup of the concepts of the
|
||
package *CGAL and the Boost Graph Library*, the named parameter
|
||
`edge_is_border_map` has been removed, and the named parameter
|
||
`edge_is_constrained_map` now expects a property map with an edge
|
||
descriptor as key type (vs. halfedge descriptor before).
|
||
- Add some optimization in the code making the implementation faster
|
||
(depending on the cost and the placement chosen). However, for an
|
||
edge which collapse is not topologically valid, the vector of
|
||
vertices of the link provided by its profile might contains
|
||
duplicates, thus also breaking the orientation guarantee in the
|
||
vector. This must not be a problem for users as the edge is not
|
||
collapsible anyway but if it is a absolute requirement for user
|
||
defined cost/placement, defining the macro
|
||
`CGAL_SMS_EDGE_PROFILE_ALWAYS_NEED_UNIQUE_VERTEX_IN_LINK` will
|
||
restore the former behavior.
|
||
|
||
### dD Spatial Searching
|
||
|
||
- Added methods `reserve(size_t size)` and `size_t capacity()`
|
||
to class `Kd_tree` to allocate memory to store `size` points and to
|
||
report that number (STL compliance).
|
||
|
||
### STL Extensions for CGAL
|
||
|
||
- Add `Compact_container::operator[]`, allowing a direct access to the
|
||
ith element of a compact container.
|
||
- Add `Concurrent_compact_container`, a compact container which allows
|
||
concurrent insertion and removal.
|
||
|
||
Release 4.4
|
||
-----------
|
||
|
||
Release date: April 2014
|
||
|
||
### Installation
|
||
|
||
- Additional supported platforms:
|
||
- The Apple Clang compiler version 5.0 is now supported on
|
||
OS X Mavericks.
|
||
- The Microsoft Windows Visual C++ compiler 2013 (VC12) is now
|
||
supported.
|
||
|
||
### Triangulated Surface Mesh Segmentation (new package)
|
||
|
||
- This package implements the segmentation of triangulated surface
|
||
meshes based on the Shape Diameter Function (SDF). In addition, it
|
||
also provides functions to generate segmentations based on a user
|
||
defined alternative to the SDF.
|
||
|
||
### Number Types
|
||
|
||
- A new class `CGAL::Mpzf` is introduced on some platforms for exact
|
||
ring operations. It is used to improve the speed of the evaluation
|
||
of predicates in degenerate situations.
|
||
|
||
### 2D and 3D Geometry Kernel
|
||
|
||
- Fix a bug introduced in CGAL 4.3 when computing the intersection of
|
||
two 3D triangles.
|
||
|
||
### 2D Polygon Partitioning
|
||
|
||
- Bug fix to make the partition algorithms working with a Lazy kernel
|
||
such as `Exact_predicates_exact_constructions_kernel`.
|
||
|
||
### 2D Regularized Boolean Set-Operations
|
||
|
||
- Fix two memory leaks in `CGAL::General_polygon_set_2`.
|
||
|
||
### Combinatorial Maps and Linear Cell Complex
|
||
|
||
- `null_dart_handle` is no longer a static data member in the
|
||
`CombinatorialMap` concept. This implies to move the following
|
||
methods of `Dart` concept into `CombinatorialMap` concept:
|
||
`is_free`, `highest_nonfree_dimension`, `opposite` and
|
||
`other_extremity`. We also transform the static methods
|
||
`vertex_attribute` and `point` of `Linear_cell_complex` class into
|
||
non static methods. You can define the CGAL\_CMAP\_DEPRECATED macro
|
||
to keep the old behavior.
|
||
|
||
### 2D Arrangements
|
||
|
||
- Revise the API of **polylines**. In particular, *construction* is
|
||
now done using functors and *iteration* is possible only on the
|
||
segments of a polyline.
|
||
- Fix a bug in the *Landmark* point-location strategy.
|
||
|
||
### 2D Snap Rounding
|
||
|
||
- Fix a memory leak
|
||
|
||
### 2D Triangulations
|
||
|
||
- Add different overloads of the function `insert_constraints` that
|
||
inserts a range of points and segments, or a range of segments.
|
||
These functions uses the spatial sorting in order to speed up the
|
||
time needed for the insertion.
|
||
|
||
### 3D Alpha Shapes
|
||
|
||
- Add member functions in `CGAL::Alpha_shape_3` to give access to the
|
||
alpha status of edges and facets (`get_alpha_status())`.
|
||
- Add another filtration method (`filtration_with_alpha_values()`)
|
||
that reports the alpha value at which each face appears in the
|
||
filtration.
|
||
|
||
### 3D Mesh Generation
|
||
|
||
- Fix the access to functions `number_of_facets` and `number_of_cells`
|
||
in `Mesh_complex_3_in_triangulation_3`.
|
||
- Change the internal API of the sliver perturber, to make possible
|
||
for developers to optimize another criterion than the (default)
|
||
minimal dihedral angle. Developers can also define a new
|
||
perturbation vector (for angles we had gradient of squared
|
||
circumradius, gradient of volume, gradient of minimal dihedral
|
||
angle, and random) which is better suitable to optimize their
|
||
criterion.
|
||
- Improve the use of cache values in `Mesh_cell_base_3` to (re)compute
|
||
circumcenters and sliver criterion values only when needed.
|
||
|
||
### Triangulated Surface Mesh Simplification
|
||
|
||
- Fix a bug in the way edges can be marked as non-removable by adding
|
||
a named-parameter `edge_is_constrained_map` to the function
|
||
`edge_collapse`
|
||
|
||
### dD Spatial Searching
|
||
|
||
- Fix a documentation bug: The property map passed as template
|
||
parameter to the classes `Search_traits_adapter` and
|
||
`Distance_adapter` must be a lvalue property map. To avoid incorrect
|
||
usage, a static assertion has been added in the CGAL code to prevent
|
||
the user from instantiating these classes with an incorrect property
|
||
map type.
|
||
|
||
### CGAL ipelets
|
||
|
||
- Better description of the demo ipelets in the user manual
|
||
- New ipelet for pencils of circles
|
||
- New ipelet for hyperbolic geometry in Poincaré model
|
||
- The generator ipelet now generates point in a selected zone
|
||
- Hilbert sort ipelet implements two policies
|
||
|
||
Release 4.3
|
||
-----------
|
||
|
||
Release date: October 2013
|
||
|
||
### The CGAL Manual
|
||
|
||
- The documentation of CGAL is now generated with Doxygen.
|
||
|
||
### 2D Periodic Triangulations (new package)
|
||
|
||
- This package allows to build and handle triangulations of point sets
|
||
in the two dimensional flat torus. Triangulations are built
|
||
incrementally and can be modified by insertion or removal of
|
||
vertices. They offer point location facilities. The package provides
|
||
Delaunay triangulations and offers nearest neighbor queries and
|
||
primitives to build the dual Voronoi diagrams.
|
||
|
||
### API Changes
|
||
|
||
#### 2D and 3D Geometry Kernel
|
||
|
||
- The intersection functions and functors used to return a
|
||
`CGAL::Object` in order to deal with the different possible return
|
||
types. However, depending on the arguments it is possible to reduce
|
||
the possible return types to a small set. For this reason and to
|
||
take advantage of the type safety, we decided to use
|
||
`boost::variant` instead of `CGAL::Object`. The `result_of` protocol
|
||
is now even more useful to determine the return type of the
|
||
intersection functions and functors. The change should be relatively
|
||
transparent to the user thanks to the implicit constructor added to
|
||
`CGAL::Object`. However, it is recommended to upgrade your code. The
|
||
previous behavior can be restored by defining the macro
|
||
`CGAL_INTERSECTION_VERSION` to 1.
|
||
|
||
#### 2D Arrangements
|
||
|
||
- The type of the result of point location queries changed to
|
||
`boost::variant` (from `CGAL::Object`). For convenience, the
|
||
previous behavior can be restored by defining the macro
|
||
`CGAL_ARR_POINT_LOCATION_VERSION` to 1.
|
||
- Introduced an optimization for operations on large and dense
|
||
arrangements.
|
||
|
||
#### 3D Fast Intersection and Distance Computation
|
||
|
||
- Following the intersection API change, `Object_and_primitive_id` has
|
||
been replaced by a template class
|
||
`Intersection_and_primitive_id<Query>` to determine the type
|
||
depending on the query object type.
|
||
|
||
#### CGAL and Boost Property Maps
|
||
|
||
- The `key_type` of the property maps provided by CGAL used to be an
|
||
iterator. In order to be more easily re-used, the `key_type` has
|
||
been changed to be the `value_type` of the iterator. The packages
|
||
that have been updated to match these changes are **Point Set
|
||
Processing** and **Surface Reconstruction from Point Sets**.
|
||
However, for most users this change should be transparent if the
|
||
default property maps were used. For convenience, the former
|
||
behavior can be enabled by defining the macro
|
||
`CGAL_USE_PROPERTY_MAPS_API_V1`.
|
||
|
||
### Algebraic Foundations
|
||
|
||
- For convenience, add an overload of `make_rational()` taking a pair
|
||
of numbers.
|
||
|
||
### 2D and 3D Geometry Kernel
|
||
|
||
- A `Iso_rectangle_2` can now be constructed from a `Bbox_2` and an
|
||
`Iso_cuboid_3` from a `Bbox_3`.
|
||
- The implementation of `CGAL::Object` has been updated and now uses
|
||
`boost::shared_ptr` and `boost::any`. This implementation is faster.
|
||
- Add to `Bbox_2` and `Bbox_3` a `+=` operator as well as free
|
||
functions to get the bounding box of a range of geometric objects.
|
||
|
||
### Combinatorial Maps
|
||
|
||
- Two bug fixes: do not use the 2 least significant bits for cell
|
||
attribute without dart support; share the mark when copying a
|
||
CMap\_cell\_iterator.
|
||
- Add a constructor taking a given combinatorial map as argument,
|
||
possibly with different dimension and/or different attributes. This
|
||
allows to transform a combinatorial map.
|
||
- Add operator= and swap method.
|
||
- Add dynamic onmerge/onsplit functions that can be associated
|
||
dynamically to i-attributes and which are automatically called when
|
||
i-cells are split/merged.
|
||
- Add a function allowing to reverse the orientation of a
|
||
combinatorial map, and another one to reverse one connected
|
||
component of a combinatorial map.
|
||
|
||
### 3D Boolean Operations on Nef Polyhedra
|
||
|
||
- Bug-fix in IO when using `Lazy_exact_nt` as number type or
|
||
`Exact_predicates_exact_constructions_kernel` as kernel.
|
||
|
||
### 2D Triangulations
|
||
|
||
- Extend the concept `TriangulationDataStructure_2` to require a more
|
||
general `copy_tds` function that allows a copy between TDS of
|
||
different types. The CGAL model has been updated.
|
||
- Add a way to efficiently insert a range of points with information
|
||
into the 2D constrained Delaunay triangulations.
|
||
|
||
### 3D Triangulations
|
||
|
||
- Extend the concept `TriangulationDataStructure_3` to require a more
|
||
general `copy_tds` function that allows a copy between TDS of
|
||
different types. The CGAL model has been updated.
|
||
- Add an advanced function to set the infinite vertex of the
|
||
triangulation for low level operations
|
||
- Fix a bug in the function inserting a range of points with info when
|
||
the `Fast_location` tag is used
|
||
|
||
### 2D Segment Delaunay Graph
|
||
|
||
- Add functions `insert_points` and `insert_segments` to insert a
|
||
range of points and segments. These functions uses the spatial
|
||
sorting in order to speed up the time needed for the insertion. The
|
||
function
|
||
`insert(Input_iterator first, Input_iterator beyond, Tag_true)`
|
||
has been updated to dispatch the input when possible to these
|
||
functions.
|
||
|
||
### 2D Apollonius Graphs
|
||
|
||
- Modified insertion algorithm so that the code can handle
|
||
pseudo-circles as well.
|
||
- Updated implementation of the vertex conflict predicate by a faster
|
||
version.
|
||
|
||
### 3D Mesh Generation
|
||
|
||
- Speed-up `Mesh_3` and in particular the global optimizers (Lloyd and
|
||
ODT) by introducing a parameter `do_freeze` to prevent from moving
|
||
vertices which would move of very small displacements.
|
||
- Introduce new data structures and options for speed-up and
|
||
compacity. Note that `Compact_mesh_cell_base_3` and
|
||
`Mesh_vertex_base_3` are now our favoured implementations of the
|
||
concepts MeshCellBase\_3 and MeshVertexBase\_3.
|
||
- Introduce a new constructor for `Polyhedral_mesh_domain_3` that
|
||
takes a bounding polyhedron to be meshed along with a polyhedral
|
||
surface entirely included in it. This allows the user to mesh a
|
||
polyhedral domain with internal surface(s) which can be
|
||
non-watertight and even non-manifold.
|
||
- Several documentation bug fixes.
|
||
- Provide the ability to plug in custom cell\_base/vertex\_base
|
||
classes into the Mesh\_triangulation\_3 class.
|
||
|
||
### Triangulated Surface Mesh Simplification
|
||
|
||
- Fix a segmentation fault that was happening when some edges of
|
||
length 0 were in the input mesh.
|
||
|
||
### 3D Fast Intersection and Distance Computation
|
||
|
||
- Following the intersection API change, `Object_and_primitive_id` has
|
||
been replaced by a template class
|
||
`Intersection_and_primitive_id<Query>` to determine the type
|
||
depending on the query object type.
|
||
- Introduce the class `AABB_halfedge_graph_segment_primitive`, which
|
||
replaces the class `AABB_polyhedron_segment_primitive` (which is now
|
||
deprecated). The new class is more general and can be used with any
|
||
model of `HalfedgeGraph`.
|
||
- Introduce the class `AABB_face_graph_triangle_primitive` which
|
||
replaces the class `AABB_polyhedron_triangle_primitive` (which is
|
||
now deprecated).
|
||
- Document the classes `AABB_segment_primitive` and
|
||
`AABB_triangle_primitive` that were already used in some examples.
|
||
- Add a generic primitive class `AABB_primitive` that allows to define
|
||
a primitive type by defining only two property maps.
|
||
- Introduce a new concept of primitive `AABBPrimitiveWithSharedData`.
|
||
It allows to have some data shared between the primitives stored in
|
||
a `AABB_tree`. With this you can, for example have a primitive
|
||
wrapping an integer which refers to the position of a geometric
|
||
object in a `std::vector`. Only one reference to this vector will be
|
||
stored in the traits of the tree. The concept `AABBTraits`, its
|
||
model `AABB_traits` and the class `AABB_tree` have been updated
|
||
accordingly. However, everything is backward compatible.
|
||
- Fix a memory leak in the destructor of the class `AABB-tree`
|
||
|
||
### STL Extensions for CGAL
|
||
|
||
- Add to `Dispatch_output_iterator` and
|
||
`Dispatch_or_drop_output_iterator` an operator to accept and
|
||
dispatch a tuple of values.
|
||
|
||
### Concurrency in CGAL
|
||
|
||
- Add a `FindTBB` CMake module so that one can easily link with TBB to
|
||
write shared-memory parallel code.
|
||
- Introduce two new tags: Sequential\_tag and Parallel\_tag
|
||
|
||
Release 4.2
|
||
-----------
|
||
|
||
Release date: March 2013
|
||
|
||
### Installation
|
||
|
||
- Additional supported platforms:
|
||
- The Microsoft Windows Visual C++ compiler 2012 (VC11) is now
|
||
supported.
|
||
- With Microsoft Visual C++ (all supported versions), the compiler
|
||
flags `/bigobj` and `/wd4503` are added by CGAL CMake scripts.
|
||
- This is the last release whose "`UseCGAL.cmake`" file (if using CGAL
|
||
in a CMake build environment) contains the line
|
||
|
||
link_libraries(${CGAL_LIBRARIES_DIR} ${CGAL_3RD_PARTY_LIBRARIES_DIRS})
|
||
|
||
as this is a deprecated CMake command. The correct way to link with
|
||
CGAL's libraries (as for required 3rd party libraries) is to use
|
||
'`target_link_libraries`' which specifies for each build target
|
||
which libraries should be linked. The following serves as example:
|
||
|
||
find_package(CGAL)
|
||
include(${CGAL_USE_FILE})
|
||
add_executable(myexe main.cpp)
|
||
target_link_libraries(myexe ${CGAL_LIBRARIES}
|
||
${CGAL_3RD_PARTY_LIBRARIES})
|
||
|
||
We also expect further changes in CGAL's CMake setup (change of
|
||
variable names, consistency of filename and output, removing
|
||
essential libraries, building executables, removal of
|
||
'`${CGAL_3RD_PARTY_LIBRARIES}`').
|
||
|
||
### 2D Arrangements
|
||
|
||
- Enhanced the 2D-arrangements demonstration program and ported it to
|
||
Qt4. The new demonstration program makes use of the CGAL Graphics
|
||
View framework, in which the 2D primitives are individually
|
||
represented as objects in a scene. (The implementations of several
|
||
demos in CGAL already make use of this framework.) This project was
|
||
carried out as part of the 2012 Google Summer of Code program.
|
||
- Fixed a bug in the Walk-Along-A-Line point location strategy for
|
||
arrangements induced by unbounded curves.
|
||
|
||
### 2D Circular Geometry Kernel
|
||
|
||
- Fix the intersection type computed when intersecting two identical
|
||
circles.
|
||
- Forward correctly the result type of the linear kernel functors
|
||
|
||
### 2D Triangulations
|
||
|
||
- Add mechanism to avoid call stack overflow in
|
||
`Delaunay_triangulation_2` and
|
||
`Constrained_Delaunay_triangulation_2`.
|
||
- Add a constructor for `Regular_triangulation_2` and
|
||
`Delaunay_triangulation_2` from a range of points or a range of
|
||
points with info.
|
||
|
||
### 2D Voronoi Diagram Adaptor
|
||
|
||
- Bug-fix: Add ccb() method in face type as documented.
|
||
|
||
### 3D Minkowski Sum of Polyhedra
|
||
|
||
- Fix a memory leak.
|
||
|
||
### 3D Fast Intersection and Distance Computation
|
||
|
||
- Update requirements of the concepts `AABBTraits` and
|
||
`AABBGeomTraits` to match the implementation of the package.
|
||
|
||
### Generator
|
||
|
||
- Addition of the `Combination_enumerator`
|
||
|
||
### STL Extensions
|
||
|
||
- Introduction of `CGAL::cpp11::result_of` as an alias to the tr1
|
||
implementation from boost of the `result_of` mechanism. When all
|
||
compilers supported by CGAL will have a Standard compliant
|
||
implemention of the C++11 `decltype` feature, it will become an
|
||
alias to `std::result_of`.
|
||
|
||
### Surface Reconstruction from Point Sets
|
||
|
||
- Performance improvements and addition of an option to better
|
||
reconstruct undersampled zones. The poisson reconstruction plugin of
|
||
the Polyhedron demo has an option to switch it on.
|
||
|
||
Release 4.1
|
||
-----------
|
||
|
||
Release date: October 2012
|
||
|
||
### Installation
|
||
|
||
- Additional supported platforms:
|
||
- The Apple Clang compiler versions 3.1 and 3.2 are now supported
|
||
on Mac OS X.
|
||
- Improved configuration for essential and optional external third
|
||
party software
|
||
- Added more general script to create CMakeLists.txt files:
|
||
`cgal_create_CMakeLists`
|
||
- Availability tests for C++11 features are now performed with the
|
||
help of [Boost.Config](http://www.boost.org/libs/config). A Boost
|
||
version of 1.40.0 or higher is needed to use C++11 features.
|
||
|
||
### 2D Arrangement
|
||
|
||
- Improved the implementation of the incremental randomized
|
||
trapezoidal decomposition point-location strategy. The new
|
||
implementation enables point location in unbounded arrangements. It
|
||
constructs a search structure of guaranteed linear size with
|
||
guaranteed logarithmic query time.
|
||
|
||
### 2D Convex Hulls and Extreme Points
|
||
|
||
- Speed up the preprocessing stage of the Akl-Toussaint implementation
|
||
(used by the free function `convex_hull_2` when forward iterators
|
||
are provided as input).
|
||
|
||
### Combinatorial Maps
|
||
|
||
- Minor bugfix; replace some functors by methods.
|
||
|
||
### Linear Cell Complex
|
||
|
||
- Improve the demo: add a widget showing all the volumes and an
|
||
operation to create a Menger sponge.
|
||
|
||
### Kernels
|
||
|
||
- All Kernel functors now support the result\_of protocol.
|
||
|
||
### STL\_Extensions for CGAL
|
||
|
||
- The namespace `cpp0x` has been renamed `cpp11`. The old name is
|
||
still available for backward compatibility.
|
||
|
||
Release 4.0.2
|
||
-------------
|
||
|
||
Release date: Jul 2012
|
||
|
||
This is a bug fix release. It fixes a bug in the `CMakeLists.txt` for
|
||
CGAL-4.0.1, that prevented even building the libraries.
|
||
|
||
Release 4.0.1
|
||
-------------
|
||
|
||
Release date: Jul 2012
|
||
|
||
This is a bug fix release. Apart various minor fixes in the
|
||
documentation, the following has been changed since CGAL-4.0:
|
||
|
||
### 2D Voronoi Diagram Adaptor (re-added)
|
||
|
||
- The package *2D Voronoi Diagram Adaptor* was temporarily removed
|
||
from the CGAL distribution because of license issues. That package
|
||
is now back into CGAL.
|
||
|
||
### 2D and 3D Geometry Kernel
|
||
|
||
- Fix a bug in the `Segment_3-Triangle_3` intersection function in the
|
||
case the segment is collinear with a triangle edge.
|
||
- Fix a bug in the `Projection_traits_.._3` class in the case a
|
||
segment was parallel to the x-axis.
|
||
|
||
### Algebraic Kernel
|
||
|
||
- Avoid the linking error "duplicate symbols" when two compilation
|
||
units using the algebraic kernel are linked.
|
||
|
||
### 3D Boolean Operations on Nef Polygons Embedded on the Sphere
|
||
|
||
- Fix a memory leak due to the usage of an internal mechanism that has
|
||
been replaced by `boost::any`. This also influences the packages 2D
|
||
Boolean Operations on Nef Polygons, 3D Boolean Operations on Nef
|
||
Polyhedra, Convex Decomposition of Polyhedra, and 3D Minkowski Sum
|
||
of Polyhedra.
|
||
|
||
### 2D Arrangement
|
||
|
||
- Fix several memory leaks.
|
||
|
||
### 2D Mesh Generation
|
||
|
||
- Fix a compilation error in the header
|
||
`<CGAL/Mesh_2/Do_not_refine_edges.h>` when g++ version 4.7 is used.
|
||
|
||
### Surface Mesh Generation and 3D Mesh Generation
|
||
|
||
- Fix an important bug in the `CGAL_ImageIO` library, that could lead
|
||
to wrong result when meshing from a 3D image.
|
||
- Fix the compilation of the demo in `demo/Surface_mesher`, when Boost
|
||
version 1.48 or 1.49 is used.
|
||
|
||
### Surface Mesh Parameterization
|
||
|
||
- Fix a memory leak.
|
||
- Fix a compatibility issue with Eigen-3.1 of `Eigen_solver_traits`.
|
||
This fix also affects the usage of that class in the package
|
||
*Surface Reconstruction from Point Sets*.
|
||
|
||
Release 4.0
|
||
-----------
|
||
|
||
Release date: March 2012
|
||
|
||
CGAL 4.0 offers the following improvements and new functionality :
|
||
|
||
### License Changes
|
||
|
||
The whole CGAL-3.x series was released under a combination of LGPLv2
|
||
(for the foundations of CGAL), and QPL (for the high-level packages).
|
||
QPL was the former license of the graphical toolkit Qt, but that license
|
||
is not supported by any major free software project. Furthermore, the
|
||
terms of the LGPLv2 license are ambiguous for a library of C++
|
||
templates, like CGAL.
|
||
|
||
The CGAL project, driven by the CGAL Editorial Board, has decided to
|
||
change the license scheme of CGAL. We increased the major number of the
|
||
CGAL version to '4' in order to reflect this license change. The
|
||
CGAL-4.x series is released under:
|
||
|
||
- LGPLv3+ (that is LGPL *"either version 3 of the License, or (at your
|
||
option) any later version"*), for the foundations of CGAL, instead
|
||
of LGPLv2,
|
||
- GPLv3+ for the high-level packages, instead of QPL.
|
||
|
||
### General
|
||
|
||
- On Windows, CGAL libraries are now built by default as shared
|
||
libraries (also called DLL). To run applications that use .dll files
|
||
of CGAL, you must either copy the .dll files into the directory of
|
||
the application, or add the path of the directory that contains
|
||
those .dll files into the PATH environment variable.
|
||
- On Windows, the CMake scripts of CGAL now search for shared version
|
||
of the Boost libraries. You must ensure that the .dll files of Boost
|
||
are found by the dynamic linker. You can, for example, add the path
|
||
to the Boost .dll files to the PATH environment variable.
|
||
- On Windows, CMake version 2.8.6 or higher is now required.
|
||
- Eigen version 3.1 or later is now the recommended third party
|
||
library to use in *Planar Parameterization of Triangulated Surface
|
||
Meshes*, *Surface Reconstruction from Point Sets*, *Approximation of
|
||
Ridges and Umbilics on Triangulated Surface Meshes*, and *Estimation
|
||
of Local Differential Properties of Point-Sampled Surfaces*
|
||
packages. If you use Eigen you no longer need Taucs, Lapack or Blas
|
||
to use those packages (and any other in CGAL).
|
||
|
||
### Linear Cell Complex (new package)
|
||
|
||
- This package implements linear cell complexes, objects in
|
||
d-dimension with linear geometry. The combinatorial part of objects
|
||
is described by a combinatorial map, representing all the cells of
|
||
the object plus the incidence and adjacency relations between cells.
|
||
Geometry is added to combinatorial maps simply by associating a
|
||
point to each vertex of the map. This data structure can be seen as
|
||
the generalization in dD of the `Polyhedron_3`.
|
||
|
||
### 2D Voronoi Diagram Adaptor (temporarily removed)
|
||
|
||
- As the copyright holder of this package has not granted the right to
|
||
switch from QPL to GPL, this package is removed from the
|
||
distribution. Note that it is "only" an adapter, that is the
|
||
functionality of point/segment/disk Voronoi diagram is offered
|
||
through the Delaunay triangulation, segment Delaunay graph, and
|
||
Apollonius graph.
|
||
|
||
### AABB Tree
|
||
|
||
- Document constness of member functions of the `AABB_tree` class.
|
||
- The class `AABB_tree` is now guaranteed to be read-only thread-safe.
|
||
As usual in CGAL, this small overhead introduced for thread-safety
|
||
can be deactivated by defining `CGAL_HAS_NO_THREADS`.
|
||
|
||
### 2D Alpha Shapes
|
||
|
||
- Add an extra template parameter to the class `Alpha_shape_2` that
|
||
allows a certified construction using a traits class with exact
|
||
predicates and inexact constructions.
|
||
- An object of type `Alpha_shape_2` can now be constructed from a
|
||
triangulation.
|
||
|
||
### 3D Alpha Shapes
|
||
|
||
- Add an extra template parameter to the class `Alpha_shape_3` that
|
||
allows a certified construction using a traits class with exact
|
||
predicates and inexact constructions.
|
||
|
||
### Geometric Object Generators
|
||
|
||
- `Random_points_in_iso_box_d` (deprecated since 3.8) has been
|
||
removed. Use `Random_points_in_cube_d` instead.
|
||
|
||
### Linear and Quadratic Programming Solver
|
||
|
||
- Minor bugfix.
|
||
|
||
### Spatial Searching
|
||
|
||
- The const-correctness of this package have been worked out. The
|
||
transition for users should be smooth in general, however adding few
|
||
const in user code might be needed in some cases.
|
||
- The class `Kd_tree` is now guaranteed to be read-only thread-safe.
|
||
As usual in CGAL, this small overhead introduced for thread-safety
|
||
can be deactivated by defining `CGAL_HAS_NO_THREADS`.
|
||
- Bug-fix in `Orthogonal_incremental_neighbor_search` and
|
||
`Incremental_neighbor_search` classes. Several calls to `begin()`
|
||
now allow to make several nearest neighbor search queries
|
||
independently.
|
||
|
||
### STL Extension
|
||
|
||
- `CGAL::copy_n` is now deprecated for `CGAL::cpp0x::copy_n` which
|
||
uses `std::copy_n`, if available on the platform.
|
||
- `CGAL::successor` and `CGAL::predecessor` are now deprecated for
|
||
`CGAL::cpp0x::next` and `CGAL::cpp0x::prev`. These functions use the
|
||
standard versions if available on the platform. Otherwise,
|
||
`boost::next` and `boost::prior` are used.
|
||
|
||
### Triangulation\_2
|
||
|
||
- Fix a thread-safety issue in `Delaunay_triangulation_2` remove
|
||
functions. As usual in CGAL, the small overhead introduced for
|
||
thread-safety can be deactivated by defining `CGAL_HAS_NO_THREADS`.
|
||
- Add extraction operator for the class `Constrained_triangulation_2`
|
||
(and thus to all inheriting classes).
|
||
|
||
Release 3.9
|
||
-----------
|
||
|
||
Release date: September 2011
|
||
|
||
CGAL 3.9 offers the following improvements and new functionality :
|
||
|
||
### General
|
||
|
||
- The class `Root_of_2` is now deprecated. It is recommended to use
|
||
the class `Sqrt_extension` instead.
|
||
- The class `Sqrt_extension` is now used everywhere in CGAL where an
|
||
algebraic number of degree 2 is needed. This change has been done in
|
||
the `Root_of_traits` mechanism (indirectly packages 2D Circular
|
||
kernel and 3D Spherical kernel) and the packages 2D Segment Delaunay
|
||
Graphs and 2D Arrangements.
|
||
- Various fixes in the manual.
|
||
|
||
### Combinatorial Maps (new package)
|
||
|
||
- This package provides a new combinatorial data structure allowing to
|
||
describe any orientable subdivided object whatever its dimension. It
|
||
describes all cells of the subdivision and all the incidence and
|
||
adjacency relations between these cells. For example it allows to
|
||
describe a 3D object subdivided in vertices, edges, faces and
|
||
volumes. This data structure can be seen as the generalization in dD
|
||
of the halfedge data structure.
|
||
|
||
### 3D Convex Hull (major performance improvement)
|
||
|
||
- The quickhull implementation of CGAL (`CGAL::convex_hull_3`) has
|
||
been worked out to provide very better performances.
|
||
- The function `CGAL::convex_hull_3` no longer computes the plane
|
||
equations of the facets of the output polyhedron. However an example
|
||
is provided to show how to compute them easily.
|
||
- A global function `convex_hull_3_to_polyhedron_3` is now provided to
|
||
extract the convex hull of a 3D points set from a triangulation of
|
||
these points.
|
||
|
||
### dD Spatial Searching (major new feature added)
|
||
|
||
- A traits-class and distance adapter that together with a point
|
||
property map, allow to make nearest neighbor queries on keys instead
|
||
of points have been added.
|
||
- Few bug fixes in the documentation have revealed some
|
||
inconsistencies that have been corrected. Two traits class concept
|
||
are now documented (`RangeSearchTraits` and `SearchTraits`). Most
|
||
other changes concerns only classes documented as advanced. One
|
||
issue that user can encounter is due to an additional requirement on
|
||
the nested class `Construct_cartesian_const_iterator_d` defined in
|
||
the concept SearchTraits that must provide a nested type
|
||
`result_type`.
|
||
|
||
### Spatial Sorting (major new feature added)
|
||
|
||
- General dimension is now supported.
|
||
- Hilbert sorting admits now two policies: splitting at median or at
|
||
middle (see user manual).
|
||
- Using a property map, sorting on keys instead of points is now
|
||
easier
|
||
|
||
### dD Kernel
|
||
|
||
- The d-dimensional kernel concept and models have been modified to
|
||
additionally provide two new functors `Less_coordinate_d` and
|
||
`Point_dimension_d`.
|
||
|
||
### 2D Arrangements
|
||
|
||
- A new geometry-traits class that handles rational arcs, namely
|
||
`Arr_rational_function_traits_2`, has been introduced. It replaced
|
||
an old traits class, which handled the same family of curves, but it
|
||
was less efficient. The new traits exploits CGAL algebraic kernels
|
||
and polynomials, which were not available at the time the old traits
|
||
class was developed.
|
||
- A new geometry traits concept called
|
||
`ArrangementOpenBoundaryTraits_2` has been introduced. A model of
|
||
this concept supports curves that approach the open boundary of an
|
||
iso-rectangular area called parameter space, which can be unbounded
|
||
or bounded. The general code of the package, however, supports only
|
||
the unbounded parameter space. We intend to enhance the general code
|
||
to support also bounded parameter spaces in a future release.
|
||
- The deprecated member function `is_at_infinity()` of
|
||
`Arrangement_2::Vertex` has been removed. It has been previously
|
||
replaced new function `is_at_open_boundary()`.
|
||
- The tags in the geometry traits that indicate the type of boundary
|
||
of the embedding surface were replaced by the following new tags:
|
||
|
||
Left_side_category
|
||
Bottom_side_category
|
||
Top_side_category
|
||
Right_side_category
|
||
|
||
It is still possible not to indicate the tags at all. Default values
|
||
are assumed. This however will produce warning messages, and should
|
||
be avoided.
|
||
|
||
Release 3.8
|
||
-----------
|
||
|
||
Release date: April 2011
|
||
|
||
CGAL 3.8 offers the following improvements and new functionality :
|
||
|
||
### General
|
||
|
||
- Boost version 1.39 at least is now required.
|
||
- Initial support for the LLVM Clang compiler (prereleases of version
|
||
2.9).
|
||
- Full support for the options -strict-ansi of the Intel Compiler 11,
|
||
and -ansi of the GNU g++ compiler.
|
||
- Adding a concept of ranges. In the following releases, it will be
|
||
the way to provide a set of objects (vs. a couple of iterators).
|
||
- Fix a memory leak in CORE polynomials.
|
||
- Various fixes in the manual.
|
||
|
||
### 3D Mesh Generation (major new feature added)
|
||
|
||
- Adding the possibility to handle sharp features: the 3D Mesh
|
||
generation package now offers the possibility to get in the final
|
||
mesh an accurate representation of 1-dimensional sharp features
|
||
present in the description of the input domain.
|
||
|
||
### 2D Triangulations (major new feature added)
|
||
|
||
- Add a way to efficiently insert a range of points with information
|
||
into a 2D Delaunay and regular triangulation.
|
||
- Add member function mirror\_edge taking an edge as parameter.
|
||
- Fix an infinite loop in constrained triangulation.
|
||
|
||
### 3D Triangulations (major new feature added)
|
||
|
||
- Add a way to efficiently insert a range of points with information
|
||
into a 3D Delaunay and regular triangulation.
|
||
- Add a member function to remove a cluster of points from a Delaunay
|
||
or regular triangulation.
|
||
- function vertices\_in\_conflict is renamed
|
||
vertices\_on\_conflict\_zone\_boundary for Delaunay and regular
|
||
triangulation. Function vertices\_inside\_conflict\_zone is added to
|
||
regular triangulation.
|
||
- Structural filtering is now internally used in locate function of
|
||
Delaunay and regular triangulation. It improves average construction
|
||
time by 20%.
|
||
- Added demo.
|
||
|
||
### 3D Alpha Shapes (major new feature added)
|
||
|
||
- The new class Fixed\_alpha\_shape\_3 provides a robust and faster
|
||
way to compute one alpha shape (with a fixed value of alpha).
|
||
|
||
### AABB tree
|
||
|
||
- Adding the possibility to iteratively add primitives to an existing
|
||
tree and to build it only when no further insertion is needed.
|
||
|
||
### 2D and 3D Kernel
|
||
|
||
- Better handling of 2D points with elevation (3D points projected
|
||
onto trivial planes). More general traits classes
|
||
(Projection\_traits\_xy\_3,
|
||
Projection\_traits\_yz\_3,Projection\_traits\_yz\_3) are provided to
|
||
work with triangulations, algorithms on polygons, alpha-shapes,
|
||
convex hull algorithm... Usage of former equivalent traits classes
|
||
in different packages is now deprecated.
|
||
- Exact\_predicates\_exact\_constructions\_kernel now better use the
|
||
static filters which leads to performance improvements.
|
||
- Add an overload for the global function angle, taking three 3D
|
||
points.
|
||
- In the 2D and 3D kernel concept, the constant Boolean
|
||
Has\_filtered\_predicates is now deprecated. It is now required to
|
||
use Has\_filtered\_predicates\_tag (being either Tag\_true or
|
||
Tag\_false).
|
||
- Compare\_distance\_2 and Compare\_distance\_3 provide additional
|
||
operators for 3 and 4 elements.
|
||
- Add intersection test and intersection computation capabilities
|
||
between an object of type Ray\_3 and either an object of type
|
||
Line\_3, Segment\_3 or Ray\_3.
|
||
- Improve intersection test performance between an object of type
|
||
Bbox\_3 and an object of type Plane\_3 or Triangle\_3 by avoiding
|
||
arithmetic filter failures.
|
||
|
||
### 2D Envelope
|
||
|
||
- Env\_default\_diagram\_1 is deprecated, Envelope\_diagram\_1 should
|
||
be used instead.
|
||
|
||
### 3D Envelope
|
||
|
||
- A new demo program called `L1_Voronoi_diagram_2` has been
|
||
introduced. It demonstrates how 2D Voronoi diagrams of points under
|
||
the L1 metric are constructed using lower envelopes.
|
||
|
||
### dD Kernel
|
||
|
||
- Add functor Compute\_coordinate\_d to Kernel\_d concept.
|
||
|
||
### Geometric Object Generators
|
||
|
||
- CGAL::Random uses boost::rand48 instead of std::rand.
|
||
- Adding to CGAL::Random a way to generate random integers.
|
||
- Adding generators for dD points.
|
||
|
||
### Algebraic Foundations
|
||
|
||
- Algebraic\_structure\_traits now provides an Inverse functor for
|
||
Fields. There is also a new global function inverse.
|
||
|
||
### Bounding Volumes
|
||
|
||
- dD Min sphere of spheres has a new traits class for the min sphere
|
||
of points.
|
||
|
||
### Triangulated Surface Mesh Simplification
|
||
|
||
- The priority queue internally used to prioritize edge
|
||
simplifications is no longer a relaxed heap but a binomial heap.
|
||
This fix guarantees that all edges satisfying a simplification
|
||
criteria are removed (if possible).
|
||
|
||
### 3D Boolean Operations on Nef Polyhedra
|
||
|
||
- Allow construction of a 3D nef polyhedron from a 3D polyhedron with
|
||
normals.
|
||
|
||
### 2D Arrangements
|
||
|
||
- Fix a bug in the method insert\_at\_vertices of the Arrangement\_2
|
||
class.
|
||
- Fix several bugs in the traits class Arr\_Bezier\_curve\_traits\_2
|
||
for arrangement of Bezier curves.
|
||
|
||
### 2D Minkowski Sums
|
||
|
||
- A bug in the convolution method was fixed.
|
||
|
||
Release 3.7
|
||
-----------
|
||
|
||
Release date: October 2010
|
||
|
||
CGAL 3.7 offers the following improvements and new functionality :
|
||
|
||
### General
|
||
|
||
- The configuration of CGAL libraries now requires CMake>=2.6.
|
||
- Changes in the set of supported platforms:
|
||
- GNU g++ 4.5 supported (with or without the compilation option
|
||
-std=c++0x).
|
||
- Initial support for the option -strict-ansi of the Intel
|
||
Compiler 11. The CGAL libraries compile with that option, and
|
||
most CGAL headers have been fixed. The packages "3D Boolean
|
||
Operations on Nef Polyhedra" (Nef\_3), "Convex Decomposition of
|
||
Polyhedra" (Convex\_decomposition\_3), and "3D Minkowski Sum of
|
||
Polyhedra" (Minkowski\_sum\_3) are known to still fail to
|
||
compile with that compiler flag.
|
||
- The Microsoft Windows Visual C++ compiler 2010 (VC10), that was
|
||
experimentally supported by CGAL-3.6.1, is now fully supported.
|
||
Note that CMake>=2.8.2 is required for that support.
|
||
- The Microsoft Windows Visual C++ compiler 2005 (VC8) is no
|
||
longer supported by the CGAL project since CGAL-3.7.
|
||
- With Microsoft Windows Visual C++ (VC9 and VC10), the optional
|
||
dependencies Gmp, Mpfr, Blas, Lapack, Taucs no longer use
|
||
Boost-style name mangling. Only one variant is now provided by
|
||
the CGAL Windows installer (release, with dynamic runtime).
|
||
- Some demos now require a version of Qt4 >= 4.3.
|
||
- CGAL\_PDB is no longer provided with CGAL. An alternative solution
|
||
for people interested in reading PDB files is to use ESBTL
|
||
(http://esbtl.sourceforge.net/).
|
||
- Fix issues of the CGAL wrappers around the CORE library, on 64 bits
|
||
platforms.
|
||
|
||
### Arithmetic and Algebra
|
||
|
||
- New models Algebraic\_kernel\_d\_1 and Algebraic\_kernel\_d\_2 for
|
||
the corresponding concepts. They provide generic support for various
|
||
coefficient types
|
||
|
||
### Arrangements
|
||
|
||
- A new model Arr\_algebraic\_segment\_traits\_2 of
|
||
ArrangementTraits\_2 that supports algebraic curves of arbitrary
|
||
degree in the plane
|
||
|
||
### 2D Triangulations
|
||
|
||
- The Delaunay and regular 2D triangulations now use a symbolic
|
||
perturbation to choose a particular triangulation in co-circular
|
||
cases.
|
||
- The return type of the template member function insert(It beg, It
|
||
end), taking an iterator range of points, has been changed from int
|
||
to std::ptrdiff\_t.
|
||
- Classes Triangulation\_euclidean\_traits\_xy\_3,
|
||
Triangulation\_euclidean\_traits\_yz\_3 and
|
||
Triangulation\_euclidean\_traits\_xz\_3 are now model of the concept
|
||
ConstrainedTriangulationTraits\_2. They can be used with and without
|
||
intersection of constraints.
|
||
- 2D Delaunay and basic triangulations now provide vertex relocation
|
||
by the mean of these two new methods: move and
|
||
move\_if\_no\_collision. The methods are also available for the
|
||
hierarchy (Triangulation\_hierarchy\_2).
|
||
|
||
### 3D Triangulations
|
||
|
||
- The return type of the template member function insert(It beg, It
|
||
end), taking an iterator range of points, has been changed from int
|
||
to std::ptrdiff\_t.
|
||
- 3D Delaunay triangulations now provide vertex relocation by the mean
|
||
of these two new methods: move and move\_if\_no\_collision. This
|
||
works in both Compact\_policy and Fast\_policy.
|
||
|
||
### 2D and 3D Alpha Shapes
|
||
|
||
- The type int in the API has been changed to std::size\_t so that
|
||
CGAL can deal with large data sets (64 bit addresses).
|
||
|
||
### 2D Mesh Generation
|
||
|
||
- The execution of the 2D mesh generator is now deterministic (same at
|
||
each run).
|
||
|
||
### 3D Mesh Generation
|
||
|
||
- The efficiency of the 3D mesh generator has been improved (the
|
||
number of calls to the oracle per inserted vertex has globally
|
||
decrease). This is achieved through a slight change of the mesh
|
||
generator strategy which implies that a surface component that is
|
||
not detected at the surface mesher level will never be discovered by
|
||
chance, owing to the refinement of some tetrahedra, as it could
|
||
happen before. Please note that defining the macro
|
||
CGAL\_MESH\_3\_USE\_OLD\_SURFACE\_RESTRICTED\_DELAUNAY\_UPDATE
|
||
switches back to the old behavior.
|
||
- A demo program is now available.
|
||
|
||
### Surface Reconstruction from Point Sets
|
||
|
||
- Improved performance and minor bug fix.
|
||
|
||
### 2D Range and Neighbor Search
|
||
|
||
- The type int in the API has been changed to std::size\_t so that
|
||
CGAL can deal with large data sets (64 bit addresses).
|
||
|
||
Release 3.6.1
|
||
-------------
|
||
|
||
Release date: June 2010
|
||
|
||
This is a bug fix release. The following has been changed since
|
||
CGAL-3.6:
|
||
|
||
### General
|
||
|
||
- Fix compilation errors with recent Boost versions (since 1.40).
|
||
- Initial support for the Microsoft Visual C++ compiler 10.0 (MSVC
|
||
2010). For that support, CMake>=2.8.2 is required. Note also that
|
||
the compiler option "/bigobj" is necessary to compile some CGAL
|
||
programs with MSVC 2010.
|
||
|
||
### Polynomial
|
||
|
||
- Fix compilation errors with the Microsoft Visual C++ compiler and
|
||
the Intel C++ compiler.
|
||
|
||
### Polyhedron
|
||
|
||
- Fix a compilation errors in demo/Polyhedron/:
|
||
- issue with the location of qglobal.h of Qt4 on MacOS X,
|
||
- missing texture.cpp, if TAUCS is used,
|
||
- Fix the location of built plugins of demo/Polyhedron/, when CGAL is
|
||
configured with WITH\_demos=ON
|
||
|
||
### 3D Periodic Triangulations
|
||
|
||
- Fixed bug in the triangulation hierarchy for periodic
|
||
triangulations.
|
||
|
||
### 2D Mesh Generation
|
||
|
||
- Fix a bug that lead to precondition violation.
|
||
- Improve the user manual about the member function is\_in\_domain()
|
||
of the Face type.
|
||
- The 2D meshing process is now deterministic (sorting of bad faces no
|
||
longer relies on pointers comparisons).
|
||
|
||
### 3D Mesh Generation
|
||
|
||
- Fix a linking errors (duplicate symbols) when
|
||
`<CGAL/refine_mesh_3.h>` is included in different compilation units.
|
||
|
||
### Spatial Searching
|
||
|
||
- Fix a bug in `<CGAL/Orthogonal_k_neighbor_search.h>` when several
|
||
nearest neighbors are at the same distance from the query point.
|
||
|
||
### IO Streams
|
||
|
||
- Fix a bug in `<CGAL/IO/VRML_2_ostream.h>` that generated VRML 2
|
||
files with an invalid syntax for IndexedFaceSet nodes.
|
||
|
||
### Triangulation\_2
|
||
|
||
- Add missing Compare\_distance\_2 functor in trait classes
|
||
Triangulation\_euclidean\_traits\_xy\_3
|
||
Triangulation\_euclidean\_traits\_yz\_3 and
|
||
Triangulation\_euclidean\_traits\_xz\_3. This was preventing calling
|
||
member function nearest\_vertex of Delaunay\_triangulation\_2
|
||
instantiated with one of these traits.
|
||
|
||
Release 3.6
|
||
-----------
|
||
|
||
Release date: March 2010
|
||
|
||
CGAL 3.6 offers the following improvements and new functionality :
|
||
|
||
### General
|
||
|
||
- Boost version 1.34.1 at least is now required.
|
||
|
||
### Arithmetic and Algebra
|
||
|
||
#### Algebraic Kernel (new package)
|
||
|
||
- This new package is targeted to provide black-box implementations of
|
||
state-of-the-art algorithms to determine, compare and approximate
|
||
real roots of univariate polynomials and bivariate polynomial
|
||
systems. It includes models of the univariate algebraic kernel
|
||
concept, based on the library RS.
|
||
|
||
#### Number Types
|
||
|
||
- Two new arbitrary fixed-precision floating-point number types have
|
||
been added: the scalar type Gmpfr and the interval type Gmpfi, based
|
||
on the MPFR and MPFI libraries respectively.
|
||
|
||
### Geometry Kernels
|
||
|
||
#### 2D and 3D Geometry Kernel
|
||
|
||
- Add new do\_intersect() and intersection() overloads:
|
||
- do\_intersect(Bbox\_3, Bbox\_3/Line\_3/Ray\_3/Segment\_3)
|
||
- intersection(Triangle\_3, Line\_3/Ray\_3/Segment\_3)
|
||
|
||
### Polygons
|
||
|
||
#### 2D Regularized Boolean Set-Operations
|
||
|
||
- Fixed General\_polygon\_set\_2::arrangement() to return the proper
|
||
type of object.
|
||
|
||
### Arrangement
|
||
|
||
#### 2D Arrangements
|
||
|
||
- Fixed passing a (const) traits object to the constructor of
|
||
Arrangement\_2.
|
||
- Introduced Arrangement\_2::fictitious\_face(), which returns the
|
||
fictitious face in case of an unbounded arrangement.
|
||
- Fixed a bug in Bezier-curve handling.
|
||
- Added (back) iterator, number\_of\_holes(), holes\_begin(), and
|
||
holes\_end() to the default DCEL for backward compatibility.
|
||
- Added (simple) versions of the free overlay() function. It employs
|
||
the default overlay-traits, which practically does nothing.
|
||
|
||
### Polyhedron
|
||
|
||
- Fix a compilation errors in demo/Polyhedron/:
|
||
- issue with the location of qglobal.h of Qt4 on MacOS X,
|
||
- missing texture.cpp, if TAUCS is used,
|
||
- Fix the location of built plugins of demo/Polyhedron/, when CGAL is
|
||
configured with WITH\_demos=ON
|
||
- Fix a bug in test\_facet function of the incremental builder: the
|
||
function did not test if while a new facet makes a vertex manifold,
|
||
no other facet incident to that vertex breaks the manifold property.
|
||
|
||
### Triangulations and Delaunay Triangulations
|
||
|
||
#### 2D/3D Regular Triangulations
|
||
|
||
- Weighted\_point now has a constructor from Cartesian coordinates.
|
||
|
||
#### 3D Triangulations
|
||
|
||
- Regular\_triangulation\_3 : semi-static floating-point filters are
|
||
now used in its predicates, which can speed up its construction by a
|
||
factor of about 3 when
|
||
Exact\_predicates\_inexact\_constructions\_kernel is used.
|
||
- The class Regular\_triangulation\_filtered\_traits\_3 is deprecated,
|
||
the class Regular\_triangulation\_euclidean\_traits\_3 must be used
|
||
instead. The predicates of that traits will be filtered if the
|
||
kernel given as template parameter of that traits is itself a
|
||
filtered kernel.
|
||
- Triangulation\_hierarchy\_3 is now deprecated, and replaced by a
|
||
simpler CGAL::Fast\_location policy template parameter of
|
||
Delaunay\_triangulation\_3.
|
||
- The old version of remove() (enabled with
|
||
CGAL\_DELAUNAY\_3\_OLD\_REMOVE) has been deleted.
|
||
|
||
#### 3D Periodic Triangulations
|
||
|
||
- New demo: 3D periodic Lloyd algorithm.
|
||
- New functionality for Voronoi diagrams: dual of an edge and of a
|
||
vertex, volume and centroid of the dual of a vertex.
|
||
- The package can now be used with the 3D Alpha Shapes package to
|
||
compute periodic alpha shapes.
|
||
|
||
#### 3D Alpha shapes
|
||
|
||
- The class Weighted\_alpha\_shape\_euclidean\_traits\_3 is
|
||
deprecated, the class Regular\_triangulation\_euclidean\_traits\_3
|
||
must be used instead.
|
||
- The package can now be used together with the 3D Periodic
|
||
Triangulation package to compute periodic alpha shapes.
|
||
|
||
#### 2D/3D Triangulations, 2D Segment Delaunay Graph, 2D Apollonius Graph, and 3D Periodic Triangulations
|
||
|
||
- The constructor and insert function taking ranges now produce
|
||
structures whose iterator orders is now deterministic (same at each
|
||
run).
|
||
|
||
### Mesh Generation
|
||
|
||
#### 2D Mesh Generation
|
||
|
||
- The 2D mesh generator can now be used with a constrained Delaunay
|
||
triangulation with constraints hierarchy
|
||
(Constrained\_triangulation\_plus\_2).
|
||
- In some cases (refinement of a constrained edge that is on the
|
||
convex hull), the 2D mesh generator from CGAL-3.4 and CGAL-3.5 could
|
||
create invalid triangulations. This bug is now fixed.
|
||
|
||
#### 3D Mesh Generation
|
||
|
||
- The mesh generator has been enriched with an optimization phase to
|
||
provide 3D meshes with well shaped tetrahedra (and in particular no
|
||
slivers). The optimization phase involves four different
|
||
optimization processes: two global optimization processes (ODT and
|
||
Lloyd), a perturber and an exuder. Each of these processes can be
|
||
activated or not, and tuned to the users needs and to available
|
||
computer resources.
|
||
|
||
### Support library
|
||
|
||
#### CGAL ipelets
|
||
|
||
- Add support for version 7 of Ipe.
|
||
|
||
Release 3.5.1
|
||
-------------
|
||
|
||
Release date: December 2009
|
||
|
||
This is a bug fix release.
|
||
|
||
### Documentation
|
||
|
||
- Fixes in the documentation (the online documentation of CGAL-3.5 is
|
||
now based on CGAL-3.5.1).
|
||
- Fixes to the bibliographic references.
|
||
|
||
### Windows installer
|
||
|
||
- The Windows installer of CGAL-3.5.1 fixes an issue with downloading
|
||
of precompiled binaries of the external library TAUCS.
|
||
|
||
### Bug fixes in the following CGAL packages
|
||
|
||
#### AABB tree
|
||
|
||
- Fix a linker issue in do\_intersect(Bbox\_3,Bbox\_3).
|
||
- Fix compilation issue in do\_intersect(Bbox\_3,Ray\_3) when using
|
||
the parameters in this order.
|
||
|
||
#### 3D Mesh Generation
|
||
|
||
- Fix a bug in initial points construction of a polyhedral surface.
|
||
|
||
Release 3.5
|
||
-----------
|
||
|
||
Release date: October 2009
|
||
|
||
CGAL releases will now be published about every six months. As a
|
||
transition release, CGAL-3.5 has been developed during 9 months from the
|
||
release CGAL-3.4.
|
||
|
||
Version 3.5 differs from version 3.4 in the platforms that are supported
|
||
and in functionality. There have also been a number of bug fixes for
|
||
this release.
|
||
|
||
### General
|
||
|
||
- Additional supported platforms:
|
||
- GNU g++ 4.4 supported.
|
||
- Intel Compiler 11 supported on Linux
|
||
- Fixed ABI incompatibilities when mixing CGAL and Boost Program
|
||
Options on Windows/Visual C++ (the compilation flag
|
||
-D\_SECURE\_SCL=0 is not longer use in Debug mode).
|
||
|
||
### Geometry Kernels
|
||
|
||
#### 3D Spherical Geometry Kernel
|
||
|
||
- Add functionalities to manipulate circles, circular arcs and points
|
||
that belong to the same sphere.
|
||
|
||
### Polygons
|
||
|
||
#### 2D Regularized Boolean Set-Operations
|
||
|
||
- The polygon validation operations were enhanced and their interface
|
||
was improved. They are now offered as free functions and applied
|
||
properly.
|
||
|
||
#### 2D Straight Skeleton and Polygon Offsetting
|
||
|
||
- Updated the manual to document the new partial skeletons feature
|
||
(already in the code since 3.4)
|
||
|
||
### Arrangements
|
||
|
||
#### 2D Arrangements
|
||
|
||
- The member function is\_at\_infinity() of Arrangement\_2::Vertex was
|
||
replaced by the new function is\_at\_open\_boundary(). The former is
|
||
deprecated. While still supported in version 3.5, It will not be
|
||
supported in future releases. The member functions
|
||
boundary\_type\_in\_x() and boundary\_type\_in\_y() were permanently
|
||
replaced by the functions parameter\_space\_in\_x() and
|
||
parameter\_space\_in\_y(), respectively. The 2 new functions return
|
||
an enumeration of a new type, namely Arr\_parameter\_space.
|
||
- The tags in the geometry traits that indicate the type of boundary
|
||
of the embedding surface were replaced by the following new tags:
|
||
Arr\_left\_side\_tag Arr\_bottom\_side\_tag Arr\_top\_side\_tag
|
||
Arr\_right\_side\_tag In addition, the code was change, and now it
|
||
is possible not to indicate the tags at all. Default values are
|
||
assumed. This however will produce warning messages, and should be
|
||
avoided.
|
||
- All operations of the geometry traits-class were made 'const'. This
|
||
change was reflected in the code of this package and all other
|
||
packages that are based on it. Traits classes that maintain state,
|
||
should declare the data members that store the state as mutable.
|
||
|
||
#### Envelopes of Surfaces in 3D
|
||
|
||
- A few bugs in the code that computes envelopes were fixed, in
|
||
particular in the code that computes the envelopes of planes.
|
||
|
||
### Triangulations and Delaunay Triangulations
|
||
|
||
#### 3D Periodic Triangulations (new package)
|
||
|
||
- This package allows to build and handle triangulations of point sets
|
||
in the three dimensional flat torus. Triangulations are built
|
||
incrementally and can be modified by insertion or removal of
|
||
vertices. They offer point location facilities.
|
||
|
||
### Mesh Generation
|
||
|
||
#### Surface Reconstruction from Point Sets (new package)
|
||
|
||
- This CGAL package implements an implicit surface reconstruction
|
||
method: Poisson Surface Reconstruction. The input is an unorganized
|
||
point set with oriented normals.
|
||
|
||
#### 3D Mesh Generation (new package)
|
||
|
||
- This package generates 3 dimensional meshes. It computes isotropic
|
||
simplicial meshes for domains or multidomains provided that a domain
|
||
descriptor, able to answer queries from a few different types on the
|
||
domain, is given. In the current version, Mesh\_3 generate meshes
|
||
for domain described through implicit functional, 3D images or
|
||
polyhedral boundaries. The output is a 3D mesh of the domain volume
|
||
and conformal surface meshes for all the boundary and subdividing
|
||
surfaces.
|
||
|
||
### Geometry Processing
|
||
|
||
#### Triangulated Surface Mesh Simplification
|
||
|
||
- BREAKING API change in the passing of the visitor object.
|
||
- Fixed a bug in the link\_condition test
|
||
- Added a geometric test to avoid folding of facets
|
||
- Fixed a bug in the handling of overflow in the LindstromTurk
|
||
computations
|
||
- Updated the manual to account for the new visitor interface
|
||
|
||
#### Point Set Processing (new package)
|
||
|
||
- This packages implements a set of algorithms for analysis,
|
||
processing, and normal estimation and orientation of point sets.
|
||
|
||
### Spatial Searching and Sorting
|
||
|
||
#### AABB tree (new package)
|
||
|
||
- This package implements a hierarchy of axis-aligned bounding boxes
|
||
(a AABB tree) for efficient intersection and distance computations
|
||
between 3D queries and sets of input 3D geometric objects.
|
||
|
||
### Support Library
|
||
|
||
#### CGAL\_ipelets (new package):
|
||
|
||
- Object that eases the writing of Ipe's plugins that use CGAL.
|
||
Plugins for CGAL main 2D algorithm are provided as demo.
|
||
|
||
Release 3.4
|
||
-----------
|
||
|
||
Release date: January 2009
|
||
|
||
Version 3.4 differs from version 3.3.1 in the platforms that are
|
||
supported and in functionality. There have also been a number of bug
|
||
fixes for this release.
|
||
|
||
### General
|
||
|
||
- GNU g++ 4.3 supported. Support for g++ 3.3 is dropped.
|
||
- Visual 9 supported. Support for Visual 7 is dropped.
|
||
- Boost version 1.33 at least is now required.
|
||
- CGAL now depends on Boost.Threads, which implies to link against a
|
||
compiled part of Boost.
|
||
- The new macro CGAL\_NO\_DEPRECATED\_CODE can be defined to disable
|
||
deprecated code, helping users discover if they rely on code that
|
||
may be removed in subsequent releases.
|
||
- Assertion behaviour: It is not possible anymore to set the CONTINUE
|
||
mode for assertion failures. Functions that allow to change the
|
||
assertion behaviour are now declared in
|
||
`<CGAL/assertions_behaviour.h>`.
|
||
- Qt3 based demos are still there but the documentation has been
|
||
removed as the CGAL::Qt\_Widget will be deprecated.
|
||
- Qt4 based demos use the Qt GraphicsView framework and the
|
||
libQGLViewer.
|
||
|
||
### Installation
|
||
|
||
- install\_cgal has been replaced by CMake.
|
||
|
||
### Polynomial (new package)
|
||
|
||
- This package introduces a concept Polynomial\_d, a concept for
|
||
multivariate polynomials in d variables.
|
||
|
||
### Modular Arithmetic (new package)
|
||
|
||
- This package provides arithmetic over finite fields.
|
||
|
||
### Number Types
|
||
|
||
- the counter Interval\_nt::number\_of\_failures() has been removed,
|
||
replaced by a profiling counter enabled with CGAL\_PROFILE.
|
||
- Fix of a bug in CORE/Expr.h; as a consequence, the arrangement demo
|
||
works properly when handling arrangements of conics, for example,
|
||
when defining an arc with 5 points.
|
||
|
||
### 3D Spherical Geometry Kernel (new package)
|
||
|
||
- This package is an extension of the linear CGAL Kernel. It offers
|
||
functionalities on spheres, circles, circular arcs and line segments
|
||
in the 3D space.
|
||
|
||
### Linear Kernel
|
||
|
||
- We recommend that you use the object\_cast() function instead of
|
||
assign() to extract an object from a CGAL::Object, for efficiency
|
||
reasons.
|
||
- The Kernel archetypes provided by the 2D/3D linear kernel have been
|
||
removed.
|
||
- The deprecated linear kernel functors Construct\_supporting\_line\_2
|
||
and Construct\_supporting\_line\_3 have been removed.
|
||
- Ambiant\_dimension and Feature\_dimenison have been added to
|
||
retrieve the potentially compile-time dimension of a space or of an
|
||
object.
|
||
- barycenter() functions have been added.
|
||
- The geometric object Circle\_3 as well as predicates and
|
||
constructions have been added to the kernel
|
||
- The missing intersection/do\_intersect between Line\_3 and Line\_3
|
||
has been added as well.
|
||
|
||
### 3D Triangulations
|
||
|
||
- Removed the deprecated functions Cell:mirror\_index() and
|
||
Cell::mirror\_vertex().
|
||
- Derecursification of two functions that in some cases lead to stack
|
||
overflows
|
||
|
||
### 3D Nef Polyhedron
|
||
|
||
- n-ary union/intersection
|
||
- intersection with halfspace under standard kernel
|
||
- constructor for polylines
|
||
|
||
### CGAL and the Qt4 GraphicsView (new package)
|
||
|
||
- 2D CGAL Kernel objects and many data structures have can be rendered
|
||
in a QGraphicsView
|
||
|
||
### STL Extensions:
|
||
|
||
- The functor adaptors for argument binding and composition (bind\_\*,
|
||
compose, compose\_shared, swap\_\*, negate, along with the helper
|
||
functions set\_arity\_\* and Arity class and Arity\_tag typedefs)
|
||
which were provided by `<CGAL/functional.h>` have been removed.
|
||
Please use the better boost::bind mecanism instead. The concept
|
||
AdaptableFunctor has been changed accordingly such that only a
|
||
nested result\_type is required.
|
||
- The accessory classes Twotuple, Threetuple, Fourtuple and Sixtuple
|
||
are also deprecated (use CGAL::array instead).
|
||
- CGAL::Triple and CGAL::Quadruple are in the process of being
|
||
replaced by boost::tuple. As a first step, we strongly recommend
|
||
that you replace the direct access to the data members (.first,
|
||
.second, .third, .fourth), by the get<i>() member function;
|
||
and replace the make\_triple and make\_quadruple maker functions by
|
||
make\_tuple.
|
||
This way, in a further release, we will be able to switch to
|
||
boost::tuple more easily.
|
||
- The class CGAL::Uncertain<> has been documented. It is
|
||
typically used to report uncertain results for predicates using
|
||
interval arithmetic, and other filtering techniques.
|
||
|
||
### 2D Arrangements
|
||
|
||
- Changed the name of the arrangement package from Arrangement\_2 to
|
||
Arrangement\_on\_surface\_2 to reflect the potential capabilities of
|
||
the package to construct and maintain arrangements induced by curves
|
||
embedded on two dimensional surfaces in three space. Most of these
|
||
capabilities will become available only in future releases though.
|
||
- Enhanced the geometry traits concept to handle arrangements embedded
|
||
on surfaces. Each geometry-traits class must now define the
|
||
'Boundary\_category' tag.
|
||
- Fixed a bug in Arr\_polyline\_traits\_2.h, where the operator that
|
||
compares two curves failed to evaluate the correct result (true)
|
||
when the curves are different, but their graphs are identical.
|
||
- Permanently removed IO/Arr\_postscript\_file\_stream.h and
|
||
IO/Polyline\_2\_postscript\_file\_stream.h, as they depend on
|
||
obsolete features and LEDA.
|
||
- Fixed several bugs in the arrangement demo and enhanced it. e.g.,
|
||
fixed background color change, allowed vertex coloring , enabled
|
||
"smart" color selection, etc.
|
||
- Enhanced the arrangement demo with new features, such as allowing
|
||
the abortion of the merge function (de-select), updated the how-to
|
||
description, etc.
|
||
- Replace the functions CGAL::insert\_curve(), CGAL::insert\_curves(),
|
||
CGAL::insert\_x\_monotone\_curve(), and
|
||
CGAL::insert\_x\_monotone\_curves() with a single overloaded
|
||
function CGAL::insert(). The former 4 functions are now deprecated,
|
||
and may no longer be supported in future releases.
|
||
|
||
### Envelopes of Surfaces in 3D
|
||
|
||
- Fixed a bug in the computation of the envelope of unbounded planes
|
||
caused by multiple removals of vertices at infinity.
|
||
|
||
### 2D Regularized Boolean Set-Operations
|
||
|
||
- Fixed a bug in connect\_holes() that caused failures when connecting
|
||
holes touching the outer boundary.
|
||
- Fixed the concept GeneralPolygonSetTraits\_2. Introduced two new
|
||
concepts GpsTraitsGeneralPolygon\_2 and
|
||
GpsTraitsGeneralPolygonWithHoles\_2. Fixed the definition of the two
|
||
nested required types Polygon\_2 and Polygon\_with\_holes\_2 of the
|
||
GeneralPolygonSetTraits\_2 concept. They must model now the two new
|
||
concepts above.
|
||
- Added a default template parameter to 'General\_polygon\_set\_2' to
|
||
allow users to pass their specialized DCEL used to instantiate the
|
||
underlying arrangement.
|
||
- Enhanced the BOP demo to use multiple windows.
|
||
|
||
### 2D Minkowski Sums
|
||
|
||
- Fixed a few bugs in the approximate offset function, making it
|
||
robust to highly degenerate inputs.
|
||
- Fixed a bug in the exact Minkowski sum computation when processing
|
||
degenerate inputs that induce overlapping of contiguous segments in
|
||
the convolution cycles.
|
||
- Optimized the approximate offset function (reduced time consumption
|
||
up to a factor of 2 in some cases).
|
||
- Added functionality to compute the offset (or to approximate the
|
||
offset) of a Polygon\_with\_holes\_2 (and not just of a Polygon\_2).
|
||
- Added the functionality to compute (or to approximate) the inner
|
||
offset of a polygon.
|
||
|
||
Release 3.3.1
|
||
-------------
|
||
|
||
Release date: August 2007
|
||
|
||
This is a bug fix release.
|
||
|
||
### General
|
||
|
||
- Intel C++ 9 was wrongly recognized as unsupported by install\_cgal.
|
||
- Added autolink (for Visual C++) for the CGALImageIO and CGALPDB
|
||
libraries.
|
||
- Fixed bug in Memory\_sizer when using more than 4GB of memory
|
||
(64bit).
|
||
|
||
### Number Types
|
||
|
||
- Fixed bug in FPU rounding mode macros (affected only the alpha
|
||
architecture).
|
||
- Fixed bug in MP\_Float constructor from double for some particular
|
||
values.
|
||
- Fixed bug in to\_double(Lazy\_exact\_nt) sometimes returning NaN.
|
||
|
||
### Kernel
|
||
|
||
- Fixed forgotten derivation in Circular\_kernel\_2::Has\_on\_2
|
||
- Added some missing functions in Bbox\_3 compared to Bbox\_2.
|
||
|
||
### Skin Surface Meshing
|
||
|
||
- The new Skin Surface Meshing package had been forgotten in the list
|
||
of changes and the release announcement of CGAL 3.3: This package
|
||
allows to build a triangular mesh of a skin surface. Skin surfaces
|
||
are used for modeling large molecules in biological computing.
|
||
|
||
### Arrangements
|
||
|
||
- Fixed a bug in the Arrangement\_2 package in dual arrangement
|
||
representation for Boost graphs when reporting all halfedges of a
|
||
face.
|
||
- Fixed a bug in the Arrangement sweep-line when using a specific
|
||
polyline configuration.
|
||
- Fixed bug in Arrangement\_2 in walk along a line point location for
|
||
unbounded curves.
|
||
- Fixed bug in aggregated insertion to Arrangement\_2.
|
||
- Fixed bug in Arrangment\_2 class when inserting an unbounded curve
|
||
from an existing vertex.
|
||
- Fixed bug when dealing with a degenerate conic arc in
|
||
Arr\_conic\_traits\_2 of the Arrangment package, meaning a line
|
||
segment which is part of a degenerate parabola/hyperbola.
|
||
- Fixed bug in the Bezier traits-class: properly handle line segments.
|
||
properly handle comparison near a vertical tangency.
|
||
|
||
### 2D Polygon
|
||
|
||
- Fixed bug in degenerate case of Polygon\_2::is\_convex() for equal
|
||
points.
|
||
|
||
### 2D Triangulations
|
||
|
||
- Fixed bug in Regular\_triangulation\_2.
|
||
|
||
### 3D Triangulations
|
||
|
||
- Added a circumcenter() function in the default Cell type parameter
|
||
Triangulation\_ds\_cell\_base\_3, so that the .dual() member
|
||
function of Delaunay still work as before, without requiring the
|
||
explicit use of Triangulation\_cell\_base.
|
||
- Added missing operator->() to Facet\_circulator.
|
||
|
||
### Interpolation
|
||
|
||
- Fixed bug in Interpolation 3D about the normalization coefficient
|
||
initialization.
|
||
|
||
### 3D Boolean Operations on Nef Polyhedra
|
||
|
||
- Fixed bug in construction of Nef\_polyhedron\_3 from off-file. Now,
|
||
always the inner volume is selected.
|
||
- Fixed bug in conversion from Nef\_polyhedron\_3 to Polyhedron\_3.
|
||
Polyhedron\_3 was not cleared at the beginning.
|
||
- Fixed bug in Nef\_polyhedron\_3 in update of indexes for
|
||
construction of external structure.
|
||
|
||
### Third Party Libraries Shipped with CGAL
|
||
|
||
- TAUCS supports now 64 bits platforms.
|
||
- CAUTION: Since version 3.3.1, CGAL is no longer compatible with the
|
||
official release of TAUCS (currently 2.2). Make sure to use the
|
||
version modified by the CGAL project and available from the download
|
||
section of https://www.cgal.org.
|
||
|
||
Release 3.3
|
||
-----------
|
||
|
||
Release date: May 2007
|
||
|
||
Version 3.3 differs from version 3.2.1 in the platforms that are
|
||
supported and in functionality. There have also been a number of bug
|
||
fixes for this release.
|
||
|
||
Additional supported platforms
|
||
|
||
- GNU g++ 4.1 and 4.2
|
||
- Intel C++ compiler 9
|
||
- Microsoft Visual C++ compiler 8.0
|
||
|
||
The following platforms are no longer supported:
|
||
|
||
- Intel 8
|
||
|
||
CGAL now supports Visual C++ "Checked iterators" as well as the debug
|
||
mode of GNU g++'s STL (-D\_GLIBCXX\_DEBUG).
|
||
|
||
CGAL now works around the preprocessor macros 'min' and 'max' defined in
|
||
`<windows.h>` which were clashing with min/max functions.
|
||
|
||
### Installation
|
||
|
||
- On Windows the libraries built in Developer Studio now have names
|
||
which encode the compiler version, the runtime and whether it was
|
||
built in release or debug mode. The libraries to link against are
|
||
chosen with linker pragmas in header files.
|
||
- On all platforms but Windows shared and static versions of the
|
||
libraries are generated
|
||
|
||
### Manuals
|
||
|
||
- The Package Overview page now also hosts the precompiled demos.
|
||
|
||
### Algebraic Foundations
|
||
|
||
- Algebraic Foundations (new package)
|
||
This package defines what algebra means for CGAL, in terms of
|
||
concepts, classes and functions. The main features are: (i) explicit
|
||
concepts for interoperability of types (ii) separation between
|
||
algebraic types (not necessarily embeddable into the reals), and
|
||
number types (embeddable into the reals).
|
||
- Number Types
|
||
Fixed\_precision\_nt and Filtered\_exact number types have been
|
||
removed.
|
||
|
||
### Kernels
|
||
|
||
- 2D Circular Kernel
|
||
Efficiency improved through geometric filtering of predicates,
|
||
introduced with the filtered kernel
|
||
Filtered\_bbox\_circular\_kernel\_2<.>, and also chosen for
|
||
the predefined kernel Exact\_circular\_kernel\_2.
|
||
- Linear Kernel
|
||
Exact\_predicates\_exact\_constructions\_kernel memory and run-time
|
||
improvements through usage of lazy geometric constructions instead
|
||
of lazy arithmetic.
|
||
|
||
### Data Structures and Algorithms
|
||
|
||
- Surface Mesh Simplification (new package)
|
||
This package provides a mesh simplification framework using edge
|
||
collapse operations, and provides the Turk/Lindstrom simplification
|
||
algorithm.
|
||
- Skin Surface Meshing (new package)
|
||
This package allows to build a triangular mesh of a skin surface.
|
||
Skin surfaces are used for modeling large molecules in biological
|
||
computing. The surface is defined by a set of balls, representing
|
||
the atoms of the molecule, and a shrink factor that determines the
|
||
size of the smooth patches gluing the balls together.
|
||
- Estimation of Local Differential Properties (new package)
|
||
This package allows to compute local differential quantities of a
|
||
surface from a point sample
|
||
- Approximation of Ridges and Umbilics on Triangulated Surface Meshes
|
||
(new package)
|
||
This package enables the approximation of differential features on
|
||
triangulated surface meshes. Such curvature related features are
|
||
lines: ridges or crests, and points: umbilics.
|
||
- Envelopes of Curves in 2D (new package)
|
||
This package contains two sets of functions that construct the lower
|
||
and upper envelope diagram for a given range of bounded or unbounded
|
||
curves.
|
||
- Envelopes of Surfaces in 3D (new package)
|
||
This package contains two sets of functions that construct the lower
|
||
and upper envelope diagram for a given range of bounded or unbounded
|
||
surfaces. The envelope diagram is realized as a 2D arrangement.
|
||
- Minkowski Sums in 2D (new package)
|
||
This package contains functions for computing planar Minkowski sums
|
||
of two closed polygons, and for a polygon and a disc (an operation
|
||
also known as offsetting or dilating a polygon). The package also
|
||
contains an efficient approximation algorithm for the offset
|
||
computation, which provides a guaranteed approximation bound while
|
||
significantly expediting the running times w.r.t. the exact
|
||
computation procedure.
|
||
- Surface Mesh Parametrization
|
||
Added Jacobi and SSOR preconditioners to OpenNL solver, which makes
|
||
it much faster and more stable.
|
||
- 2D Arrangements
|
||
- Added support for unbounded curves.
|
||
- Added a traits class that supports bounded and unbounded linear
|
||
objects, namely lines, rays and line segments.
|
||
- Added traits classes that handle circular arcs based on the
|
||
circular kernel.
|
||
- Added a traits class that supports Bezier curves.
|
||
- Enhanced the traits class that supports rational functions to
|
||
handle unbounded (as well as bounded) arcs
|
||
- Added a free function called decompose() that produces the
|
||
symbolic vertical decomposition of a given arrangement,
|
||
performing a batched vertical ray-shooting query from all
|
||
arrangement vertices.
|
||
- Fixed a memory leak in the sweep-line code.
|
||
- Fixed a bug in computing the minor axis of non-degenerate
|
||
hyperbolas.
|
||
- Boolean Set Operations
|
||
- Added the DCEL as a default template parameter to the
|
||
General\_polygon\_set\_2 and Polygon\_set\_2 classes. This
|
||
allows users to extend the DCEL of the underlying arrangement.
|
||
- Added a function template called connect\_holes() that connects
|
||
the holes in a given polygon with holes, turning it into a
|
||
sequence of points, where the holes are connceted to the outer
|
||
boundary using zero-width passages.
|
||
- Added a non-const function member to General\_polygon\_set\_2
|
||
that obtains the underlying arrangement.
|
||
- 2D and 3D Triangulations
|
||
- The constructors and insert member functions which take an
|
||
iterator range perform spatial sorting in order to speed up the
|
||
insertion.
|
||
- Optimal Distances
|
||
- Polytope\_distance\_d: has support for homogeneous points;
|
||
bugfix in fast exact version.
|
||
- Bounding Volumes
|
||
- Min\_annulus\_d has support for homogeneous points; bugfix in
|
||
fast exact version.
|
||
|
||
### Support Library
|
||
|
||
- CGAL and the Boost Graph Library (BGL) (new package)
|
||
This package provides the glue layer for several CGAL data
|
||
structures such that they become models of the BGL graph concept.
|
||
- Spatial Sorting (new package)
|
||
This package allows to sort points and other objects along a Hilbert
|
||
curve which can improve the performance of algorithms like
|
||
triangulations. It is used by the constructors of the triangulation
|
||
package which have an iterator range of points as argument.
|
||
- Linear and Quadratic Programming Solver (new package)
|
||
This package contains algorithms for minimizing linear and convex
|
||
quadratic functions over polyhedral domains, described by linear
|
||
equations and inequalities.
|
||
|
||
Release 3.2.1
|
||
-------------
|
||
|
||
Release date: July 2006
|
||
|
||
This is a bug fix release
|
||
|
||
### Number Types
|
||
|
||
- Fix MP\_Float constructor which crashed for some values.
|
||
|
||
### Kernel
|
||
|
||
- Rename Bool to avoid a clash with a macro in X11 headers.
|
||
|
||
### Arrangement
|
||
|
||
- Derived the Arr\_segment\_traits\_2 Arrangement\_2 traits class from
|
||
the parameterized Kernel. This allows the use of this traits class
|
||
in an extended range of applications that require kernel objects and
|
||
operations on these objects beyond the ones required by the
|
||
Arrangement\_2 class itself.
|
||
- Fixed a compilation bug in the code that handles overlay of
|
||
arrangements instantiated with different DCEL classes.
|
||
- Fixed a couple of bugs in the implementation of the Trapezoidal RIC
|
||
point-location strategy
|
||
|
||
### Triangulation, Alpha Shapes
|
||
|
||
- Qualify calls to filter\_iterator with "CGAL::" to avoid overload
|
||
ambiguities with Boost's filter\_iterator.
|
||
|
||
### Surface Mesher
|
||
|
||
- Fixed a bug in iterators of the class template
|
||
Surface\_mesh\_complex\_2\_in\_triangulation\_3
|
||
|
||
### Surface Mesh Parametrisation
|
||
|
||
- Updated the precompiled taucs lib
|
||
|
||
### Kinetic Data Structures
|
||
|
||
- Fixed problems caused by old versions of gcc being confused by
|
||
operator! and operator int()
|
||
- Added point removal support to the Active\_objects\_vector
|
||
|
||
Release 3.2
|
||
-----------
|
||
|
||
Release date: May 2006
|
||
|
||
Version 3.2 differs from version 3.1 in the platforms that are supported
|
||
and in functionality. There have also been a number of bug fixes for
|
||
this release.
|
||
|
||
The following platforms are no longer supported:
|
||
|
||
- SunPro CC versions 5.4 and 5.5 on Solaris
|
||
- SGI Mips Pro
|
||
|
||
For Visual C++ the installation scripts choose the multi-threaded
|
||
dynamically linked runtime (/MD). Before it was the single-threaded
|
||
static runtime (/ML).
|
||
|
||
### Installation
|
||
|
||
- The install tool tries to find third party libraries at "standard"
|
||
locations.
|
||
- Installers for Apple, Windows, and rpms.
|
||
|
||
### Manuals
|
||
|
||
- User and Reference manual pages of a package are in the same chapter
|
||
|
||
### Kernels
|
||
|
||
- 2D Circular Kernel (new package)
|
||
This package is an extension of the linear CGAL Kernel. It offers
|
||
functionalities on circles, circular arcs and line segments in the
|
||
plane.
|
||
|
||
### Data Structures and Algorithms
|
||
|
||
- 2D Regularized Boolean Set-Operations (new package)
|
||
This package consists of the implementation of Boolean
|
||
set-operations on point sets bounded by weakly x-monotone curves in
|
||
2-dimensional Euclidean space. In particular, it contains the
|
||
implementation of regularized Boolean set-operations, intersection
|
||
predicates, and point containment predicates.
|
||
- 2D Straight Skeleton and Polygon Offsetting (new package)
|
||
This package implements an algorithm to construct a halfedge data
|
||
structure representing the straight skeleton in the interior of 2D
|
||
polygons with holes and an algorithm to construct inward offset
|
||
polygons at any offset distance given a straight skeleton.
|
||
- 2D Voronoi Diagram Adaptor (new package)
|
||
This package provides an adaptor that adapts a 2-dimensional
|
||
triangulated Delaunay graph to the corresponding Voronoi diagram,
|
||
represented as a doubly connected edge list (DCEL) data structure.
|
||
The adaptor has the ability to automatically eliminate, in a
|
||
consistent manner, degenerate features of the Voronoi diagram, that
|
||
are artifacts of the requirement that Delaunay graphs should be
|
||
triangulated even in degenerate configurations. Depending on the
|
||
type of operations that the underlying Delaunay graph supports, the
|
||
adaptor allows for the incremental or dynamic construction of
|
||
Voronoi diagrams and can support point location queries.
|
||
- 3D Surface Mesher (new package)
|
||
This package provides functions to generate surface meshes that
|
||
interpolate smooth surfaces. The meshing algorithm is based on
|
||
Delaunay refinement and provides some guarantees on the resulting
|
||
mesh: the user is able to control the size and shape of the mesh
|
||
elements and the accuracy of the surface approximation. There is no
|
||
restriction on the topology and number of components of input
|
||
surfaces. The surface mesher may also be used for non smooth
|
||
surfaces but without guarantee.
|
||
|
||
Currently, implementations are provided for implicit surfaces
|
||
described as the zero level set of some function and surfaces
|
||
described as a gray level set in a three-dimensional image.
|
||
|
||
- 3D Surface Subdivision Methods (new package)
|
||
Subdivision methods recursively refine a control mesh and generate
|
||
points approximating the limit surface. This package consists of
|
||
four popular subdivision methods and their refinement hosts.
|
||
Supported subdivision methods include Catmull-Clark, Loop, Doo-Sabin
|
||
and sqrt(3) subdivisions. Their respective refinement hosts are PQQ,
|
||
PTQ, DQQ and sqrt(3) refinements. Variations of those methods can be
|
||
easily extended by substituting the geometry computation of the
|
||
refinement host.
|
||
- Planar Parameterization of Triangulated Surface Meshes (new
|
||
package)
|
||
Parameterizing a surface amounts to finding a one-to-one mapping
|
||
from a suitable domain to the surface. In this package, we focus on
|
||
triangulated surfaces that are homeomorphic to a disk and on
|
||
piecewise linear mappings into a planar domain. This package
|
||
implements some of the state-of-the-art surface mesh
|
||
parameterization methods, such as least squares conformal maps,
|
||
discrete conformal map, discrete authalic parameterization, Floater
|
||
mean value coordinates or Tutte barycentric mapping.
|
||
- Principal Component Analysis (new package)
|
||
This package provides functions to compute global informations on
|
||
the shape of a set of 2D or 3D objects such as points. It provides
|
||
the computation of axis-aligned bounding boxes, centroids of point
|
||
sets, barycenters of weighted point sets, as well as linear least
|
||
squares fitting for point sets in 2D, and point sets as well as
|
||
triangle sets in 3D.
|
||
- 2D Placement of Streamlines (new package)
|
||
Visualizing vector fields is important for many application domains.
|
||
A good way to do it is to generate streamlines that describe the
|
||
flow behaviour. This package implements the "Farthest Point Seeding"
|
||
algorithm for placing streamlines in 2D vector fields. It generates
|
||
a list of streamlines corresponding to an input flow using a
|
||
specified separating distance. The algorithm uses a Delaunay
|
||
triangulation to model objects and adress different queries, and
|
||
relies on choosing the centers of the biggest empty circles to start
|
||
the integration of the streamlines.
|
||
- Kinetic Data Structures (new package)
|
||
Kinetic data structures allow combinatorial structures to be
|
||
maintained as the primitives move. The package provides
|
||
implementations of kinetic data structures for Delaunay
|
||
triangulations in two and three dimensions, sorting of points in one
|
||
dimension and regular triangulations in three dimensions. The
|
||
package supports exact or inexact operations on primitives which
|
||
move along polynomial trajectories.
|
||
- Kinetic Framework (new package)
|
||
Kinetic data structures allow combinatorial geometric structures to
|
||
be maintained as the primitives move. The package provides a
|
||
framework to ease implementing and debugging kinetic data
|
||
structures. The package supports exact or inexact operations on
|
||
primitives which move along polynomial trajectories.
|
||
- Smallest Enclosing Ellipsoid (new package)
|
||
This algorithm is new in the chapter Geometric Optimisation.
|
||
- 2D Arrangement (major revision)
|
||
This package can be used to construct, maintain, alter, and display
|
||
arrangements in the plane. Once an arrangement is constructed, the
|
||
package can be used to obtain results of various queries on the
|
||
arrangement, such as point location. The package also includes
|
||
generic implementations of two algorithmic frameworks, that are,
|
||
computing the zone of an arrangement, and line-sweeping the plane,
|
||
the arrangements is embedded on.
|
||
|
||
Arrangements and arrangement components can also be extended to
|
||
store additional data. An important extension stores the
|
||
construction history of the arrangement, such that it is possible to
|
||
obtain the originating curve of an arrangement subcurve.
|
||
|
||
- Geometric Optimisation (major revision)
|
||
The underlying QP solver which is the foundation for several
|
||
algorithms in the Geometric Optimisation chapter has been completely
|
||
rewritten.
|
||
- 3D Triangulation (new functionality)
|
||
Regular\_triangulation\_3 now offers vertex removal.
|
||
|
||
Release 3.1
|
||
-----------
|
||
|
||
Release date: December 2004
|
||
|
||
Version 3.1 differs from version 3.0 in the platforms that are supported
|
||
and in functionality. There have also been a number of bug fixes for
|
||
this release.
|
||
|
||
Additional supported platforms:
|
||
|
||
- MS Visual C++, version 7.3. and 8.0
|
||
- Intel 8.0
|
||
- SunPro CC versions 5.4 and 5.5 on Solaris
|
||
- GNU g++ versions 3.4 on Linux, Solaris, Irix, cygwin, FreeBSD, and
|
||
MacOS X
|
||
- Darwin (MacOS X) and IA64/Linux support.
|
||
|
||
The following platforms are no longer supported:
|
||
|
||
- MS Visual C++, version 7.0
|
||
|
||
The following functionality has been added or changed:
|
||
|
||
|
||
### All
|
||
|
||
- The CORE 1.7 library for exact real arithmetic.
|
||
- Updated GMP to 4.1.3.
|
||
- Added Mpfr a library for multiple-precision floating-point
|
||
computations with exact rounding.
|
||
- Added Boost 1.32.0 (only include files).
|
||
|
||
### Installation
|
||
|
||
- new option --disable-shared to omit building libCGAL.so.
|
||
|
||
### Manuals
|
||
|
||
- Merged all major manuals in one multi-part manual, which provides
|
||
now cross-links between the CGAL Kernel, the CGAL Basic Library, and
|
||
the CGAL Support Library HTML manuals.
|
||
- Improved layout.
|
||
|
||
### Kernels
|
||
|
||
- Improved efficiency of filtered kernels.
|
||
- More predicates and constructions.
|
||
|
||
### Basic Library
|
||
|
||
- 2D Segment Voronoi Diagram (new package)
|
||
A data structure for Voronoi diagrams of segments in the plane under
|
||
the Euclidean metric. The Voronoi edges are arcs of straight lines
|
||
and parabolas. The algorithm provided in this package is
|
||
incremental.
|
||
- 2D Conforming Triangulations and Meshes (new package)
|
||
An implementation of Shewchuk's algorithm to construct conforming
|
||
triangulations and 2D meshes.
|
||
- 3D Boolean Operations on Nef Polyhedra (new package)
|
||
A new class (Nef\_polyhedron\_3) representing 3D Nef polyhedra, a
|
||
boundary representation for cell-complexes bounded by halfspaces
|
||
that supports boolean operations and topological operations in full
|
||
generality including unbounded cells, mixed dimensional cells (e.g.,
|
||
isolated vertices and antennas). Nef polyhedra distinguish between
|
||
open and closed sets and can represent non-manifold geometry.
|
||
- 2D and Surface Function Interpolation (new package)
|
||
This package implements different methods for scattered data
|
||
interpolation: Given measures of a function on a set of discrete
|
||
data points, the task is to interpolate this function on an
|
||
arbitrary query point. The package further offers functions for
|
||
natural neighbor interpolation.
|
||
- Planar Nef polyhedra embedded on the sphere (new package)
|
||
A new class (Nef\_polyhedron\_S2) designed and supported mainly to
|
||
represent sphere neighborhoods around vertices of the three-
|
||
dimensional Nef polyhedra.
|
||
- Box\_intersection\_d (new package)
|
||
A new efficient algorithm for finding all intersecting pairs for
|
||
large numbers of iso-oriented boxes, i.e., typically these will be
|
||
bounding boxes of more complicated geometries. Useful for (self-)
|
||
intersection tests of surfaces etc.
|
||
- 2D Snap Rounding (new package)
|
||
Snap Rounding is a well known method for converting
|
||
arbitrary-precision arrangements of segments into a fixed-precision
|
||
representation. In the study of robust geometric computing, it can
|
||
be classified as a finite precision approximation technique.
|
||
Iterated Snap Roundingis a modification of Snap Rounding in which
|
||
each vertex is at least half-the-width-of-a-pixel away from any
|
||
non-incident edge. This package supports both methods.
|
||
- 3D Triangulations
|
||
- Triangulation\_3: added operator==(),removed push\_back() and
|
||
copy\_triangulation().
|
||
- Delaunay\_3 : added nearest\_vertex(), move\_point(),
|
||
vertices\_in\_conflict().
|
||
- Regular\_3 : added filtered traits class, and
|
||
nearest\_power\_vertex().
|
||
- Planar\_map and Arrangement\_2
|
||
- The interface of the two traits functions that compute the
|
||
intersection of two given curves changed. The functions
|
||
nearest\_intersection\_to\_right() and
|
||
nearest\_intersection\_to\_left() return an object of type
|
||
CGAL::Object that represents either an empty intersection, a
|
||
point, or an overlapping subcurve.
|
||
- Requirements to define two binary tags were added to the traits
|
||
concept of the Planar\_map as follows: *Has\_left\_category* -
|
||
indicates whether the functions
|
||
curves\_compare\_y\_at\_x\_left() and
|
||
nearest\_intersection\_to\_left() are implemented in the traits
|
||
model. *Has\_reflect\_category* - indicates whether the
|
||
functions point\_reflect\_in\_x\_and\_y() and
|
||
curve\_reflect\_in\_x\_and\_y() are implemented in the traits
|
||
model. They can be used as an alternative to the two function in
|
||
the previous item.
|
||
- A new constructor of the Segment\_cached\_2 type that represents
|
||
a segment in the Arr\_segment\_cached\_traits\_2 traits class
|
||
was introduced. The new constructor accepts the segment
|
||
endpoints as well as the coefficients of the underlying line.
|
||
- A new version of the conic-arc traits, based on CORE version 1.7
|
||
was introduced. This new traits class makes use of CORE's
|
||
rootOf() operator to compute the intersection points in the
|
||
arrangement, making its code much simpler and more elegant than
|
||
the previous version. In addition, new constructors for conic
|
||
arcs are provided. The new traits class usually performs about
|
||
30% faster than the version included in CGAL 3.0
|
||
- The traits class that handles continuous piecewise linear
|
||
curves, namely Arr\_polyline\_traits\_2, was rewritten. The new
|
||
class is parametrized with a traits class that handles segments,
|
||
say Segment\_traits. The polyline curve defined within the
|
||
Arr\_polyline\_traits\_2 class is implemented as a vector of
|
||
segments of type Segment\_traits::Curve\_2.
|
||
- A meta traits class, namely Arr\_curve\_data\_traits\_2, that
|
||
extends the curve type of the planar-map with arbitrary
|
||
additional data was introduced. It should be instantiated with a
|
||
regular traits-class and a class that contains all extraneous
|
||
data associated with a curve.
|
||
- The class that represents the trapezoidal-decomposition point
|
||
location strategy was renamed to
|
||
Pm\_trapezoid\_ric\_point\_location.
|
||
- The Arrangement demo was rewritten. It covers many more
|
||
features, has a much better graphical user interface, and comes
|
||
with online documentation.
|
||
- Few bugs in the sweep-line module related to overlapping
|
||
vertical segments were fixed. This module is used by the
|
||
aggregate insert method that inserts a collection of curves at
|
||
once.
|
||
- Triangulation\_2
|
||
- added a filtered trait class in the regular triangulation
|
||
- added split and join operations in the triangulation data
|
||
structure class
|
||
- Alpha\_shapes\_3
|
||
- major changes in the implementation of the class
|
||
Alpha\_shapes\_3.
|
||
- New implementation results in a true GENERAL mode allowing null
|
||
and negative alpha-values. It also fixed the edges
|
||
classification bug and introduces a classification of vertices.
|
||
- Min\_ellipse\_2
|
||
- made access to approximate double representation public
|
||
- fixed bugs in conversion to double representation
|
||
- added `is_circle()` method
|
||
- minor performance improvements
|
||
- Min\_sphere\_of\_spheres\_d:
|
||
- The models
|
||
`Min_sphere_of_spheres_d_traits_2<K,FT,UseSqrt,Algorithm>`,
|
||
`Min_sphere_of_spheres_d_traits_3<K,FT,UseSqrt,Algorithm>`, and
|
||
`Min_sphere_of_spheres_d_traits_d<K,FT,Dim,UseSqrt,Algorithm>`
|
||
of concept `MinSphereOfSpheresTraits` now represent a sphere as
|
||
a `std::pair<Point,Radius>` (and not any more as a
|
||
`CGAL::Weighted_point<Point,Weight>`)
|
||
- Internal code cleanup; in particular, implementation details
|
||
don't pollute the namespace CGAL anymore
|
||
- Polyhedron\_3
|
||
- New Tutorial on CGAL Polyhedron for Subdivision Algorithms with
|
||
interactive demo viewer in source code available.
|
||
- Added example program for efficient self-intersection test. -
|
||
Added small helper functions, such as vertex\_degree,
|
||
facet\_degree, edge\_flip, and is\_closed.
|
||
- Apollonius Graph (Voronoi of Circles)
|
||
- Reduced memory requirements by approximately a factor of two.
|
||
|
||
Release 3.0.1
|
||
-------------
|
||
|
||
Release date: February 2004
|
||
|
||
This is a bug-fix release. No new features have been added in 3.0.1.
|
||
Here is the list of bug-fixes.
|
||
|
||
### Polyhedral Surface
|
||
|
||
- Fixed wrong include files for output support. Added example.
|
||
|
||
### Planar\_map
|
||
|
||
- Fixed the so called "Walk-along-a-line" point-location strategy to
|
||
correctly handle a degenerate case.
|
||
|
||
### 2D Triangulation
|
||
|
||
- added missing figure in html doc
|
||
- in Line\_face\_circulator\_2.h:
|
||
Fixed changes made to support handles with a typedef to iterator.
|
||
The fix concerns operator== and !=.
|
||
|
||
### Alpha\_shapes\_3
|
||
|
||
- fixed classify member function for edges.
|
||
|
||
### Number types
|
||
|
||
- Lazy\_exact\_nt:
|
||
- added the possibility to select the relative precision of
|
||
`to_double()` (by default 1e-5). This should fix reports that
|
||
some circumcenters computations have poor coordinates, e.g.
|
||
nan).
|
||
- when exact computation is triggered, the interval is recomputed,
|
||
this should speed up some kinds of computations.
|
||
- `to_interval(Quotient<MP_Float>)`: avoid spurious overflows.
|
||
|
||
### Kernel
|
||
|
||
- missing acknowledgment in the manual and minor clarification of
|
||
`intersection()` documentation.
|
||
|
||
Release 3.0
|
||
-----------
|
||
|
||
Release date: October 2003
|
||
|
||
Version 3.0 differs from version 2.4 in the platforms that are supported
|
||
and in functionality. There have also been a number of bug fixes for
|
||
this release.
|
||
|
||
The license has been changed to either the LGPL (GNU Lesser General
|
||
Public License v2.1) or the QPL (Q Public License v1.0) depending on
|
||
each package. So CGAL remains free of use for you, if your usage meets
|
||
the criteria of these licenses, otherwise, a commercial license has to
|
||
be purchased from GeometryFactory.
|
||
|
||
Additional supported platforms:
|
||
|
||
- MS Visual C++, version 7.1.
|
||
- SunPro CC versions 5.4 and 5.5 on Solaris
|
||
- GNU g++ versions 3.2 and 3.3 on Linux, Solaris, Irix, cygwin, and
|
||
FreeBSD.
|
||
- MipsPRO CC 7.30 and 7.40 with both the n32 and n64 ABIs.
|
||
|
||
The following platforms are no longer supported:
|
||
|
||
- MS Visual C++, version 6.
|
||
- GNU g++ 2.95.2 (2.95.3 is still supported)
|
||
- Kai C++ and Borland C++, all versions
|
||
|
||
The following functionality has been added or changed:
|
||
|
||
**All**
|
||
|
||
- The CORE library for exact computations is now distributed as part
|
||
of CGAL as well.
|
||
|
||
### Kernels
|
||
|
||
- 3 typedefs have been added to ease the choice of a robust and fast
|
||
kernel:
|
||
- Exact\_predicates\_inexact\_constructions\_kernel
|
||
- Exact\_predicates\_exact\_constructions\_kernel
|
||
- Exact\_predicates\_exact\_constructions\_kernel\_with\_sqrt
|
||
- Progress has been made towards the complete adaptability and
|
||
extensibility of our kernels.
|
||
- New faster Triangle\_3 intersection test routines.
|
||
*(see Erratum)*
|
||
- Added a Kernel concept archetype to check that generic algorithms
|
||
don't use more functionality than they should.
|
||
- A few more miscellaneous functions.
|
||
|
||
### Basic Library
|
||
|
||
- 2D Apollonius Graph (new package)
|
||
Algorithms for computing the Apollonius graph in two dimensions. The
|
||
Apollonius graph is the dual of the Apollonius diagram, also known
|
||
as the additively weighted Voronoi diagram. The latter can be
|
||
thought of as the Voronoi diagram of a set of circles under the
|
||
Euclidean metric, and it is a generalization of the standard Voronoi
|
||
diagram for points. The algorithms provided are dynamic.
|
||
- dD Min Sphere of Spheres (new package)
|
||
Algorithms to compute the smallest enclosing sphere of a given set
|
||
of spheres in R<sup>d</sup>. The package provides an algorithm with
|
||
maximal expected running time *O(2<sup>O(d)</sup> n)* and a fast and
|
||
robust heuristic (for dimension less than 30).
|
||
- Spatial Searching (new package)
|
||
Provides exact and approximate distance browsing in a set of points
|
||
in *d*-dimensional space using implementations of algorithms
|
||
supporting:
|
||
- both nearest and furthest neighbor searching
|
||
- both exact and approximate searching
|
||
- (approximate) range searching
|
||
- (approximate) *k*-nearest and *k*-furthest neighbor searching
|
||
- (approximate) incremental nearest and incremental furthest
|
||
neighbor searching
|
||
- query items representing points and spatial objects.
|
||
- **Kd-tree**
|
||
this package is deprecated, its documentation is removed. It is
|
||
replaced by the Spatial Searching package.
|
||
- Largest\_empty\_rectangle\_2
|
||
Given a set of points P in the plane, the class
|
||
Largest\_empty\_iso\_rectangle\_2 is a data structure that maintains
|
||
an iso-rectangle with the largest area among all iso-rectangles that
|
||
are inside a given iso-rectangle bounding box, and that do not
|
||
contain any point of the point set P.
|
||
- 2D Triangulation and 3D Triangulation
|
||
- The classes Triangulation\_data\_structure\_2 (and 3), which
|
||
implements the data structure for 2D triangulation class, now
|
||
makes use of CGAL::Compact\_container (see Support Library
|
||
section below).
|
||
- The triangulation classes use a Rebind mecanism to provide the
|
||
full flexibility on Vertex and Face base classes. This means
|
||
that it is possible for the user to derive its own Face of
|
||
Vertex base class, adding a functionality that makes use of
|
||
types defined by the triangulation data structure like
|
||
Face\_handle or Vertex\_handle.
|
||
- New classes Triangulation\_vertex\_base\_with\_info\_2 (and 3)
|
||
and Triangulation\_face\_base\_with\_info\_2 (and 3) to make
|
||
easier the customisation of base classes in most cases.
|
||
- 2D Triangulation
|
||
- Regular triangulation provides an easy access to hidden points.
|
||
- The Triangulation\_hierarchy\_2, which provide an efficient
|
||
location data structure, can now be used with any 2D
|
||
triangulation class plugged in (including Regular
|
||
triangulations).
|
||
- 3D Triangulation
|
||
- faster vertex removal function in Delaunay\_triangulation\_3.
|
||
- Delaunay\_triangulation\_3 is now independent of the order of
|
||
insertions of the points (in case of degenerate cosphericity).
|
||
- Regular\_triangulation\_3 now hides vertices (and updates
|
||
itself) when inserting a coinciding point with greater weight.
|
||
This required a new predicate.
|
||
- deprecated functions: copy\_triangulation(), push\_back(),
|
||
set\_number\_of\_vertices().
|
||
- Triangulation\_3 now gives non-const access to the data
|
||
structure.
|
||
- Interval Skip List (new package)
|
||
An interval skip list is a data strucure for finding all intervals
|
||
that contain a point, and for stabbing queries, that is for
|
||
answering the question whether a given point is contained in an
|
||
interval or not.
|
||
- Planar Maps and Arrangements
|
||
The changes concern mainly the traits classes.
|
||
1. New traits hierarchy and interface: The set of requirements was
|
||
made sound and complete. A couple of requirements were
|
||
eliminated, few others were redefined, and some were renamed. A
|
||
hierarchy of three traits classes for the Planar\_map\_2,
|
||
Planar\_map\_with\_intersections\_2, and Arrangement\_2 types
|
||
was established to include only the necessary requirements at
|
||
each level. It was determined that for the aggregate insertion-
|
||
operation based on a sweep-line algorithm only a subset of the
|
||
requirements is needed. Preconditions were added where
|
||
appropriate to tighten the requirements further.
|
||
|
||
The following functions have been renamed:
|
||
|
||
- point\_is\_same() renamed to point\_equal()
|
||
- curve\_is\_same() renamed to curve\_equal()
|
||
- curve\_is\_in\_x\_range() renamed to point\_in\_x\_range()
|
||
- curve\_compare\_at\_x() renamed to
|
||
curves\_compare\_y\_at\_x() Furthermore, a precondition has
|
||
been added that the reference point is in the x-range of
|
||
both curves.
|
||
- curve\_compare\_at\_x\_right() renamed to
|
||
curves\_compare\_y\_at\_x\_to\_right(). Furthermore, a
|
||
precondition has been added that both curves are equal at
|
||
the reference point and defined to its right.
|
||
- curve\_compare\_at\_x\_left() renamed to
|
||
curves\_compare\_y\_at\_x\_to\_left(). Furthermore, a
|
||
precondition has been added that both curves are equal at
|
||
the reference point and defined to its right.
|
||
- curve\_get\_point\_status() renamed to
|
||
curve\_compare\_y\_at\_x(). Furthermore, a precondition has
|
||
been added that the point is in the x-range of the curve.
|
||
Consequently, the function now returns a Comparison\_result
|
||
(instead of a special enum).
|
||
- make\_x\_monotone() renamed to curve\_make\_x\_monotone()
|
||
See more details below.
|
||
- curve\_flip() renamed to curve\_opposite()
|
||
|
||
The following functions have been removed:
|
||
|
||
- curve\_is\_between\_cw()
|
||
- point\_to\_left()
|
||
- point\_to\_right()
|
||
- is\_x\_monotone()
|
||
- point\_reflect\_in\_x\_and\_y()
|
||
- curve\_reflect\_in\_x\_and\_y()
|
||
- do\_intersect\_to\_right()
|
||
- do\_intersect\_to\_left()
|
||
|
||
Most functions, are required by the PlanarMapTraits\_2 concept,
|
||
except for the make\_x\_monotone(),
|
||
nearest\_intersection\_to\_right(),
|
||
nearest\_intersection\_to\_left(), curves\_overlap() and
|
||
curve\_opposite(). PlanarMapWithIntersectionsTraits\_2 requires
|
||
all these functions, except curve\_opposite(), needed only by
|
||
the ArrangementTraits\_2 concept.
|
||
|
||
Furthermore, the two functions curve\_compare\_at\_x\_left() and
|
||
nearest\_intersection\_to\_left() can be omitted, if the two
|
||
functions point\_reflect\_in\_x() and curve\_reflect\_in\_x()
|
||
are implemented. Reflection can be avoided, if the two \_left
|
||
functions are supplied.
|
||
|
||
2. The type X\_curve\_2 of the PlanarMapWithIntersectionsTraits\_2
|
||
concept was renamed to X\_monotone\_curve\_2, and the
|
||
distinction between this type and the Curve\_2 type was made
|
||
firm. The method is\_x\_monotone() of the
|
||
PlanarMapWithIntersectionsTraits\_2 concept was removed. The
|
||
related method curve\_make\_x\_monotone() is now called for each
|
||
input curve of type Curve\_2 when curves are inserted into a
|
||
Planar\_map\_with\_intersections\_2 to subdivide the input curve
|
||
into x-monotone sub-curves (and in case the curve is already
|
||
x-monotone, this function is responsible for casting it to an
|
||
x-monotone curve).
|
||
3. New and improved traits classes:
|
||
4. Conic traits - Arr\_conic\_traits\_2 Support finite segments of
|
||
ellipses, hyperbolas and parabolas, as well as line segments.
|
||
The traits require an exact real number- type, such as
|
||
leda\_real or CORE::Expr.
|
||
5. Segment cached traits - Arr\_segment\_cached\_traits\_2 This
|
||
class uses an improved representation for segments that helps
|
||
avoiding cascaded computations, thus achieving faster running
|
||
times. To work properly, an exact rational number-type should be
|
||
used.
|
||
6. Polyline traits - Arr\_polyline\_traits\_2 The polyline traits
|
||
class has been reimplemented to work in a more efficient,
|
||
generic manner. The new class replaces the obsolete
|
||
Arr\_polyline\_traits class. It is parameterized with a segment
|
||
traits class.
|
||
7. Hyperbola and segment traits - Arr\_hyper\_segment\_traits\_2
|
||
Supports line segments and segments of canonical hyperbolas.
|
||
This is the type of curves that arise when projecting segments
|
||
in three-space rotationally around a line onto a plane
|
||
containing the line. Such projections are often useful in
|
||
CAD/CAM problems.
|
||
8. Removed old traits class:
|
||
- The models of the PlanarMapWithIntersectionsTraits\_2
|
||
concept below became obsolete, as the new conic traits,
|
||
namely Arr\_conic\_traits\_2, supports the same
|
||
functionality and is much more efficient.
|
||
- Arr\_circles\_real\_traits
|
||
- Arr\_segment\_circle\_traits
|
||
- The segment traits class and the new polyline traits class
|
||
were reimplemented using standard CGAL-kernel calls. This
|
||
essentially eliminated the corresponding leda traits
|
||
classes, namely:
|
||
- Pm\_leda\_segment\_traits\_2
|
||
- Arr\_leda\_segment\_traits\_2
|
||
- Arr\_leda\_polyline\_traits
|
||
|
||
With the use of the Leda\_rat\_kernel new external package
|
||
the same functionality can be achieved with less overhead
|
||
and more efficiency.
|
||
9. Sweep Line
|
||
- The Sweep\_line\_2 package was reimplemented. As a
|
||
consequence it is much more efficient, its traits is tighter
|
||
(namely neither the two \_left nor the reflection functions
|
||
are required), and its interface has changed a bit.
|
||
1. The following global functions have been removed:
|
||
- sweep\_to\_produce\_subcurves\_2()
|
||
- sweep\_to\_produce\_points\_2()
|
||
- sweep\_to\_construct\_planar\_map\_2()
|
||
|
||
Instead, the public methods of the Sweep\_line\_2 class
|
||
listed below were introduced:
|
||
- get\_subcurves() - Given a container of curves, this
|
||
function returns a list of curves that are created
|
||
by intersecting the input curves.
|
||
- get\_intersection\_points() - Given a range of
|
||
curves, this function returns a list of points that
|
||
are the intersection points of the curves.
|
||
- get\_intersecting\_curves() - Given a range of
|
||
curves, this function returns an iterator to the
|
||
beginning of a range that contains the list of
|
||
curves for each intersection point between any two
|
||
curves in the specified range.
|
||
|
||
2. It is possible to construct a planar map with
|
||
intersections (or an arrangement) by inserting a range
|
||
of curves into an empty map. This will invoke the
|
||
sweep-line process to construct the map more
|
||
efficiently.
|
||
- New interface functions to the
|
||
Planar\_map\_with\_intersections\_2 class. The
|
||
Planar\_map\_with\_intersections\_2 class maintains a planar
|
||
map of input curves that possibly intersect each other and
|
||
are not necessarily x-monotone. If an input curve, or a set
|
||
of input curves, are known to be x-monotone and pairwise
|
||
disjoint, the new functions below can be used to insert them
|
||
into the map efficiently.
|
||
|
||
- Polyhedral Surface
|
||
- The old design that was deprecated since CGAL 2.3 has been
|
||
removed.
|
||
- Class `Polyhedron_incremental_builder_3`:
|
||
- Renamed local enum `ABSOLUTE` to `ABSOLUTE_INDEXING`, and
|
||
`RELATIVE` to `RELATIVE_INDEXING` to avoid conflicts with
|
||
similarly named macros of another library.
|
||
- Changed member functions `add_vertex()`, `begin_facet()`,
|
||
and `end_facet()` to return useful handles.
|
||
- Added `test_facet()` to check facets for validity before
|
||
adding them.
|
||
- Added `vertex( size_t i)` to return `Vertex_handle` for
|
||
index `i`.
|
||
- Halfedge Data Structure
|
||
- The old design that was deprecated since CGAL 2.3 has been
|
||
removed.
|
||
|
||
### Support Library
|
||
|
||
- New container class Compact\_container, which (roughly) provides the
|
||
flexibility of std::list, with the memory compactness of
|
||
std::vector.
|
||
- Geomview\_stream: added a function gv.draw\_triangles(InputIterator
|
||
begin, InputIterator end) which draws a set of triangles much more
|
||
quickly than one by one.
|
||
- Number types:
|
||
- number types are now required to provide a function:
|
||
std::pair<double, double> to\_interval(const NT &).
|
||
- number types are now required to provide mixed operators with
|
||
"int".
|
||
- CLN support removed.
|
||
- faster square() for MP\_Float.
|
||
- added Gmp\_q.
|
||
- Qt\_widget:
|
||
- New classes:
|
||
- Qt\_help\_window: provides a simple way to show some helpful
|
||
information about a demo as an HTML page.
|
||
- Qt\_widget\_history: provides basic functionality to
|
||
manipulate intervals of Qt\_widget class. The current
|
||
visible area of Qt\_widget is mapped to an interval. Each
|
||
interval could be stored in the Qt\_widget\_history object.
|
||
So you can use this object to navigate in history. It is
|
||
mostly used by Qt\_widget\_standard\_toolbar.
|
||
- Changes:
|
||
- Qt\_widget\_standard\_toolbar: is derived from QToolBar
|
||
class, so pay attention to modify your code, if you used
|
||
this class. Some public methods were introduced to control
|
||
the history object that the toolbar use to navigate.
|
||
- the icons are now part of libCGALQt.
|
||
- Deprecated members of Qt\_widget:
|
||
- add\_to\_history(), clear\_history(), back(), forth(): use
|
||
forward(), back() and clear\_history() of the
|
||
Qt\_widget\_standard\_toolbar instead.
|
||
- custom\_redraw(): use redraw\_on\_back() and
|
||
redraw\_on\_front() instead.
|
||
- Optimizations: the output operators of the following classes
|
||
have been optimized:
|
||
- CGAL::Segment\_2 (now tests for intersection with the
|
||
drawing area)
|
||
- CGAL::Triangle\_2 (now tests for intersection with the
|
||
drawing area)
|
||
- CGAL::Triangulation\_2 (is optimized for faster display on
|
||
zooming)
|
||
|
||
### Erratum in the Kernel manual
|
||
|
||
- Intersection test routines
|
||
|
||
The documentation of CGAL::do\_intersect should mention, for the 3D
|
||
case:
|
||
Also, in three-dimensional space *Type1* can be
|
||
|
||
- either *Plane\_3<Kernel>*
|
||
- or *Triangle\_3<Kernel>*
|
||
|
||
and *Type2* any of
|
||
|
||
- *Plane\_3<Kernel>*
|
||
- *Line\_3<Kernel>*
|
||
- *Ray\_3<Kernel>*
|
||
- *Segment\_3<Kernel>*
|
||
- *Triangle\_3<Kernel>*
|
||
|
||
In the same way, for *Kernel::DoIntersect\_3*:
|
||
for all pairs *Type1* and *Type2*, where the type *Type1* is
|
||
|
||
- either *Kernel::Plane\_3*
|
||
- or *Kernel::Triangle\_3*
|
||
|
||
and *Type2* can be any of the following:
|
||
|
||
- *Kernel::Plane\_3*
|
||
- *Kernel::Line\_3*
|
||
- *Kernel::Ray\_3*
|
||
- *Kernel::Segment\_3*
|
||
- *Kernel::Triangle\_3*
|
||
|
||
Philippe Guigue (INRIA Sophia-Antipolis) should be mentioned as one
|
||
of the authors.
|
||
|
||
Release 2.4
|
||
-----------
|
||
|
||
Release date: May 2002
|
||
|
||
Version 2.4 differs from version 2.3 in the platforms that are supported
|
||
and in functionality. There have also been a number of bug fixes for
|
||
this release.
|
||
|
||
Additional supported platforms:
|
||
|
||
- Microsoft Visual C++, version 7.
|
||
- SunPro 5.3 (with patch 111685-05) on Solaris
|
||
- g++ 3.1 on Linux and Solaris
|
||
|
||
The following functionality has been added or changed:
|
||
|
||
|
||
### Kernels
|
||
|
||
- Point\_d has been removed from the 2D and 3D kernels. This type is
|
||
now available from the d-dimensional kernel only.
|
||
|
||
### Basic Library
|
||
|
||
- 2D Polygon Partitioning
|
||
Traits requirements for optimal partitioning have been changed
|
||
slightly.
|
||
|
||
- 2D Sweep line
|
||
A new package that implements a sweep-line algorithm to compute
|
||
arrangements of curves for different families of curves, which are
|
||
not necessarily line segments (e.g., it also works for circular
|
||
arcs). The resulting output can be the list of vertex points, the
|
||
resulting subcurves or a planar map.
|
||
|
||
- Planar Maps and Arrangements
|
||
- New quicker insertion functions of Planar\_map\_2 for cases
|
||
where more precomputed information is available regarding the
|
||
position of the inserted curve in the map.
|
||
- New query function for planar maps that determines whether a
|
||
given point is within a given face of the planar map.
|
||
- New iterator over edges of planar maps in addition to the
|
||
existing iterator over halfedges.
|
||
- New copy constructor and assignment operator for arrangements.
|
||
|
||
|
||
|
||
- Polyhedral Surface
|
||
- new design introduced with release 2.3 now supported by VC7
|
||
compiler
|
||
- Extended functionality of Polyhedron\_incremental\_builder:
|
||
absolute indexing allows one to add new surfaces to existing
|
||
ones.
|
||
|
||
|
||
|
||
- 2D Triangulation
|
||
- There is a new triangulation data structure replacing the two
|
||
previous ones. This new data structure is coherent with the 3d
|
||
triangulation data structure and offer the advantages of both
|
||
previous ones. Backward compatibility is ensured and this change
|
||
is transparent for the user of triangulation classes.
|
||
- Constrained and Delaunay constrained triangulations are now able
|
||
to handle intersecting input constraints. The behavior of
|
||
constrained triangulations with repect to intersection of input
|
||
constraints can be customized using an intersection tag.
|
||
- A new class Constrained\_triangulation\_plus offers a
|
||
constrained hierarchy on top of a constrained triangulations.
|
||
This additionnal data structure describes the subdivision of the
|
||
original constraints into edges of the triangulations.
|
||
|
||
|
||
|
||
- 3D Triangulation
|
||
- Running time improved by a better and more compact management of
|
||
memory allocation
|
||
- Various improvements and small functionalities added:
|
||
- Triangulation\_3<GT,Tds>::triangle() returns a
|
||
triangle oriented towards the outside of the cell c for
|
||
facet (c,i)
|
||
- New function insert(Point, Locate\_type, Cell\_handle, int,
|
||
int) which avoids the location step.
|
||
- New function to get access to cells in conflict in a
|
||
Delaunay insertion : find\_conflicts() and
|
||
insert\_in\_hole()
|
||
- New function TDS::delete\_cells(begin, end).
|
||
- New functions : degree(v), reorient(),
|
||
remove\_decrease\_dimension(), remove\_from\_simplex().
|
||
- Changes of interface:
|
||
- vertices and cells are the same for the triangulation data
|
||
structure and the geometric triangulation
|
||
- the triangulation data structure uses Vertex\_handle (resp
|
||
Cell\_handle) instead of Vertex\* (resp Cell\*).
|
||
- incident\_cells() and incident\_vertices() are templated by
|
||
output iterators
|
||
- changes in the iterators and circulators interface:
|
||
- Iterators and circulators are convertible to handles
|
||
automatically, no need to call "->handle()" anymore.
|
||
- Vertex\_iterator split into All\_vertices\_iterator and
|
||
Finite\_vertices\_iterator (and similar for cells...).
|
||
- TDS::Edge/Facet iterators now support operator->.
|
||
|
||
|
||
|
||
- 2D Search structures
|
||
Additional range search operations taking a predicate functor have
|
||
been added
|
||
|
||
### Support Library
|
||
|
||
- Qt\_widget
|
||
- We have added a new class for visualization of 2D CGAL objects.
|
||
It is derived from Trolltech's Qt class QWidget and privdes a
|
||
used to scale and pan.
|
||
- Some demos were developed for the following packages: 2D Alpha
|
||
shapes, 2D Convex Hull, Largest empty 2D rectangle, Maximum
|
||
k-gon, Minimum ellipse, Minimum 2D quadrilateral, 2D polygon
|
||
partitioning 2D regular and constrained triangulation.
|
||
- Tutorials are available to help users get used to Qt\_widget
|
||
|
||
|
||
|
||
- Timer
|
||
Fixed Timer class (for user process time) to have no wrap-around
|
||
anymore on Posix-compliant systems.
|
||
|
||
The following functionality is no longer supported:
|
||
|
||
- Planar maps of infinite curves (the so-called planar map
|
||
bounding-box).
|
||
|
||
Bugs in the following packages have been fixed: 3D Convex hull, 2D
|
||
Polygon partition, simple polygon generator
|
||
|
||
Also attempts have been made to assure compatability with the upcoming
|
||
LEDA release that introduces the leda namespace.
|
||
|
||
### Known problems
|
||
|
||
- 2D Nef Polyhedra contains a memory leak. Memory problems are also
|
||
the likely cause of occasional run-time errors on some platforms.
|
||
- The d-dimensional convex hull computation produces run-time errors
|
||
on some platforms because of memory management bugs.
|
||
- The new Halfedge Data Structure design introduced with release 2.3
|
||
does not work on VC6. See the release notes in the manual for more
|
||
information.
|
||
- The following deficiencies relate to planar maps, planar maps of
|
||
intersecting curves (pmwx), arrangements and sweep line.
|
||
- On KCC, Borland and SunPro we guarantee neither compilation nor
|
||
correct execution for all of the packages above.
|
||
- On VC6 and VC7 we guarantee neither compilation nor correct
|
||
execution of the sweep line package.
|
||
- On CC (on Irix 6.5) the trapezoidal decomposition point location
|
||
strategy is problematic when used with planar maps, pmwx, or
|
||
arrangements (mind that this is the default for planar maps).
|
||
- On CC (on Irix 6.5) sweep line with polyline traits does not
|
||
compile (mind that the so-called leda polyline traits does
|
||
compile).
|
||
- On g++ (on Irix 6.5) the segment-circle
|
||
(Arr\_segment\_circle\_traits\_2) traits does not compile for
|
||
either of the above packages.
|
||
|
||
Release 2.3
|
||
-----------
|
||
|
||
Release date: August 2001
|
||
|
||
Version 2.3 differs from version 2.2 in the platforms that are supported
|
||
and in functionality.
|
||
|
||
Additional supported platform:
|
||
|
||
- Gnu g++ 3.0 on Solaris and Linux
|
||
|
||
The following functionality has been added:
|
||
|
||
|
||
### Kernels
|
||
|
||
- The 2D and 3D kernels now serve as models of the new kernel concept
|
||
described in the recent paper, "An Adaptable and Extensible Geometry
|
||
Kernel" by Susan Hert, Micheal Hoffmann, Lutz Kettner, Sylvain Pion,
|
||
and Michael Seel to be presented at WAE 2001 (and soon available as
|
||
a technical report). This new kernel is completely compatible with
|
||
the previous design but is more flexible in that it allows geometric
|
||
predicates as well as objects to be easily exchanged and adapted
|
||
individually to users' needs.
|
||
- A new kernel called `Simple_homogeneous` is available. It is
|
||
equivalent to `Homogeneous` but without reference-counted objects.
|
||
- A new kernel called `Filtered_kernel` is available that allows one
|
||
to build kernel traits classes that use exact and efficient
|
||
predicates.
|
||
- There are two classes, `Cartesian_converter` and
|
||
`Homogeneous_converter` that allows one to convert objects between
|
||
different Cartesian and homogeneous kernels, respectively.
|
||
- A new d-dimensional kernel, `Kernel_d` is available. It provides
|
||
diverse kernel objects, predicates and constructions in d dimensions
|
||
with two representations based on the kernel families `Cartesean_d`
|
||
and `Homogeneous_d`
|
||
|
||
### Basic Library
|
||
|
||
Almost all packages in the basic library have been adapted to the new
|
||
kernel design to realize the flexibility this design makes possible. In
|
||
several packages, this means that the traits class requirements have
|
||
changed to conform to the function objects offered in the kernels so the
|
||
kernels themselves can be used as traits classes in many instances.
|
||
- 2D Convex Hull
|
||
The traits requirements have changed slightly to bring them in line
|
||
with the CGAL kernels.
|
||
- 3D Convex Hull
|
||
- The function `convex_hull_3` now uses a new implementation of
|
||
the quickhull algorithm and no longer requires LEDA.
|
||
- A new `convex_hull_incremental_3` function based on the new
|
||
d-dimensional convex hull class is available for comparison
|
||
purposes.
|
||
|
||
|
||
- `Convex_hull_d, Delaunay_d`
|
||
Two new application classes offering the calculation of
|
||
d-dimensional convex hulls and delaunay triangulations
|
||
|
||
- Polygons and Polygon Operations
|
||
- The traits class requirements have been changed.
|
||
- The simplicity test has a completely new implementation.
|
||
- Properties like convexity, simplicity and area can now be cached
|
||
by polygons. You need to set a flag to select this behaviour.
|
||
|
||
|
||
|
||
|
||
- Planar Nef Polyhedra
|
||
A new class (`Nef_polyhedron_2`) representing planar Nef polyhedra =
|
||
rectilinearly bounded points sets that are the result of binary and
|
||
topological operations starting from halfplanes.
|
||
|
||
- A new package offering functions to partition planar polygons into
|
||
convex and y-monotone pieces is available.
|
||
|
||
- Planar Maps and Arrangements
|
||
- A new class `Planar_map_with_intersections_2<Planar_map>` for
|
||
planar maps of possibly intersecting, possibly non-x-monotone,
|
||
possibly overlapping curves (like `Arrangement_2` but without
|
||
the hierarchy tree).
|
||
- I/O utilities for planar maps and arrangements for textual and
|
||
graphical streams. (It is possible to save and later reload
|
||
built planar maps or arrangements.)
|
||
- New arrangement traits class for line segments and circular arcs
|
||
(`Arr_segment_circle_traits<NT>`).
|
||
- New faster traits for polylines specialized for using the LEDA
|
||
rational kernel (`Arr_leda_polylines_traits`). The LEDA traits
|
||
for segments was also made faster.
|
||
- A new point location strategy
|
||
(`Pm_simple_point_location<Planar_map>`).
|
||
|
||
|
||
|
||
- Halfedge Data Structure
|
||
|
||
The halfedge data structure has been completely revised. The new
|
||
design is more in line with the STL naming scheme and it provides a
|
||
safe and coherent type system throughout the whole design (no void\*
|
||
pointers anymore), which allows for better extendibility. A user can
|
||
add new incidences in the mesh easily. The new design also uses
|
||
standard allocators with a new template parameter that has a
|
||
suitable default.
|
||
|
||
The old design is still available, but its use is deprecated, see
|
||
the manual of deprecated packages for its documentation. Reported
|
||
bugs in copying the halfedge data structure (and therefore also
|
||
polyhedral surfaces) have been fixed in both designs. Copying a
|
||
list-based representation is now based on hash maps instead of
|
||
std::map and is therefore considerably faster.
|
||
|
||
- Polyhedral Surface
|
||
|
||
The polyhedral surface has been rewritten to work with the new
|
||
halfedge data structure design. The user level interface of the
|
||
`CGAL::Polyhedron_3` class is almost backwards compatible with the
|
||
previous class. The exceptions are the template parameter list,
|
||
everything that relies on the flexibility of the underlying halfedge
|
||
data structure, such as a self-written facet class, and that the
|
||
distinction between supported normals and supported planes has been
|
||
removed. Only planes are supported. See the manuals for suggestions
|
||
how to handle normals instead of planes.
|
||
|
||
More example programs are provided with polyhedral surfaces, for
|
||
example, one about Euler operator and one computing a subdivision
|
||
surface given a control mesh as input.
|
||
|
||
The old design is still available for backwards compatibility and to
|
||
support older compiler, such as MSVC++6.0. For the polyhedral
|
||
surface, old and new design cannot be used simultaneously (they have
|
||
identical include file names and class names). The include files
|
||
select automatically the old design for MSVC++6.0 and the new design
|
||
otherwise. This automatism can be overwritten by defining
|
||
appropriate macros before the include files. The old design is
|
||
selected with the `CGAL_USE_POLYHEDRON_DESIGN_ONE` macro. The new
|
||
design is selected with the `CGAL_USE_POLYHEDRON_DESIGN_TWO`
|
||
macro.
|
||
|
||
- 2D Triangulation
|
||
- The geometric traits class requirements have been changed to
|
||
conform to the new CGAL kernels. CGAL kernel classes can be used
|
||
as traits classes for all 2D triangulations except for regular
|
||
triangulations.
|
||
- Additionnal functionality:
|
||
- dual method for regular triangulations (to build a power
|
||
diagram)
|
||
- unified names and signatures for various "find\_conflicts()"
|
||
member functions in Delaunay and constrained Delaunay
|
||
triangulation.
|
||
- As an alternative to the simple insert() member function,
|
||
insertion of points in those triangulation can be performed
|
||
using the combination of find\_conflicts() and star\_hole()
|
||
which eventually allows the user to keep track of deleted
|
||
faces.
|
||
- More demos and examples
|
||
|
||
|
||
- 3D Triangulation
|
||
- Major improvements
|
||
- A new class `Triangulation_hierarchy_3` that allows a faster
|
||
point location, and thus construction of the Delaunay
|
||
triangulation
|
||
- A new method for removing a vertex from a Delaunay
|
||
triangulation that solves all degenerate cases
|
||
- Running time of the usual location and insertion methods
|
||
improved
|
||
- A bit more functionality, such as
|
||
- New geomview output
|
||
- dual methods in Delaunay triangulations to draw the Voronoi
|
||
diagram
|
||
- More demos and examples
|
||
- Changes in interface
|
||
- Traits classes requirements have been modified
|
||
- The kernel can be used directly as a traits class (except
|
||
for regular triangulation)
|
||
- insert methods in `Triangulation_data_structure` have a new
|
||
interface
|
||
|
||
|
||
- A new class (`Alpha_shapes_3`) that computes Alpha shapes of point
|
||
sets in 3D is available.
|
||
|
||
- The traits requirements for matrix search and minimum quadrilaterals
|
||
have been changed to bring them in line with the CGAL kernels.
|
||
|
||
- Point\_set\_2
|
||
- now independent of LEDA; based on the CGAL Delaunay
|
||
triangulation
|
||
- traits class requirements adapted to new kernel concept.
|
||
- function template versions of the provided query operations are
|
||
available
|
||
|
||
### Support Library
|
||
|
||
- Number types:
|
||
- `Lazy_exact_nt<NT>` is a new number type wrapper to speed up
|
||
exact number types.
|
||
- `MP_Float` is a new multiprecision floating point number type.
|
||
It can do exact additions, subtractions and multiplications over
|
||
floating point values.
|
||
- `In_place_list` has a new third template parameter (with a suitable
|
||
default) for an STL-compliant allocator.
|
||
- `Unique_hash_map` is a new support class.
|
||
- `Union_find` is a new support class.
|
||
- `Geomview_stream` :
|
||
- Geomview version 1.8.1 is now required.
|
||
- no need to have a `~/.geomview` file anymore.
|
||
- new output operators for triangulations.
|
||
- new output operators for `Ray_2`, `Line_2`, `Ray_3`, `Line_3`,
|
||
`Sphere_3`.
|
||
- various new manipulators.
|
||
- Window stream In cooperation with Algorithmic Solutions, GmBH
|
||
(distributors of the LEDA library), we can now offer a visualization
|
||
package downloadable in binary form that supports visualization on a
|
||
ported version of the LEDA window lib.
|
||
|
||
Release 2.2
|
||
-----------
|
||
|
||
Release date: October 2000
|
||
|
||
Version 2.2 differs from version 2.1 in the platforms that are supported
|
||
and in functionality.
|
||
|
||
Additional supported platforms:
|
||
|
||
- the KAI compiler (4.0) on Solaris 5.8
|
||
- Borland C++ (5.5)
|
||
|
||
The following functionality has been added:
|
||
|
||
- There is a new, non-reference-counted kernel, Simple\_cartesian.
|
||
Because reference counting is not used, and thus coordinates are
|
||
stored within a class, debugging is easier using this kernel. This
|
||
kernel can also be faster in some cases than the reference-counted
|
||
Cartesian kernel.
|
||
- New optimisation algorithms
|
||
- Min\_annulus\_d - Algorithm for computing the smallest enclosing
|
||
annulus of points in arbitrary dimension
|
||
- Polytope\_distance\_d - Algorithm for computing the (squared)
|
||
distance between two convex polytopes in arbitrary dimension
|
||
- Width\_3 - Algorithm for computing the (squared) width of points
|
||
sets in three dimensions
|
||
- 2D Triangulations
|
||
- There are now two triangulation data structures available in
|
||
CGAL. The new one uses a list to store the faces and allows one
|
||
to represent two-dimensional triangulations embedded in three
|
||
spaces as well as planar triangulations.
|
||
- The triangulation hierarchy which allows fast location query is
|
||
now available.
|
||
- Inifinite objects can now be included in planar maps.
|
||
- Removal as well as insertions of vertices for 3D Delaunay
|
||
triangulations is now possible.
|
||
- A generator for \`\`random'' simple polygons is now available.
|
||
- In directory demo/Robustness, programs that demonstrate typical
|
||
robustness problems in geometric computing are presented along with
|
||
the solutions to these problems that CGAL provides.
|
||
|
||
The following functionality has been removed:
|
||
|
||
- The binary operations on polygons (union, intersection ...) have
|
||
been removed. Those operations were not documented in the previous
|
||
release (2.1). Arrangements can often be used as a substitute.
|
||
|
||
Release 2.1
|
||
-----------
|
||
|
||
Release date: January 2000
|
||
|
||
Version 2.1 differs from version 2.0 in the platforms that are supported
|
||
and in functionality.
|
||
|
||
Supported platforms:
|
||
|
||
- the newest gnu compiler (2.95.2) on Sun, SGI, Linux and Windows.
|
||
- the Microsoft Visual C++ compiler, version 6.
|
||
- the mips CC compiler version 7.3 under Irix.
|
||
|
||
Support for the old g++ compiler (2.8) and for mips CC 7.2 has been
|
||
dropped.
|
||
|
||
The following functionality has been added:
|
||
- Alpha shapes and weighted alpha shapes in 2D. Alpha shapes are a
|
||
generalization of the convex hull of a point set.
|
||
- Arrangements in 2D. Arrangements are related to and based on planar
|
||
maps. The major difference between the two is that curves are
|
||
allowed to intersect in the case of arrangements.
|
||
- Extensions to triangulations in 2D. Constrained triangulations are
|
||
now dynamic: they support insertions of new constraint as well as
|
||
removal of existing constraints. There are also constrained Delaunay
|
||
triangulations.
|
||
- Triangulations in 3D were added, both Delaunay triangulations and
|
||
regular triangulations.
|
||
- Min\_quadrilateral optimisations have been added. These are
|
||
algorithms to compute the minimum enclosing rectangle/parallelogram
|
||
(arbitrary orientation) and the minimum enclosing strip of a convex
|
||
point set.
|
||
- 2d Point\_set is a package for 2d range search operations, Delaunay
|
||
triangulation, nearest neighbor queries. This package works only if
|
||
LEDA is installed.
|
||
- Support for GeoWin visualization library. This also depends on LEDA.
|
||
- Support for using the CLN number type together with CGAL.
|
||
|
||
Release 2.0
|
||
-----------
|
||
|
||
Release date: June 1999
|
||
|
||
The main difference from release 1.2 is the introduction of namespaces
|
||
-- namespace `std` for code from the standard library and namespace
|
||
`CGAL` for the CGAL library.
|
||
|
||
Release 1.2
|
||
-----------
|
||
|
||
Release date: January 1999
|
||
|
||
Additions to release 1.1 include:
|
||
|
||
- topological map
|
||
- planar map overlay
|
||
- regular and constrained triangulations
|
||
|
||
Release 1.1
|
||
-----------
|
||
|
||
Release date: July 1998
|
||
|
||
Additions to release 1.0 include:
|
||
|
||
- 3D intersections
|
||
- kD points
|
||
- 3D convex hull
|
||
- kD smallest enclosing sphere
|
||
|
||
Release 1.0
|
||
-----------
|
||
|
||
Release date: April 1998
|
||
|
||
Additions to release 0.9 include:
|
||
|
||
- Polyhedral surfaces
|
||
- Halfedge Data Structure
|
||
- Planar maps
|
||
|
||
Release 0.9
|
||
-----------
|
||
|
||
Release date: June 1997
|
||
|
||
Initial (beta) release of the CGAL library.
|