Convert Figma logo to code with AI

CGAL logocgal

The public CGAL repository, see the README below

4,934
1,383
4,934
622

Top Related Projects

1,702

PROJ - Cartographic Projections and Coordinate Transformations Library

1,164

Geometry Engine, Open Source

10,476

QGIS is a free, open source, cross platform (lin/win/mac) geographical information system (GIS)

Quick Overview

CGAL (Computational Geometry Algorithms Library) is an open-source C++ library that provides efficient and reliable geometric algorithms. It offers a wide range of data structures and algorithms for computational geometry, including triangulations, Voronoi diagrams, Boolean operations on polygons and polyhedra, and many more.

Pros

  • Extensive collection of geometric algorithms and data structures
  • Highly efficient and robust implementations
  • Well-documented with comprehensive user manuals and examples
  • Actively maintained and regularly updated

Cons

  • Steep learning curve for beginners
  • Large library size, which may increase compilation times
  • Some advanced features require commercial licenses
  • C++-centric, which may not be ideal for projects using other languages

Code Examples

  1. Creating a 2D Delaunay triangulation:
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_2.h>

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_2<K> Delaunay_triangulation;
typedef K::Point_2 Point;

int main() {
    Delaunay_triangulation dt;
    dt.insert(Point(0,0));
    dt.insert(Point(1,0));
    dt.insert(Point(0,1));
    
    for(auto face = dt.finite_faces_begin(); face != dt.finite_faces_end(); ++face) {
        // Process triangulation faces
    }
    return 0;
}
  1. Performing a 2D convex hull computation:
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/convex_hull_2.h>
#include <vector>

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 Point_2;

int main() {
    std::vector<Point_2> points = {Point_2(0,0), Point_2(1,0), Point_2(0,1), Point_2(1,1), Point_2(0.5,0.5)};
    std::vector<Point_2> result;
    CGAL::convex_hull_2(points.begin(), points.end(), std::back_inserter(result));
    
    // result now contains the points of the convex hull
    return 0;
}
  1. Performing Boolean operations on 3D Nef polyhedra:
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
#include <CGAL/Nef_polyhedron_3.h>
#include <CGAL/IO/Nef_polyhedron_iostream_3.h>

typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef CGAL::Nef_polyhedron_3<Kernel> Nef_polyhedron;
typedef Kernel::Point_3 Point_3;

int main() {
    Nef_polyhedron N1(Nef_polyhedron::COMPLETE);
    Nef_polyhedron N2(Nef_polyhedron::EMPTY);
    Nef_polyhedron N3 = N1 * N2;  // Intersection
    Nef_polyhedron N4 = N1 + N2;  // Union
    Nef_polyhedron N5 = N1 - N2;  // Difference
    
    return 0;
}

Getting Started

To use CGAL in your project:

  1. Install CGAL using your package manager or download from the official website.
  2. Include CGAL headers in your C++ file.
  3. Link against the required CGAL libraries.
  4. Compile with C++14 or later.

Example CMakeLists.txt:

cmake_minimum_required(VERSION 3.1)
project(My

Competitor Comparisons

1,702

PROJ - Cartographic Projections and Coordinate Transformations Library

Pros of PROJ

  • Specialized focus on coordinate transformations and map projections
  • Lightweight and efficient for geospatial operations
  • Widely used in GIS applications and supported by many geospatial libraries

Cons of PROJ

  • Limited scope compared to CGAL's broader computational geometry offerings
  • Less suitable for complex geometric algorithms beyond coordinate transformations
  • Smaller community and fewer contributors compared to CGAL

Code Comparison

PROJ (coordinate transformation):

PJ *P;
P = proj_create_crs_to_crs(PJ_DEFAULT_CTX, "EPSG:4326", "EPSG:3857", NULL);
proj_trans(P, PJ_FWD, coord);
proj_destroy(P);

CGAL (geometric computation):

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
K::Point_2 p(1, 1), q(10, 10);
double distance = CGAL::squared_distance(p, q);

PROJ is more focused on coordinate transformations and map projections, making it ideal for geospatial applications. CGAL offers a broader range of computational geometry algorithms, suitable for more complex geometric computations. PROJ is lighter and more efficient for specific geospatial tasks, while CGAL provides a comprehensive toolkit for various geometric problems.

1,164

Geometry Engine, Open Source

Pros of GEOS

  • Simpler API and easier to use for basic geometric operations
  • Faster performance for certain operations, especially with large datasets
  • Better support for GIS-specific functionality and coordinate systems

Cons of GEOS

  • Less comprehensive feature set compared to CGAL
  • Limited support for higher-dimensional geometry and advanced algorithms
  • Fewer options for exact arithmetic and precision control

Code Comparison

GEOS example (C++):

#include <geos/geom/Geometry.h>
#include <geos/geom/GeometryFactory.h>
#include <geos/io/WKTReader.h>

geos::geom::GeometryFactory::Ptr factory = geos::geom::GeometryFactory::create();
geos::io::WKTReader reader(*factory);
std::unique_ptr<geos::geom::Geometry> geom(reader.read("POINT(0 0)"));

CGAL example (C++):

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Point_2.h>

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Point_2<K> Point_2;

Point_2 p(0, 0);

Both GEOS and CGAL are powerful computational geometry libraries, but they cater to different use cases. GEOS is more focused on GIS applications and simpler geometric operations, while CGAL offers a broader range of algorithms and more precise computations. The choice between them depends on the specific requirements of your project.

10,476

QGIS is a free, open source, cross platform (lin/win/mac) geographical information system (GIS)

Pros of QGIS

  • More user-friendly with a graphical interface for GIS operations
  • Broader functionality for geospatial analysis and cartography
  • Larger community and more frequent updates

Cons of QGIS

  • Slower performance for complex computational geometry tasks
  • Less specialized for advanced geometric algorithms
  • Steeper learning curve for developers due to its size and complexity

Code Comparison

CGAL (C++):

#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_2.h>

typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Delaunay_triangulation_2<K> Triangulation;
Triangulation t;

QGIS (Python):

from qgis.core import QgsVectorLayer, QgsProject

layer = QgsVectorLayer("Point", "points", "memory")
QgsProject.instance().addMapLayer(layer)

CGAL focuses on computational geometry algorithms, providing efficient and robust implementations. It's ideal for developers working on geometric problems and requires C++ expertise.

QGIS is a comprehensive GIS software with a user-friendly interface, suitable for a wide range of geospatial tasks. It offers Python scripting for customization and plugin development, making it accessible to both users and developers.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

CGAL

The Computational Geometry Algorithms Library (CGAL) is a C++ library that aims to provide easy access to efficient and reliable algorithms in computational geometry.

CGAL Releases

The primary vector of distribution of CGAL are source tarballs, released twice a year, announced on the web site of CGAL.

Getting Started with CGAL

Since version 5.0, CGAL is a header-only library, meaning that it is no longer needed to build CGAL libraries before it can be used.

Head over to the CGAL manual for usage guides and tutorials that will get you started smoothly.

License

See the file LICENSE.md.

CGAL Git Repository Layout

The Git repository of CGAL has a different layout from release tarballs. It contains a CMakeLists.txt file that serves as anchor for configuring and building programs, and a set of subfolders, so called packages. Most packages implement a data structure or an algorithm for CGAL (e.g., Convex_hull_2, or Triangulation_3); however some packages serve special needs:

  • Installation - meta-files and CMake-support
  • Maintenance - infrastructural support
  • Core, CGALimageIO, Qt_widget, GraphicsView - component libraries
  • Scripts - scripts to simplify developer's and user's work
  • Testsuite - infrastructure for testsuite
  • Documentation - infrastructure for CGAL's manual
  • STL_Extension - extensions to the standard template library

More Information