You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+8-78Lines changed: 8 additions & 78 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -26,98 +26,28 @@ IPC Toolkit is a set of reusable functions to integrate Incremental Potential Co
26
26
27
27
This is not a full simulation library. As such it does not include any physics or solvers. For a full simulation implementation, we recommend [PolyFEM](https://polyfem.github.io/) (a finite element library) or [Rigid IPC](https://github.com/ipc-sim/rigid-ipc) (rigid-body dynamics) both of which utilize the IPC Toolkit.
28
28
29
-
<!--- BEGIN C++ README 1 --->
30
-
31
29
## Build
32
30
33
-
The easiest way to add the toolkit to an existing CMake project is to download it through CMake.
34
-
CMake provides functionality for doing this called [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.html) (requires CMake ≥ 3.14).
35
-
We use a very similar process to download all external dependencies (using [CPM](https://github.com/cpm-cmake/CPM.cmake)).
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
50
-
51
-
```cmake
52
-
# Link against the IPC Toolkit
53
-
target_link_libraries(${PROJECT_NAME} PUBLIC ipc::toolkit)
54
-
```
55
-
56
-
where `PROJECT_NAME` is the name of your library/binary.
57
-
58
-
<!--- BEGIN C++ README 2 --->
31
+
Instruction for building and including the IPC Toolkit in your CMake project can be found on the website [here](https://ipctk.xyz/bulding.html).
59
32
60
33
### Dependencies
61
34
62
-
**All required dependencies are downloaded through CMake** depending on the build options.
63
-
64
-
The following libraries are used in this project:
35
+
The IPC Toolkit depends on a handful of third-party libraries, which are used to provide various functionality.
65
36
66
-
*[Eigen](https://eigen.tuxfamily.org/): linear algebra
67
-
*[libigl](https://github.com/libigl/libigl): basic geometry functions and predicates
*[Tight-Inclusion](https://github.com/Continuous-Collision-Detection/Tight-Inclusion): provably conservative CCD of [Wang and Ferguson et al. 2021]
70
-
*[SimpleBVH](https://github.com/ipc-sim/SimpleBVH): a simple bounding volume hierarchy data structure
71
-
*[Scalable-CCD](https://github.com/Continuous-Collision-Detection/Scalable-CCD): scalable (GPU) CCD of [Belgrod et al. 2023]
72
-
*[spdlog](https://github.com/gabime/spdlog): logging information
37
+
**All required dependencies are downloaded through CMake** depending on the build options, and are built automatically when you build the IPC Toolkit. You do not need to install them separately.
73
38
74
-
#### Optional
39
+
A full list of dependencies can be found on the [dependencies page](https://ipctk.xyz/dependencies.html).
75
40
76
-
The following dependencies are optionally used based on CMake options:
41
+
## Python Bindings
77
42
78
-
*[robin-map](https://github.com/Tessil/robin-map): faster hash set/map than `std::unordered_set`/`std::unordered_map`
79
-
* Enable by using the CMake option `IPC_TOOLKIT_WITH_ROBIN_MAP`
80
-
* Enabled by default
81
-
*[Abseil](https://abseil.io/): hashing utilities
82
-
* Enable by using the CMake option `IPC_TOOLKIT_WITH_ABSEIL`
83
-
* Enabled by default
84
-
*[filib](https://github.com/zfergus/filib): interval arithmetic for nonlinear trajectories/CCD
85
-
* Enable by using the CMake option `IPC_TOOLKIT_WITH_FILIB`
86
-
* Enabled by default
87
-
*[rational-cpp](https://github.io/zfergus/rational-cpp): rational arithmetic used for exact intersection checks
88
-
* Enable by using the CMake option `IPC_TOOLKIT_WITH_RATIONAL_INTERSECTION`
89
-
* Requires [GMP](https://gmplib.org/) to be installed at a system level
* Included for comparison with the original IPC library
92
-
* Enable by using the CMake option `IPC_TOOLKIT_WITH_INEXACT_CCD`
43
+
We provide Python bindings for functions in the toolkit using [pybind11](https://github.com/pybind/pybind11).
93
44
94
-
<!--- FILIB DEPENDENCY NOTE --->
45
+
For more information see the [Python documentation](https://ipctk.xyz/python.html).
95
46
96
47
## Usage
97
48
98
49
See the [tutorial](https://ipctk.xyz/tutorial/getting_started.html) for a quick introduction to the toolkit, or the [documentation](https://ipctk.xyz/cpp.html) for a full reference.
99
50
100
-
## Unit Tests
101
-
102
-
We provide unit tests to ensure the correctness of our algorithmic pieces.
103
-
To enable the unit tests use the CMake option `IPC_TOOLKIT_BUILD_TESTS`.
104
-
105
-
### Dependencies
106
-
107
-
The following are downloaded when unit tests are enabled:
*[Nlohman's JSON library](https://github.com/nlohmann/json): loading test data from JSON files
112
-
113
-
<!--- END C++ README --->
114
-
115
-
## Python Bindings
116
-
117
-
We provide Python bindings for functions in the toolkit using [pybind11](https://github.com/pybind/pybind11).
118
-
119
-
For more information see the [Python documentation](https://ipctk.xyz/python.html).
120
-
121
51
## Contributing
122
52
123
53
This project is open to contributors! Contributions can come in the form of feature requests, bug fixes, documentation, tutorials, and the like. We highly recommend filing an Issue first before submitting a Pull Request.
@@ -131,7 +61,7 @@ Simply fork this repository and make a Pull Request! We would appreciate:
131
61
132
62
## Citation
133
63
134
-
If you use the IPC Toolkit in your project, please consider citing our work:
64
+
IPC Toolkit is created and maintained by academics: citations let us know our work is having impact! Please cite the IPC Toolkit or otherwise give a shout-out if and when it contributes to published works.
IPC Toolkit uses CMake to configure its build system. It is designed to be used as a submodule in your project, and as such does not have a proper install target. Instead, you can include it in your project using CMake's ``FetchContent`` module.
10
+
11
+
Adding IPC Toolkit to your CMake
12
+
--------------------------------
13
+
14
+
The easiest way to add the toolkit to an existing CMake project is to download it through CMake.
15
+
CMake provides functionality for doing this called `FetchContent <https://cmake.org/cmake/help/latest/module/FetchContent.html>`_ (requires CMake ≥ 3.14).
16
+
We use a very similar process to download all external dependencies (using `CPM.cmake <https://github.com/cpm-cmake/CPM.cmake>`_).
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
31
+
32
+
.. code-block:: cmake
33
+
34
+
# Link against the IPC Toolkit
35
+
target_link_libraries(${PROJECT_NAME} PUBLIC ipc::toolkit)
36
+
37
+
where ``PROJECT_NAME`` is the name of your library/binary.
38
+
39
+
.. tip::
40
+
If your ``IPC_TOOLKIT_GIT_TAG`` is a tag (e.g. ``v1.3.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``.
41
+
42
+
Building the Library
43
+
--------------------
44
+
45
+
You can build the IPC Toolkit using CMake as you would any other CMake project. The following is a minimal example of how to build the toolkit:
This will build the IPC Toolkit and all of its dependencies. The ``IPC_TOOLKIT_BUILD_TESTS`` option enables building the unit tests, and the ``IPC_TOOLKIT_BUILD_PYTHON`` option enables building the Python bindings.
55
+
56
+
.. warning::
57
+
Installing the IPC Toolkit using the ``make install`` has not been tested and is not recommended. The IPC Toolkit is designed to be used as a submodule in your project, and as such does not have a proper install target.
58
+
59
+
Dependencies
60
+
------------
61
+
62
+
**All required dependencies are downloaded through CMake** depending on the build options, and are built automatically when you build the IPC Toolkit. You do not need to install them separately.
63
+
64
+
A full list of dependencies can be found on the `dependencies page <https://ipctk.xyz/dependencies.html>`_.
0 commit comments