Source code for py3dtiles.tileset.content.tile_content_reader

from __future__ import annotations

from pathlib import Path
from typing import TYPE_CHECKING

import numpy as np
import numpy.typing as npt

from py3dtiles.exceptions import Invalid3dtilesError

from .b3dm import B3dm
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() arr = np.frombuffer(data, dtype=np.uint8) tile_content = read_array(arr) if tile_content is None or tile_content.header is None: raise Invalid3dtilesError( f"The file {tile_path} doesn't contain a valid TileContent data." ) return tile_content
def read_array(array: npt.NDArray[np.uint8]) -> TileContent | None: magic = "".join([c.decode("UTF-8") for c in array[0:4].view("c")]) if magic == "pnts": return Pnts.from_array(array) if magic == "b3dm": return B3dm.from_array(array) return None