IFClite TypeScript API
    Preparing search index...

    Interface PointCloudNode

    interface PointCloudNode {
        bindGroup: GPUBindGroup;
        bounds: { max: [number, number, number]; min: [number, number, number] };
        chunks: PointCloudGpuChunk[];
        keyedIndexes?: Map<string, PointCloudSpatialIndex>;
        meta: PointCloudNodeMeta;
        model?: Float32Array<ArrayBufferLike>;
        placement?: Float64Array<ArrayBufferLike>;
        pointCount: number;
        rteOrigin?: [number, number, number];
        spatialIndex: PointCloudSpatialIndex;
        uniformBuffer: GPUBuffer;
    }
    Index
    bindGroup: GPUBindGroup
    bounds: { max: [number, number, number]; min: [number, number, number] }
    chunks: PointCloudGpuChunk[]
    keyedIndexes?: Map<string, PointCloudSpatialIndex>

    One snap index per removable key, so removing a key drops its points (#6869).

    model?: Float32Array<ArrayBufferLike>

    Optional per-asset GPU model matrix (column-major, 16 floats), Its linear part is applied in the vertex shader; the translation is separately retained as rteOrigin and split against the camera before projection. That keeps a georeferenced cloud aligned without rounding a map-grid origin into an f32 matrix (issue #1804, #5049).

    placement?: Float64Array<ArrayBufferLike>

    Canonical f64 placement for CPU work (bounds, ray snap and measurement). model is deliberately a GPU-only f32 linear transform: its translation is not authoritative at map-grid offsets.

    pointCount: number
    rteOrigin?: [number, number, number]

    Exact model translation retained until the RTE upload boundary.

    spatialIndex: PointCloudSpatialIndex

    CPU spatial index over this node's points (issue #1860), so the measure tool can snap to real scan points even though chunks above holds only opaque GPU buffers. Built incrementally in appendChunkToNode, alongside the GPU upload.

    uniformBuffer: GPUBuffer