masque/masque
Jan Petykiewicz 1d649389a0 LazyLibrary should not contain Trees
altering itself during iteration is not a good idea
2023-02-06 19:01:42 -08:00
..
builder add Pather.mk() 2023-02-04 09:06:31 -08:00
file remove log messages 2023-01-26 19:51:15 -08:00
shapes various fixes and cleanup 2023-01-25 23:57:02 -08:00
traits various fixes and cleanup 2023-01-25 23:57:02 -08:00
utils allow ports2data to take a tree 2023-02-06 12:39:43 -08:00
__init__.py Turn Builder into a subset of Pather 2023-01-31 22:28:02 -08:00
abstract.py more fixes and improvements 2023-01-25 23:19:25 -08:00
error.py more wip -- most central stuff is first pass done 2023-01-22 16:59:32 -08:00
label.py flake8-aided fixes 2023-01-23 22:27:26 -08:00
library.py LazyLibrary should not contain Trees 2023-02-06 19:01:42 -08:00
LICENSE.md Move from setuputils and setup.py to hatch and pyproject.toml 2023-01-11 17:37:36 -08:00
pattern.py add NamedPattern 2023-01-27 10:07:39 -08:00
ports.py Default to adding ports at the origin 2023-01-26 19:16:34 -08:00
py.typed add py.typed to enable type checking for downstream 2020-05-19 00:15:51 -07:00
README.md Move from setuputils and setup.py to hatch and pyproject.toml 2023-01-11 17:37:36 -08:00
ref.py stringy type 2023-01-31 12:07:50 -08:00
repetition.py various fixes and cleanup 2023-01-25 23:57:02 -08:00

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.

Installation

Requirements:

  • python >= 3.8
  • numpy
  • klamath (optional, used for gdsii i/o)
  • 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:

pip3 install 'masque[visualization,oasis,dxf,svg,text]'

Alternatively, install from git

pip3 install git+https://mpxd.net/code/jan/masque.git@release

Translation

  • Pattern: OASIS or GDS "Cell", DXF "Block"
  • Ref: GDS "AREF/SREF", OASIS "Placement"
  • Shape: OASIS or GDS "Geometry element", DXF "LWPolyline" or "Polyline"
  • repetition: OASIS "repetition". GDS "AREF" is a Ref 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
  • Deal with shape repetitions for dxf, svg
  • Maybe lib.create(bname) -> (name, pat)
  • Schematic:
    • Simple cell:
      • Assumes no internal hierarchy, or only other simple hierarchy
      • Return pattern, refer to it by a well-known name
    • Parametrized cell:
      • Take in lib
      • lib.create(), and return a string
      • Can have pcell hierarchy inside