Jan Petykiewicz
c7f3e7ee52
Since there isn't GDS/OASIS level support for dose, this can be mostly handled by using arbitrary layers/dtypes directly. Dose scaling isn't handled as nicely that way, but it corresponds more directly to what gets written to file.
58 lines
1.7 KiB
Markdown
58 lines
1.7 KiB
Markdown
# Masque README
|
|
|
|
Masque is a Python module for designing lithography masks.
|
|
|
|
The general idea is to implement something resembling the GDSII file-format, but
|
|
with some vectorized element types (eg. circles, not just polygons) and the ability
|
|
to output to multiple formats.
|
|
|
|
- [Source repository](https://mpxd.net/code/jan/masque)
|
|
- [PyPI](https://pypi.org/project/masque)
|
|
|
|
|
|
## Installation
|
|
|
|
Requirements:
|
|
* python >= 3.8
|
|
* numpy
|
|
* klamath (used for `gdsii` i/o and library management)
|
|
* matplotlib (optional, used for `visualization` functions and `text`)
|
|
* ezdxf (optional, used for `dxf` i/o)
|
|
* fatamorgana (optional, used for `oasis` i/o)
|
|
* svgwrite (optional, used for `svg` output)
|
|
* freetype (optional, used for `text`)
|
|
|
|
|
|
Install with pip:
|
|
```bash
|
|
pip3 install 'masque[visualization,oasis,dxf,svg,text]'
|
|
```
|
|
|
|
Alternatively, install from git
|
|
```bash
|
|
pip3 install git+https://mpxd.net/code/jan/masque.git@release
|
|
```
|
|
|
|
## Translation
|
|
- `Pattern`: OASIS or GDS "Cell", DXF "Block"
|
|
- `SubPattern`: GDS "AREF/SREF", OASIS "Placement"
|
|
- `Shape`: OASIS or GDS "Geometry element", DXF "LWPolyline" or "Polyline"
|
|
- `repetition`: OASIS "repetition". GDS "AREF" is a `SubPattern` combined with a `Grid` repetition.
|
|
- `Label`: OASIS, GDS, DXF "Text".
|
|
- `annotation`: OASIS or GDS "property"
|
|
|
|
|
|
## TODO
|
|
|
|
* Better interface for polygon operations (e.g. with `pyclipper`)
|
|
- de-embedding
|
|
- boolean ops
|
|
* Construct polygons from bitmap using `skimage.find_contours`
|
|
* Deal with shape repetitions for dxf, svg
|
|
|
|
* this approach has an issue: how add devices together?
|
|
- need to add the other device by name
|
|
- need to know the other device's ports
|
|
-
|
|
- also: device doesn't know its own name, can't wrap itself into a subpattern
|