Formally allow instances to point to None (i.e. an 'empty' pattern)
This commit is contained in:
parent
f8c49cdb5e
commit
00394a62f0
6 changed files with 54 additions and 17 deletions
|
|
@ -100,7 +100,9 @@ def write(patterns: Pattern or List[Pattern],
|
|||
# Get a dict of id(pattern) -> pattern
|
||||
patterns_by_id = {id(pattern): pattern for pattern in patterns}
|
||||
for pattern in patterns:
|
||||
patterns_by_id.update(pattern.referenced_patterns_by_id())
|
||||
for i, p in pattern.referenced_patterns_by_id().items():
|
||||
if p is not None:
|
||||
patterns_by_id[i] = p
|
||||
|
||||
disambiguate_func(patterns_by_id.values())
|
||||
|
||||
|
|
@ -170,7 +172,9 @@ def dose2dtype(patterns: List[Pattern],
|
|||
# Get a dict of id(pattern) -> pattern
|
||||
patterns_by_id = {id(pattern): pattern for pattern in patterns}
|
||||
for pattern in patterns:
|
||||
patterns_by_id.update(pattern.referenced_patterns_by_id())
|
||||
for i, p in pattern.referenced_patterns_by_id().items():
|
||||
if p is not None:
|
||||
patterns_by_id[i] = p
|
||||
|
||||
# Get a table of (id(pat), written_dose) for each pattern and subpattern
|
||||
sd_table = make_dose_table(patterns)
|
||||
|
|
@ -466,6 +470,8 @@ def _subpatterns_to_refs(subpatterns: List[SubPattern or GridRepetition]
|
|||
) -> List[gdsii.elements.ARef or gdsii.elements.SRef]:
|
||||
refs = []
|
||||
for subpat in subpatterns:
|
||||
if subpat.pattern is None:
|
||||
continue
|
||||
encoded_name = subpat.pattern.name
|
||||
|
||||
# Note: GDS mirrors first and rotates second
|
||||
|
|
|
|||
|
|
@ -61,6 +61,8 @@ def writefile(pattern: Pattern,
|
|||
# Now create a group for each row in sd_table (ie, each pattern + dose combination)
|
||||
# and add in any Boundary and Use elements
|
||||
for pat in patterns_by_id.values():
|
||||
if pat is None:
|
||||
continue
|
||||
svg_group = svg.g(id=mangle_name(pat), fill='blue', stroke='red')
|
||||
|
||||
for shape in pat.shapes:
|
||||
|
|
@ -75,6 +77,8 @@ def writefile(pattern: Pattern,
|
|||
svg_group.add(path)
|
||||
|
||||
for subpat in pat.subpatterns:
|
||||
if subpat.pattern is None:
|
||||
continue
|
||||
transform = 'scale({:g}) rotate({:g}) translate({:g},{:g})'.format(
|
||||
subpat.scale, subpat.rotation, subpat.offset[0], subpat.offset[1])
|
||||
use = svg.use(href='#' + mangle_name(subpat.pattern), transform=transform)
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ def make_dose_table(patterns: List[Pattern], dose_multiplier: float=1.0) -> Set[
|
|||
dose_table = {(id(pattern), dose_multiplier) for pattern in patterns}
|
||||
for pattern in patterns:
|
||||
for subpat in pattern.subpatterns:
|
||||
if subpat.pattern is None:
|
||||
continue
|
||||
subpat_dose_entry = (id(subpat.pattern), subpat.dose * dose_multiplier)
|
||||
if subpat_dose_entry not in dose_table:
|
||||
subpat_dose_table = make_dose_table([subpat.pattern], subpat.dose * dose_multiplier)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue