Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/heitzmann/gdstk
Gdstk (GDSII Tool Kit) is a C++/Python library for creation and manipulation of GDSII and OASIS files.
https://github.com/heitzmann/gdstk
cad cpp eda gdsii microfabrication oasis polygons python svg
Last synced: 17 days ago
JSON representation
Gdstk (GDSII Tool Kit) is a C++/Python library for creation and manipulation of GDSII and OASIS files.
- Host: GitHub
- URL: https://github.com/heitzmann/gdstk
- Owner: heitzmann
- License: bsl-1.0
- Created: 2020-08-12T22:01:04.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-04-18T09:43:28.000Z (7 months ago)
- Last Synced: 2024-05-01T21:19:08.083Z (6 months ago)
- Topics: cad, cpp, eda, gdsii, microfabrication, oasis, polygons, python, svg
- Language: C++
- Homepage: https://heitzmann.github.io/gdstk/
- Size: 5.44 MB
- Stars: 300
- Watchers: 21
- Forks: 76
- Open Issues: 22
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- awesome_photonics - gdstk - faster than gdspy (from same author) (layout)
- awesome-opensource-hardware - gdstk
README
# GDSTK
[![Boost Software License - Version 1.0](https://img.shields.io/github/license/heitzmann/gdstk.svg)](https://www.boost.org/LICENSE_1_0.txt)
[![Tests Runner](https://github.com/heitzmann/gdstk/actions/workflows/run-tests.yml/badge.svg)](https://github.com/heitzmann/gdstk/actions/workflows/run-tests.yml)
[![Publish Docs](https://github.com/heitzmann/gdstk/actions/workflows/publish-docs.yml/badge.svg)](https://github.com/heitzmann/gdstk/actions/workflows/publish-docs.yml)
[![Package Builder](https://github.com/heitzmann/gdstk/actions/workflows/publish-packages.yml/badge.svg)](https://github.com/heitzmann/gdstk/actions/workflows/publish-packages.yml)
[![Downloads](https://img.shields.io/github/downloads/heitzmann/gdstk/total.svg)](https://github.com/heitzmann/gdstk/releases)Gdstk (GDSII Tool Kit) is a C++ library for creation and manipulation of GDSII and OASIS files.
It is also available as a Python module meant to be a successor to [Gdspy](https://github.com/heitzmann/gdspy).Key features for the creation of complex CAD layouts are included:
* Boolean operations on polygons (AND, OR, NOT, XOR) based on clipping algorithm
* Polygon offset (inward and outward rescaling of polygons)
* Efficient point-in-polygon solutions for large array setsTypical applications of Gdstk are in the fields of electronic chip design, planar lightwave circuit design, and mechanical engineering.
## Documentation
The complete documentation is available [here](http://heitzmann.github.io/gdstk).
The source files can be found in the _docs_ directory.
## Installation
### C++ library only
The C++ library is meant to be used by including it in your own source code.
If you prefer to install a static library, the included _CMakeLists.txt_ should be a good starting option (use `-DCMAKE_INSTALL_PREFIX=path` to control the installation path):
```sh
cmake -S . -B build
cmake --build build --target install
```The library depends on [zlib](https://zlib.net/) and [qhull](http://www.qhull.org/)
### Python wrapper
The Python module can be installed via pip, Conda or compiled directly from source.
It depends on:* [zlib](https://zlib.net/)
* [qhull](http://www.qhull.org/)
* [CMake](https://cmake.org/)
* [Python](https://www.python.org/)
* [Numpy](https://numpy.org/)
* [Sphinx](https://www.sphinx-doc.org/), [Read the Docs Theme](https://sphinx-rtd-theme.readthedocs.io/), and [Sphinx Inline Tabs](https://sphinx-inline-tabs.readthedocs.io/) (to build the [documentation](http://heitzmann.github.io/gdstk))#### From PyPI
Simply run the following to install the package for the current user:
```sh
pip install --user gdstk
```Or download and install the available wheels manually.
#### From source
Installation from source requires the `build` module (plus CMake and Ninja, for faster compilation):
```sh
pip install --user build
```With that, simply build the wheel package using:
```sh
python -m build -w
```This will create a _dist_ directory containing the compiled _.whl_ package that can be installed with ``pip``.
## Support
Help support Gdstk development by [donating via PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=JD2EUE2WPPBQQ) or [sponsoring me on GitHub](https://github.com/sponsors/heitzmann).
## Benchmarks
The _benchmarks_ directory contains a few tests to compare the performance gain of the Python interface versus Gdspy.
They are only for reference; the real improvement is heavily dependent on the type of layout and features used.
If maximal performance is important, the library should be used directly from C++, without the Python interface.Timing results were obtained with Python 3.11 on an Intel Core i7-9750H @ 2.60 GHz
They represent the best average time to run each function out of 16 sets of 8 runs each.| Benchmark | Gdspy 1.6.13 | Gdstk 0.9.41 | Gain |
| :--------------- | :--------------: | :--------------: | :------: |
| 10k_rectangles | 80.2 ms | 4.87 ms | 16.5 |
| 1k_circles | 312 ms | 239 ms | 1.3 |
| boolean-offset | 187 μs | 44.7 μs | 4.19 |
| bounding_box | 36.7 ms | 170 μs | 216 |
| curves | 1.52 ms | 30.9 μs | 49.3 |
| flatten | 465 μs | 8.17 μs | 56.9 |
| flexpath | 2.88 ms | 16.1 μs | 178 |
| flexpath-param | 2.8 ms | 585 μs | 4.78 |
| fracture | 929 μs | 616 μs | 1.51 |
| inside | 161 μs | 33 μs | 4.88 |
| read_gds | 2.68 ms | 94 μs | 28.5 |
| read_rawcells | 363 μs | 52.4 μs | 6.94 |
| robustpath | 171 μs | 8.68 μs | 19.7 |Memory usage per object for 100000 objects:
| Object | Gdspy 1.6.13 | Gdstk 0.9.41 | Reduction |
| :------------------- | :--------------: | :--------------: | :-------: |
| Rectangle | 601 B | 232 B | 61% |
| Circle (r = 10) | 1.68 kB | 1.27 kB | 24% |
| FlexPath segment | 1.48 kB | 439 B | 71% |
| FlexPath arc | 2.26 kB | 1.49 kB | 34% |
| RobustPath segment | 2.89 kB | 920 B | 69% |
| RobustPath arc | 2.66 kB | 920 B | 66% |
| Label | 407 B | 215 B | 47% |
| Reference | 160 B | 179 B | -12% |
| Reference (array) | 189 B | 181 B | 4% |
| Cell | 430 B | 229 B | 47% |