refactor: excel parse
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
# Copyright (c) 2022-2024, Manfred Moitzi
|
||||
# License: MIT License
|
||||
from __future__ import annotations
|
||||
from typing import cast, Sequence
|
||||
from ezdxf.entities import DXFEntity, Body as DXFBody
|
||||
from ezdxf.lldxf import const
|
||||
from .entities import Body, export_sat, export_sab, load
|
||||
|
||||
|
||||
def export_dxf(entity: DXFEntity, bodies: Sequence[Body]):
|
||||
"""Store the :term:`ACIS` bodies in the given DXF entity. This is the
|
||||
recommended way to set ACIS data of DXF entities.
|
||||
|
||||
The DXF entity has to be an ACIS based entity and inherit from
|
||||
:class:`ezdxf.entities.Body`. The entity has to be bound to a valid DXF
|
||||
document and the DXF version of the document has to be DXF R2000 or newer.
|
||||
|
||||
Raises:
|
||||
DXFTypeError: invalid DXF entity type
|
||||
DXFValueError: invalid DXF document
|
||||
DXFVersionError: invalid DXF version
|
||||
|
||||
"""
|
||||
if not isinstance(entity, DXFBody):
|
||||
raise const.DXFTypeError(f"invalid DXF entity {entity.dxftype()}")
|
||||
body = cast(DXFBody, entity)
|
||||
doc = entity.doc
|
||||
if doc is None:
|
||||
raise const.DXFValueError("a valid DXF document is required")
|
||||
dxfversion = doc.dxfversion
|
||||
if dxfversion < const.DXF2000:
|
||||
raise const.DXFVersionError(f"invalid DXF version {dxfversion}")
|
||||
|
||||
if dxfversion < const.DXF2013:
|
||||
body.sat = export_sat(bodies)
|
||||
else:
|
||||
body.sab = export_sab(bodies)
|
||||
|
||||
|
||||
def load_dxf(entity: DXFEntity) -> list[Body]:
|
||||
"""Load the :term:`ACIS` bodies from the given DXF entity. This is the
|
||||
recommended way to load ACIS data.
|
||||
|
||||
The DXF entity has to be an ACIS based entity and inherit from
|
||||
:class:`ezdxf.entities.Body`. The entity has to be bound to a valid DXF
|
||||
document and the DXF version of the document has to be DXF R2000 or newer.
|
||||
|
||||
Raises:
|
||||
DXFTypeError: invalid DXF entity type
|
||||
DXFValueError: invalid DXF document
|
||||
DXFVersionError: invalid DXF version
|
||||
|
||||
.. warning::
|
||||
|
||||
Only a limited count of :term:`ACIS` entities is supported, all
|
||||
unsupported entities are loaded as ``NONE_ENTITY`` and their data is
|
||||
lost. Exporting such ``NONE_ENTITIES`` will raise an :class:`ExportError`
|
||||
exception.
|
||||
|
||||
To emphasize that again: **It is not possible to load and re-export
|
||||
arbitrary ACIS data!**
|
||||
|
||||
"""
|
||||
|
||||
if not isinstance(entity, DXFBody):
|
||||
raise const.DXFTypeError(f"invalid DXF entity {entity.dxftype()}")
|
||||
body = cast(DXFBody, entity)
|
||||
doc = entity.doc
|
||||
if doc is None:
|
||||
raise const.DXFValueError("a valid DXF document is required")
|
||||
dxfversion = doc.dxfversion
|
||||
if dxfversion < const.DXF2000:
|
||||
raise const.DXFVersionError(f"invalid DXF version {dxfversion}")
|
||||
if body.has_binary_data:
|
||||
binary_data = body.sab
|
||||
if binary_data:
|
||||
return load(binary_data)
|
||||
else:
|
||||
text = body.sat
|
||||
if text:
|
||||
return load(text)
|
||||
return []
|
||||
Reference in New Issue
Block a user