CGAL 4.3 offers the following improvements and new functionality over CGAL 4.2:
Changelog
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 useboost::variant
instead ofCGAL::Object
. Theresult_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 toCGAL::Object
. However, it is recommended to upgrade your code. The previous behavior can be restored by defining the macroCGAL_INTERSECTION_VERSION
to 1.
2D Arrangements
- The type of the result of point location queries changed to
boost::variant
(fromCGAL::Object
). For convenience, the previous behavior can be restored by defining the macroCGAL_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 classIntersection_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, thekey_type
has been changed to be thevalue_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 macroCGAL_USE_PROPERTY_MAPS_API_V1
.
Algebraic Foundations
- For convenience, added an overload of
make_rational()
taking a pair of numbers.
2D and 3D Geometry Kernel
- A
Iso_rectangle_2
can now be constructed from aBbox_2
and anIso_cuboid_3
from aBbox_3
. - The implementation of
CGAL::Object
has been updated and now usesboost::shared_ptr
andboost::any
. This implementation is faster. - Added to
Bbox_2
andBbox_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.
- Added a constructor taking a given combinatorial map as argument, possibly with different dimension and/or different attributes. This allows to transform a combinatorial map.
- Added operator= and swap method.
- Added dynamic onmerge/onsplit functions that can be associated dynamically to i-attributes and which are automatically called when i-cells are split/merged.
- Added 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 orExact_predicates_exact_constructions_kernel
as kernel.
2D Triangulations
- Extended the concept
TriangulationDataStructure_2
to require a more generalcopy_tds
function that allows a copy between TDS of different types. The CGAL model has been updated. - Added a way to efficiently insert a range of points with information into the 2D constrained Delaunay triangulations.
3D Triangulations
- Extended the concept
TriangulationDataStructure_3
to require a more generalcopy_tds
function that allows a copy between TDS of different types. The CGAL model has been updated. - Added an advanced function to set the infinite vertex of the triangulation for low level operations
- Fixed a bug in the function inserting a range of points with info when
the
Fast_location
tag is used
2D Segment Delaunay Graph
- Added functions
insert_points
andinsert_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 functioninsert(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
- Sped-up
Mesh_3
and in particular the global optimizers (Lloyd and ODT) by introducing a parameterdo_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
andMesh_vertex_base_3
are now our favoured implementations of the concepts MeshCellBase_3 and MeshVertexBase_3. - Introduced 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.
- Provided the ability to plug in custom cell_base/vertex_base
classes into the
Mesh_triangulation_3
class.
Triangulated Surface Mesh Simplification
- Fixed 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 classIntersection_and_primitive_id<Query>
to determine the type depending on the query object type. - Introduced the class
AABB_halfedge_graph_segment_primitive
, which replaces the classAABB_polyhedron_segment_primitive
(which is now deprecated). The new class is more general and can be used with any model ofHalfedgeGraph
. - Introduced the class
AABB_face_graph_triangle_primitive
which replaces the classAABB_polyhedron_triangle_primitive
(which is now deprecated). - Documented the classes
AABB_segment_primitive
andAABB_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. - Introduced a new concept of primitive
AABBPrimitiveWithSharedData
. It allows to have some data shared between the primitives stored in aAABB_tree
. With this you can, for example have a primitive wrapping an integer which refers to the position of a geometric object in astd::vector
. Only one reference to this vector will be stored in the traits of the tree. The conceptAABBTraits
, its modelAABB_traits
and the classAABB_tree
have been updated accordingly. However, everything is backward compatible. - Fixed a memory leak in the destructor of the class
AABB-tree
STL Extensions for CGAL
- Added to
Dispatch_output_iterator
andDispatch_or_drop_output_iterator
an operator to accept and dispatch a tuple of values.
Concurrency in CGAL
- Added a
FindTBB
CMake module so that one can easily link with TBB to write shared-memory parallel code. - Introduce two new tags:
Sequential_tag
andParallel_tag
.