Highlights: - Pather.path_into() for connecting into existing ports - Pattern.plugged() for removing ports which were manually pathed into each other. - Defined ordering/comparsions to enable sorting patterns and shapes - numpy 2.0 compatibility - Fix bounds calculation for arrays with manhattan rotations - Bugfixes for DXF and OASIS - Speed improvement for default Library.get_name() and GDS writing
93 lines
2.8 KiB
Python
93 lines
2.8 KiB
Python
"""
|
|
masque 2D CAD library
|
|
|
|
masque is an attempt to make a relatively compact library for designing lithography
|
|
masks. The general idea is to implement something resembling the GDSII and OASIS file-formats,
|
|
but with some additional vectorized element types (eg. ellipses, not just polygons), and the
|
|
ability to interface with multiple file formats.
|
|
|
|
`Pattern` is a basic object containing a 2D lithography mask, composed of a list of `Shape`
|
|
objects, a list of `Label` objects, and a list of references to other `Patterns` (using
|
|
`Ref`).
|
|
|
|
`Ref` provides basic support for nesting `Pattern` objects within each other, by adding
|
|
offset, rotation, scaling, repetition, and other such properties to a Pattern reference.
|
|
|
|
Note that the methods for these classes try to avoid copying wherever possible, so unless
|
|
otherwise noted, assume that arguments are stored by-reference.
|
|
|
|
|
|
NOTES ON INTERNALS
|
|
==========================
|
|
- Many of `masque`'s classes make use of `__slots__` to make them faster / smaller.
|
|
Since `__slots__` doesn't play well with multiple inheritance, often they are left
|
|
empty for superclasses and it is the subclass's responsibility to set them correctly.
|
|
- File I/O submodules are not imported by `masque.file` to avoid creating hard dependencies
|
|
on external file-format reader/writers
|
|
- Try to accept the broadest-possible inputs: e.g., don't demand an `ILibraryView` if you
|
|
can accept a `Mapping[str, Pattern]` and wrap it in a `LibraryView` internally.
|
|
"""
|
|
|
|
from .utils import (
|
|
layer_t as layer_t,
|
|
annotations_t as annotations_t,
|
|
SupportsBool as SupportsBool,
|
|
)
|
|
from .error import (
|
|
MasqueError as MasqueError,
|
|
PatternError as PatternError,
|
|
LibraryError as LibraryError,
|
|
BuildError as BuildError,
|
|
)
|
|
from .shapes import (
|
|
Shape as Shape,
|
|
Polygon as Polygon,
|
|
Path as Path,
|
|
Circle as Circle,
|
|
Arc as Arc,
|
|
Ellipse as Ellipse,
|
|
)
|
|
from .label import Label as Label
|
|
from .ref import Ref as Ref
|
|
from .pattern import (
|
|
Pattern as Pattern,
|
|
map_layers as map_layers,
|
|
map_targets as map_targets,
|
|
chain_elements as chain_elements,
|
|
)
|
|
|
|
from .library import (
|
|
ILibraryView as ILibraryView,
|
|
ILibrary as ILibrary,
|
|
LibraryView as LibraryView,
|
|
Library as Library,
|
|
LazyLibrary as LazyLibrary,
|
|
AbstractView as AbstractView,
|
|
TreeView as TreeView,
|
|
Tree as Tree,
|
|
)
|
|
from .ports import (
|
|
Port as Port,
|
|
PortList as PortList,
|
|
)
|
|
from .abstract import Abstract as Abstract
|
|
from .builder import (
|
|
Builder as Builder,
|
|
Tool as Tool,
|
|
Pather as Pather,
|
|
RenderPather as RenderPather,
|
|
RenderStep as RenderStep,
|
|
BasicTool as BasicTool,
|
|
PathTool as PathTool,
|
|
)
|
|
from .utils import (
|
|
ports2data as ports2data,
|
|
oneshot as oneshot,
|
|
)
|
|
|
|
|
|
__author__ = 'Jan Petykiewicz'
|
|
|
|
__version__ = '3.2'
|
|
version = __version__ # legacy
|