import { NativeNDArray, NDArrayFloat32 } from "../ndarray/NDArray";
import { OffsetBlockedBuffer } from "../ndarray/OffsetBlockedBuffer";
import { Mesh } from "./Mesh";
interface NativeOffsetBlockedIntBuffer {
    offsets(): NativeNDArray<Int32Array>;
    data(): NativeNDArray<Int32Array>;
    size(): number;
    get(i: number): NativeNDArray<Int32Array>;
    destroy(): void;
    is_valid(): boolean;
    delete(): void;
}
interface NativePointCloud {
    points(): NativeNDArray<Float32Array>;
    number_of_points(): number;
    set_points(points: NativeNDArray<Float32Array>): void;
    vertex_link(): NativeOffsetBlockedIntBuffer;
    has_vertex_link(): boolean;
    set_vertex_link(vl: NativeOffsetBlockedIntBuffer): void;
    normals(): NativeNDArray<Float32Array>;
    has_normals(): boolean;
    set_normals(n: NativeNDArray<Float32Array>): void;
    shared_view(): NativePointCloud;
    has_transformation(): boolean;
    transformation(): NativeNDArray<Float32Array>;
    set_transformation(t: NativeNDArray<Float32Array>): void;
    clear_transformation(): void;
    ensure_tree(): void;
    destroy(): void;
    is_valid(): boolean;
    delete(): void;
}
/**
 * A WASM-resident point cloud with lazy spatial tree.
 *
 * Holds point coordinates [V*3] in the WASM heap. The spatial AABB tree is
 * built lazily on first spatial query. Vertex link and normals are settable
 * (no auto-computation since there are no faces).
 *
 * Use `PointCloud.fromMesh(m)` to create from a Mesh, copying its
 * vertex link and point normals.
 */
export declare class PointCloud {
    /** @internal */
    readonly _handle: NativePointCloud;
    /** @internal */
    constructor(handle: NativePointCloud);
    /** Vertex coordinates as NDArrayFloat32 [V, 3]. */
    get points(): NDArrayFloat32;
    /** Replace vertex coordinates. Invalidates the spatial tree. */
    set points(p: NDArrayFloat32 | Float32Array);
    /** Number of points. */
    get numberOfPoints(): number;
    /** Per-vertex adjacent vertices, or null if not set. */
    get vertexLink(): OffsetBlockedBuffer | null;
    /** Set vertex link (precomputed adjacency structure). */
    set vertexLink(vl: OffsetBlockedBuffer);
    /** Point normals as NDArrayFloat32 [V, 3], or null if not set. */
    get normals(): NDArrayFloat32 | null;
    /** Set point normals. */
    set normals(n: NDArrayFloat32);
    /** 4x4 transformation matrix as NDArrayFloat32 [4,4], or null if none. */
    get transformation(): NDArrayFloat32 | null;
    /** Set a 4x4 transformation matrix, or null to clear. */
    set transformation(t: NDArrayFloat32 | Float32Array | null);
    /**
     * Creates a shared view — cheap copy sharing all data and caches.
     * Transformation is not shared (the view has no transformation).
     */
    sharedView(): PointCloud;
    /** Pre-build the spatial AABB tree. No-op if already built and up-to-date. */
    buildTree(): void;
    /**
     * Create a PointCloud from a Mesh.
     * Copies the mesh's points, vertex link, and point normals.
     */
    static fromMesh(m: Mesh): PointCloud;
    delete(): void;
    [Symbol.dispose](): void;
}
export {};
//# sourceMappingURL=PointCloud.d.ts.map