Source code for pyvista_cad._readers.three_mf
"""3MF (`.3mf`) reader and writer."""
import os
from typing import Any
import pyvista as pv
[docs]
@pv.register_reader('.3mf')
def read_three_mf(
path: str | os.PathLike[str],
/,
**_: Any,
) -> pv.MultiBlock:
"""Read a 3MF file as a :class:`pyvista.MultiBlock`.
Each ``<object>`` in the 3MF package becomes one block. Block
names match the object name when set; otherwise ``object_<n>``.
``field_data['cad.units']`` records the document unit
(``'micron'``, ``'mm'``, ``'cm'``, ``'inch'``, ``'foot'``, ``'m'``).
Parameters
----------
path : str or os.PathLike
Path to a ``.3mf`` file.
**_ : Any
Forward-compat keyword arguments are accepted and ignored.
Returns
-------
pyvista.MultiBlock
One block per mesh object.
Examples
--------
Read the bundled two-part 3MF assembly fixture:
>>> import pyvista_cad
>>> from pyvista_cad import read_three_mf
>>> mb = read_three_mf(pyvista_cad.examples.assembly_3mf_path())
>>> type(mb).__name__
'MultiBlock'
>>> str(mb.field_data['cad.source_format'][0])
'3mf'
"""
from pyvista_cad._backends._lib3mf import read_three_mf_internal
return read_three_mf_internal(path)
[docs]
def write_three_mf(
dataset: pv.PolyData | pv.MultiBlock,
path: str | os.PathLike[str],
/,
*,
units: str | None = None,
**_: Any,
) -> None:
"""Write a :class:`pyvista.PolyData` or :class:`pyvista.MultiBlock` as 3MF.
Each block becomes one 3MF mesh object. Surface meshes are
triangulated automatically.
Parameters
----------
dataset : pyvista.PolyData or pyvista.MultiBlock
Source dataset.
path : str or os.PathLike
Destination ``.3mf`` path.
units : str or None, optional
One of ``'micron'``, ``'mm'``, ``'cm'``, ``'inch'``, ``'foot'``,
``'m'``. Falls back to ``field_data['cad.units']`` if set,
otherwise lib3mf's default.
**_ : Any
Forward-compat keyword arguments are accepted and ignored.
"""
from pyvista_cad._backends._lib3mf import write_three_mf_internal
write_three_mf_internal(dataset, path, units=units)