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.

## Changelog

### 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 two
`Line_3`

objects have been added.

### 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

- Added n-ary union/intersection.
- Added intersection with halfspace under standard kernel.
- Added 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.
- Replaced 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.