py3dtiles.tilers.point.node package#

class py3dtiles.tilers.point.node.DummyNode(_bytes: DummyNodeDictType)[source]#

Bases: object

get_points() Points | None[source]#
class py3dtiles.tilers.point.node.Grid(spacing: float, include_rgb: bool, extra_fields: list[ExtraFieldsDescription], initial_count: int = 3)[source]#

Bases: object

docstring for Grid

balance(aabb_size: ndarray[Any, dtype[float32]], aabmin: ndarray[Any, dtype[float32]], inv_aabb_size: ndarray[Any, dtype[float32]]) None[source]#
cell_count#
cells_extra_fields: dict[str, list[ndarray[Any, dtype[Any]]]]#
cells_rgb: list[ndarray[Any, dtype[uint8 | uint16]]] | None#
cells_xyz: list[ndarray[Any, dtype[uint16 | float32]]]#
get_point_count() int[source]#
get_points() Points | None[source]#
init_cells(aabmin: ndarray[Any, dtype[float32]], inv_aabb_size: ndarray[Any, dtype[float32]], xyz: ndarray[Any, dtype[float32 | uint16]], rgb: ndarray[Any, dtype[uint8 | uint16]] | None, extra_fields: dict[str, ndarray[Any, dtype[Any]]]) None[source]#
insert(aabmin: ndarray[Any, dtype[float32]], inv_aabb_size: ndarray[Any, dtype[float32]], xyz: ndarray[Any, dtype[float32 | uint16]], rgb: ndarray[Any, dtype[uint8 | uint16]] | None, extra_fields: dict[str, ndarray[Any, dtype[T]]]) tuple[ndarray[Any, dtype[float32]], ndarray[Any, dtype[uint8]] | None, dict[str, ndarray[Any, dtype[int8]] | ndarray[Any, dtype[int16]] | ndarray[Any, dtype[int32]] | ndarray[Any, dtype[int64]] | ndarray[Any, dtype[uint8]] | ndarray[Any, dtype[uint16]] | ndarray[Any, dtype[uint32]] | ndarray[Any, dtype[uint64]] | ndarray[Any, dtype[float16]] | ndarray[Any, dtype[float32]] | ndarray[Any, dtype[float64]] | ndarray[Any, dtype[longdouble]]], bool][source]#
property max_key_value: int#
needs_balance() bool[source]#
spacing#
class py3dtiles.tilers.point.node.Node(name: bytes, aabb: ndarray[Any, dtype[float64 | float32]], spacing: float, include_rgb: bool, extra_fields: list[ExtraFieldsDescription])[source]#

Bases: object

docstring for Node

aabb#
aabb_center#
aabb_size#
children: list[bytes] | None#
static create_child_node_from_parent(name: bytes, parent_aabb: npt.NDArray[np.floating[_T]], parent_spacing: float, include_rgb: bool, extra_fields: list[ExtraFieldsDescription]) Node[source]#
dirty#
dump_pending_points() list[tuple[bytes, bytes, int]][source]#
extra_fields#
flush_pending_points(catalog: NodeCatalog, scale: float) None[source]#
get_child_names() Generator[bytes, None, None][source]#
get_pending_points_count() int[source]#
get_point_count(node_catalog: NodeCatalog, max_depth: int, depth: int = 0) int[source]#
get_points() Points | None[source]#
grid#
include_rgb#
insert(scale: float, points: Points, make_empty_node: bool = False) None[source]#
inv_aabb_size#
load_from_bytes(byt: bytes) None[source]#
name#
needs_balance() bool[source]#
pending_points: list[Points]#
points: list[Points]#
save_to_bytes() bytes[source]#
spacing#
to_tileset(folder: Path, scale: ndarray[Any, dtype[float32]], parent_node: Node | None = None, depth: int = 0, pool_executor: ProcessPoolExecutor | None = None) Tile | None[source]#
class py3dtiles.tilers.point.node.NodeCatalog(nodes: bytes, name: bytes, root_aabb: ndarray[Any, dtype[float64]], root_spacing: float, include_rgb: bool, extra_fields: list[ExtraFieldsDescription])[source]#

Bases: object

NodeCatalog is a store of Node objects.

Using a NodeCatalog allows to only store a children names in nodes, instead of storing a full recursive structure.

dump(name: bytes, max_depth: int) bytes[source]#

Serialize the stored nodes to a bytes list

get_node(name: bytes) Node[source]#

Returns the node mathing the given name

class py3dtiles.tilers.point.node.NodeProcess(node_catalog: NodeCatalog, scale: float, name: bytes, tasks: list[bytes], begin: float, log_file: TextIO | None)[source]#

Bases: object

infer_depth_from_name() int[source]#
run() Generator[tuple[bytes, bytes, int], None, None][source]#
class py3dtiles.tilers.point.node.SharedNodeStore(folder: Path)[source]#

Bases: object

A class that implements a compressed storage for arbitrary data, that is able to limit the amount of ram it uses by temporary storing part of the storage on disk for later retrieval.

The memory limit is not automatic at the moment, but instead is done by calling self.control_memory_usage.

control_memory_usage(max_size_mb: int, verbose: int) None[source]#

Limit the memory usage of this instance.

get(name: bytes, stat_inc: int = 1) bytes[source]#

Get a node storage.

Parameters:

name – the name of the node

print_statistics() None[source]#
put(name: bytes, data: bytes) None[source]#

Insert or change

remove(name: bytes) None[source]#

Remove a node from this storage.

remove_oldest_nodes(percent: float = 100) tuple[int, int][source]#

Submodules#