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::Objectin 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::variantinstead ofCGAL::Object. Theresult_ofprotocol 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_VERSIONto 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_VERSIONto 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_idhas 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_typeof the property maps provided by CGAL used to be an iterator. In order to be more easily re-used, thekey_typehas been changed to be thevalue_typeof 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_2can now be constructed from aBbox_2and anIso_cuboid_3from aBbox_3. - The implementation of
CGAL::Objecthas been updated and now usesboost::shared_ptrandboost::any. This implementation is faster. - Added to
Bbox_2andBbox_3a+=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_ntas number type orExact_predicates_exact_constructions_kernelas kernel.
2D Triangulations
- Extended the concept
TriangulationDataStructure_2to require a more generalcopy_tdsfunction 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_3to require a more generalcopy_tdsfunction 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_locationtag is used
2D Segment Delaunay Graph
- Added functions
insert_pointsandinsert_segmentsto 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_3and in particular the global optimizers (Lloyd and ODT) by introducing a parameterdo_freezeto 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_3andMesh_vertex_base_3are now our favoured implementations of the concepts MeshCellBase_3 and MeshVertexBase_3. - Introduced a new constructor for
Polyhedral_mesh_domain_3that 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_3class.
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_idhas 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_primitivewhich replaces the classAABB_polyhedron_triangle_primitive(which is now deprecated). - Documented the classes
AABB_segment_primitiveandAABB_triangle_primitivethat were already used in some examples. - Add a generic primitive class
AABB_primitivethat 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_traitsand the classAABB_treehave 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_iteratorandDispatch_or_drop_output_iteratoran operator to accept and dispatch a tuple of values.
Concurrency in CGAL
- Added a
FindTBBCMake module so that one can easily link with TBB to write shared-memory parallel code. - Introduce two new tags:
Sequential_tagandParallel_tag.