Files
stepanalyser/.venv/lib/python3.12/site-packages/ezdxf/acis/dxf.py
Christian Anetzberger a197de9456 initial
2026-01-22 20:23:51 +01:00

83 lines
2.8 KiB
Python

# 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 []