CGAL 3.4 released


CGAL 3.4 released

Download CGAL-3.4

CGAL-3.4 documentation

CGAL 3.4 differs from CGAL 3.3.1 in the platforms that are supported and in functionality. There have also been a number of bug fixes for this release.



  • 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.


  • install_cgal has been replaced by CMake.

Polynomial (new package)

  • This package introduces a concept, Polynomial_d, 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<>() 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.