Return WrapLibrary from read() and readfile()

libcentric
Jan Petykiewicz 1 year ago
parent 9351f5b5f8
commit 3205091286

@ -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…
Cancel
Save