add support for labels (e.g. GDS TEXT)

This commit is contained in:
jan 2018-08-30 23:06:31 -07:00
commit 108694551b
3 changed files with 57 additions and 13 deletions

View file

@ -11,7 +11,7 @@ import re
import numpy
from .utils import mangle_name, make_dose_table
from .. import Pattern, SubPattern, PatternError
from .. import Pattern, SubPattern, PatternError, Label
from ..shapes import Polygon
from ..utils import rotation_matrix_2d, get_bit, set_bit, vector2, is_scalar
@ -74,6 +74,7 @@ def write(patterns: Pattern or List[Pattern],
structure = gdsii.structure.Structure(name=encoded_name)
lib.append(structure)
# Add a Boundary element for each shape
for shape in pat.shapes:
layer, data_type = _mlayer2gds(shape.layer)
@ -83,6 +84,14 @@ def write(patterns: Pattern or List[Pattern],
structure.append(gdsii.elements.Boundary(layer=layer,
data_type=data_type,
xy=xy_closed))
for label in pat.labels:
layer, text_type = _mlayer2gds(label.layer)
xy_closed = numpy.round([label.offset, label.offset]).astype(int)
structure.append(gdsii.elements.Text(layer=layer,
text_type=text_type,
xy=xy_closed,
string=label.string.encode('ASCII')))
# Add an SREF for each subpattern entry
# strans must be set for angle and mag to take effect
for subpat in pat.subpatterns:
@ -200,6 +209,14 @@ def write_dose2dtype(patterns: Pattern or List[Pattern],
structure.append(gdsii.elements.Boundary(layer=layer,
data_type=data_type,
xy=xy_closed))
for label in pat.labels:
layer, text_type = _mlayer2gds(label.layer)
xy_closed = numpy.round([label.offset, label.offset]).astype(int)
structure.append(gdsii.elements.Text(layer=layer,
text_type=text_type,
xy=xy_closed,
string=label.string.encode('ASCII')))
# Add an SREF for each subpattern entry
# strans must be set for angle and mag to take effect
for subpat in pat.subpatterns:
@ -311,6 +328,12 @@ def read(filename: str,
pat.shapes.append(shape)
elif isinstance(element, gdsii.elements.Text):
label = Label(offset=element.xy,
layer=(element.layer, element.text_type),
string=element.string.decode('ASCII'))
pat.labels.append(label)
elif isinstance(element, gdsii.elements.SRef):
pat.subpatterns.append(ref_element_to_subpat(element, element.xy))