Build Docs https://codecov.io/github/ipc-sim/ipc-toolkit/graph/badge.svg?token=9BR6GPKRY8 License


The easiest way to add the toolkit to an existing CMake project is to download it through CMake. CMake provides functionality for doing this called FetchContent (requires CMake ≥ 3.14). We use a very similar process to download all external dependencies (using CPM).

For example,

    GIT_REPOSITORY https://github.com/ipc-sim/ipc-toolkit.git

where IPC_TOOLKIT_GIT_TAG is set to the version of the toolkit you want to use. This will download and add the toolkit to CMake. The toolkit can then be linked against using

# Link against the IPC Toolkit
target_link_libraries(${PROJECT_NAME} PUBLIC ipc::toolkit)

where PROJECT_NAME is the name of your library/binary.


If your IPC_TOOLKIT_GIT_TAG is a tag (e.g. v1.2.1), then you can use the FetchContent_Declare argument GIT_SHALLOW TRUE to download only a single commit. Otherwise, you should use the default GIT_SHALLOW FALSE.


All required dependencies are downloaded through CMake depending on the build options.

The following libraries are used in this project:

  • Eigen: linear algebra

  • libigl: basic geometry functions and predicates

  • oneTBB: parallelism

  • Tight-Inclusion: provably conservative CCD of [Wang and Ferguson et al. 2021]

  • SimpleBVH: a simple bounding volume hierarchy data structure

  • Scalable-CCD: scalable (GPU) CCD of [Belgrod et al. 2023]

  • spdlog: logging information


The following dependencies are optionally used based on CMake options:

  • robin-map: faster hash set/map than std::unordered_set/std::unordered_map

    • Enable by using the CMake option IPC_TOOLKIT_WITH_ROBIN_MAP

    • Enabled by default

  • Abseil: hashing utilities

    • Enable by using the CMake option IPC_TOOLKIT_WITH_ABSEIL

    • Enabled by default

  • filib: interval arithmetic for nonlinear trajectories/CCD

    • Enable by using the CMake option IPC_TOOLKIT_WITH_FILIB

    • Enabled by default

  • rational-cpp: rational arithmetic used for exact intersection checks

    • Enable by using the CMake option IPC_TOOLKIT_WITH_RATIONAL_INTERSECTION

    • Requires GMP to be installed at a system level

  • Etienne Vouga’s Collision Detection Library: inexact CCD

    • Included for comparison with the original IPC library

    • Enable by using the CMake option IPC_TOOLKIT_WITH_INEXACT_CCD

    • Replaces the default Tight-Inclusion CCD


See the tutorial for a quick introduction to the toolkit, or the documentation for a full reference.

Unit Tests

We provide unit tests to ensure the correctness of our algorithmic pieces. To enable the unit tests use the CMake option IPC_TOOLKIT_BUILD_TESTS.


The following are downloaded when unit tests are enabled:

Last update: Jul 15, 2024