Source code for py3dtiles.tileset.content.tile_content_reader

from __future__ import annotations

from pathlib import Path
from typing import TYPE_CHECKING

from py3dtiles.exceptions import Invalid3dtilesError

from .b3dm import B3dm
from .gltf import Gltf, PointsGltf
from .pnts import Pnts

if TYPE_CHECKING:
    from py3dtiles.tileset.content import TileContent

__all__ = ["read_binary_tile_content"]


[docs] def read_binary_tile_content(tile_path: Path) -> TileContent: with tile_path.open("rb") as f: data = f.read() magic = data[:4] tile_content: TileContent | None = None if magic == b"pnts": tile_content = Pnts.from_bytes(data) if magic == b"b3dm": tile_content = B3dm.from_bytes(data) if magic == b"glTF": tile_content = Gltf.from_bytes(data) if PointsGltf.can_build_from_gltf(tile_content._gltf): tile_content = PointsGltf(tile_content._gltf) if tile_content is None: raise Invalid3dtilesError( f"The file {tile_path} doesn't contain a valid TileContent data." ) return tile_content