Return WrapLibrary from read() and readfile()
This commit is contained in:
parent
a35bf9770a
commit
42ee4db989
@ -18,7 +18,7 @@ import ezdxf
|
||||
|
||||
from .utils import is_gzipped, tmpfile
|
||||
from .. import Pattern, Ref, PatternError, Label
|
||||
from ..library import Library, WrapROLibrary
|
||||
from ..library import Library, WrapROLibrary, WrapLibrary
|
||||
from ..shapes import Shape, Polygon, Path
|
||||
from ..repetition import Grid
|
||||
from ..utils import rotation_matrix_2d, layer_t
|
||||
@ -148,7 +148,7 @@ def readfile(
|
||||
filename: Union[str, pathlib.Path],
|
||||
*args,
|
||||
**kwargs,
|
||||
) -> Tuple[Dict[str, Pattern], Dict[str, Any]]:
|
||||
) -> Tuple[WrapLibrary, Dict[str, Any]]:
|
||||
"""
|
||||
Wrapper for `dxf.read()` that takes a filename or path instead of a stream.
|
||||
|
||||
@ -172,7 +172,7 @@ def readfile(
|
||||
|
||||
def read(
|
||||
stream: TextIO,
|
||||
) -> Tuple[Dict[str, Pattern], Dict[str, Any]]:
|
||||
) -> Tuple[WrapLibrary, Dict[str, Any]]:
|
||||
"""
|
||||
Read a dxf file and translate it into a dict of `Pattern` objects. DXF `Block`s are
|
||||
translated into `Pattern` objects; `LWPolyline`s are translated into polygons, and `Insert`s
|
||||
@ -189,16 +189,19 @@ def read(
|
||||
lib = ezdxf.read(stream)
|
||||
msp = lib.modelspace()
|
||||
|
||||
npat = _read_block(msp)
|
||||
patterns_dict = dict(
|
||||
[npat] + [_read_block(bb) for bb in lib.blocks if bb.name != '*Model_Space']
|
||||
)
|
||||
top_name, top_pat = _read_block(msp)
|
||||
mlib = WrapLibrary({top_name: top_pat})
|
||||
for bb in lib.blocks:
|
||||
if bb.name == '*Model_Space':
|
||||
continue
|
||||
name, pat = _read_block(bb)
|
||||
mlib[name] = pat
|
||||
|
||||
library_info = dict(
|
||||
layers=[ll.dxfattribs() for ll in lib.layers],
|
||||
)
|
||||
|
||||
return patterns_dict, library_info
|
||||
return mlib, library_info
|
||||
|
||||
|
||||
def _read_block(block) -> Tuple[str, Pattern]:
|
||||
|
@ -161,7 +161,7 @@ def readfile(
|
||||
filename: Union[str, pathlib.Path],
|
||||
*args,
|
||||
**kwargs,
|
||||
) -> Tuple[Dict[str, Pattern], Dict[str, Any]]:
|
||||
) -> Tuple[WrapLibrary, Dict[str, Any]]:
|
||||
"""
|
||||
Wrapper for `read()` that takes a filename or path instead of a stream.
|
||||
|
||||
@ -186,7 +186,7 @@ def readfile(
|
||||
def read(
|
||||
stream: IO[bytes],
|
||||
raw_mode: bool = True,
|
||||
) -> Tuple[Dict[str, Pattern], Dict[str, Any]]:
|
||||
) -> Tuple[WrapLibrary, Dict[str, Any]]:
|
||||
"""
|
||||
# TODO check GDSII file for cycles!
|
||||
Read a gdsii file and translate it into a dict of Pattern objects. GDSII structures are
|
||||
@ -209,15 +209,15 @@ def read(
|
||||
"""
|
||||
library_info = _read_header(stream)
|
||||
|
||||
patterns_dict = {}
|
||||
mlib = WrapLibrary()
|
||||
found_struct = records.BGNSTR.skip_past(stream)
|
||||
while found_struct:
|
||||
name = records.STRNAME.skip_and_read(stream)
|
||||
pat = read_elements(stream, raw_mode=raw_mode)
|
||||
patterns_dict[name.decode('ASCII')] = pat
|
||||
mlib[name.decode('ASCII')] = pat
|
||||
found_struct = records.BGNSTR.skip_past(stream)
|
||||
|
||||
return patterns_dict, library_info
|
||||
return mlib, library_info
|
||||
|
||||
|
||||
def _read_header(stream: IO[bytes]) -> Dict[str, Any]:
|
||||
|
@ -206,7 +206,7 @@ def readfile(
|
||||
filename: Union[str, pathlib.Path],
|
||||
*args,
|
||||
**kwargs,
|
||||
) -> Tuple[Dict[str, Pattern], Dict[str, Any]]:
|
||||
) -> Tuple[WrapLibrary, Dict[str, Any]]:
|
||||
"""
|
||||
Wrapper for `oasis.read()` that takes a filename or path instead of a stream.
|
||||
|
||||
@ -230,7 +230,7 @@ def readfile(
|
||||
|
||||
def read(
|
||||
stream: IO[bytes],
|
||||
) -> Tuple[Dict[str, Pattern], Dict[str, Any]]:
|
||||
) -> Tuple[WrapLibrary, Dict[str, Any]]:
|
||||
"""
|
||||
Read a OASIS file and translate it into a dict of Pattern objects. OASIS cells are
|
||||
translated into Pattern objects; Polygons are translated into polygons, and Placements
|
||||
@ -261,7 +261,7 @@ def read(
|
||||
layer_map[str(layer_name.nstring)] = layer_name
|
||||
library_info['layer_map'] = layer_map
|
||||
|
||||
patterns_dict = {}
|
||||
mlib = WrapLibrary()
|
||||
for cell in lib.cells:
|
||||
if isinstance(cell.name, int):
|
||||
cell_name = lib.cellnames[cell.name].nstring.string
|
||||
@ -463,9 +463,9 @@ def read(
|
||||
for placement in cell.placements:
|
||||
pat.refs.append(_placement_to_ref(placement, lib))
|
||||
|
||||
patterns_dict[cell_name] = pat
|
||||
mlib[cell_name] = pat
|
||||
|
||||
return patterns_dict, library_info
|
||||
return mlib, library_info
|
||||
|
||||
|
||||
def _mlayer2oas(mlayer: layer_t) -> Tuple[int, int]:
|
||||
|
Loading…
Reference in New Issue
Block a user