CGAL, the computational geometry algorithms library
Participants : Pierre Alliez, Jean-Daniel Boissonnat, Hervé Brönnimann, Frédéric Cazals, Frank Da, Christophe Delage, Olivier Devillers, Andreas Fabri, Julia Flötotto, Philippe Guigue, Menelaos Karavelas, Abdelkrim Mebarki, Naceur Meskini, Sylvain Pion [ contact person ] , Marc Pouget, François Rebufat, Laurent Saboret, Monique Teillaud, Radu Ursu, Mariette Yvinec.
cgal is a C++ library of geometric algorithms initially developed within two European projects (project ESPRIT IV LTR CGAL december 97 - june 98, project ESPRIT IV LTR GALIA november 99 - august 00) by a consortium of eight research teams from the following institutes: Universiteit Utrecht, Max-Planck Institut Saarbrücken, INRIA Sophia Antipolis, ETH Zürich, Tel Aviv University, Freie Universität Berlin, Universität Halle, RISC Linz. The goal of cgal is to make the solutions offered by the computational geometry community available to the industrial world and applied domains.
The cgal library consists in a kernel, a basic library and a support library. The kernel is made of classes that represent elementary geometric objects (points, vectors, lines, segments, planes, simplices, isothetic boxes...), as well as affine transformations and a number of predicates and geometric constructions over these objects. These classes exist in dimensions 2 and 3 (static dimension) and d (dynamic dimension). Using the template mechanism, each class can be instantiated following several representation modes : we can choose between Cartesian or homogeneous coordinates, use different types to store the coordinates, and use reference counting or not. The kernel also provides some robustness features using some specifically-devised arithmetic (interval arithmetic, multi-precision arithmetic, static filters...).
The basic library provides a number of geometric data structures as well as algorithms. The data structures are polygons, polyhedra, triangulations, planar maps, arrangements and various search structures (segment trees, d-dimensional trees...). Algorithms are provided to compute convex hulls, Voronoi diagrams, boolean operations on polygons, solve certain optimization problems (linear, quadratic, generalized of linear type). Through class and function templates, these algorithms can be used either with the kernel objects or with user-defined geometric classes provided they match a documented interface (concept).
Finally, the support library provides random generators, and interfacing code with other libraries, tools, or file formats (ASCII files, QT or LEDA Windows, OpenGL, Open Inventor, Postscript, Geomview, scilab ...).
Geometrica is particularly involved in the arithmetic issues that arise in the treatment of robustness issues, the kernel, triangulation packages and their close applications such as alpha shapes, general maintainance...
cgal is about 500,000 lines of code and supports various platforms: GCC (Linux, Mac OS X, Solaris, Cygwin...), Visual C++ (Windows), Intel C++... Version 3.2.1 has been released in July 2006. The previous main release, cgal 3.1, has been downloaded 15000 times from our web site, during the 18 months period where it was the main version. Moreover, cgal is now directly available as packages for the Debian and Fedora Linux distributions.
cgal is distributed under an Open Source license (LGPL or QPL depending on which packages), and is commercialized by Geometry Factory , a startup company started in 2003 by A. Fabri.