Add modify_originals param and don't modify the pattern by default
This commit is contained in:
parent
783c0c0844
commit
d6d26b4e46
@ -8,6 +8,7 @@ import gdsii.elements
|
|||||||
|
|
||||||
from typing import List, Any, Dict, Tuple
|
from typing import List, Any, Dict, Tuple
|
||||||
import re
|
import re
|
||||||
|
import copy
|
||||||
import numpy
|
import numpy
|
||||||
import base64
|
import base64
|
||||||
import struct
|
import struct
|
||||||
@ -37,7 +38,8 @@ def write(patterns: Pattern or List[Pattern],
|
|||||||
filename: str,
|
filename: str,
|
||||||
meters_per_unit: float,
|
meters_per_unit: float,
|
||||||
logical_units_per_unit: float = 1,
|
logical_units_per_unit: float = 1,
|
||||||
library_name: str = 'masque-gdsii-write'):
|
library_name: str = 'masque-gdsii-write',
|
||||||
|
modify_originals: bool = False):
|
||||||
"""
|
"""
|
||||||
Write a Pattern or list of patterns to a GDSII file, by first calling
|
Write a Pattern or list of patterns to a GDSII file, by first calling
|
||||||
.polygonize() to change the shapes into polygons, and then writing patterns
|
.polygonize() to change the shapes into polygons, and then writing patterns
|
||||||
@ -50,8 +52,6 @@ def write(patterns: Pattern or List[Pattern],
|
|||||||
datatype is chosen to be shape.layer[1] if available,
|
datatype is chosen to be shape.layer[1] if available,
|
||||||
otherwise 0
|
otherwise 0
|
||||||
|
|
||||||
Note that this function modifies the Pattern.
|
|
||||||
|
|
||||||
It is often a good idea to run pattern.subpatternize() prior to calling this function,
|
It is often a good idea to run pattern.subpatternize() prior to calling this function,
|
||||||
especially if calling .polygonize() will result in very many vertices.
|
especially if calling .polygonize() will result in very many vertices.
|
||||||
|
|
||||||
@ -67,16 +67,22 @@ def write(patterns: Pattern or List[Pattern],
|
|||||||
Default 1.
|
Default 1.
|
||||||
:param library_name: Library name written into the GDSII file.
|
:param library_name: Library name written into the GDSII file.
|
||||||
Default 'masque-gdsii-write'.
|
Default 'masque-gdsii-write'.
|
||||||
|
:param modify_originals: If True, the original pattern is modified as part of the writing
|
||||||
|
process. Otherwise, a copy is made.
|
||||||
|
Default False.
|
||||||
"""
|
"""
|
||||||
|
if not modify_originals:
|
||||||
|
patterns = copy.deepcopy(patterns)
|
||||||
|
|
||||||
|
if isinstance(patterns, Pattern):
|
||||||
|
patterns = [patterns]
|
||||||
|
|
||||||
# Create library
|
# Create library
|
||||||
lib = gdsii.library.Library(version=600,
|
lib = gdsii.library.Library(version=600,
|
||||||
name=library_name.encode('ASCII'),
|
name=library_name.encode('ASCII'),
|
||||||
logical_unit=logical_units_per_unit,
|
logical_unit=logical_units_per_unit,
|
||||||
physical_unit=meters_per_unit)
|
physical_unit=meters_per_unit)
|
||||||
|
|
||||||
if isinstance(patterns, Pattern):
|
|
||||||
patterns = [patterns]
|
|
||||||
|
|
||||||
# Get a dict of id(pattern) -> pattern
|
# Get a dict of id(pattern) -> pattern
|
||||||
patterns_by_id = {id(pattern): pattern for pattern in patterns}
|
patterns_by_id = {id(pattern): pattern for pattern in patterns}
|
||||||
for pattern in patterns:
|
for pattern in patterns:
|
||||||
|
Loading…
Reference in New Issue
Block a user