/**
 * @module vim-loader
 */
import { G3d, MeshSection, G3dScene, FilterMode } from 'vim-format';
import { G3dMeshOffsets, G3dMeshCounts } from './g3dOffsets';
import * as THREE from 'three';
/**
 * Represents a subset of a complete scene definition.
 * Allows for further filtering or to get offsets needed to build the scene.
 */
export declare class G3dSubset {
    private _source;
    private _instances;
    /** Source-based mesh indices */
    private _meshes;
    /** Source-based instances aligned with corresponding mesh */
    private _meshInstances;
    /**
     * @param source Underlying data source for the subset
     * @param instances source-based instance indices of included instances.
     */
    constructor(source: G3dScene | G3d, instances?: number[]);
    chunks(count: number): G3dSubset[];
    /**
    /**
     * Returns total instance count in subset.
     */
    getInstanceCount(): number;
    /**
     * Returns the vim-based instance (node) for given subset-based instance.
     */
    getVimInstance(subsetIndex: number): number;
    /**
     * Returns the vim-based instances (nodes) for current subset.
     */
    getVimInstances(): number[];
    /**
     * Returns source-based mesh index.
     * @param index subset-based mesh index
     */
    getSourceMesh(index: number): number;
    /**
     * Returns total mesh count in subset.
     */
    getMeshCount(): number;
    /**
     * Returns total index count for given mesh and section.
     * @param mesh subset-based mesh index
     * @param section sections to include based on opacity
     */
    getMeshIndexCount(mesh: number, section: MeshSection): number;
    /**
     * Returns total vertex count for given mesh and section.
     * @param mesh subset-based mesh index
     * @param section sections to include based on opacity
     */
    getMeshVertexCount(mesh: number, section: MeshSection): number;
    /**
     * Returns instance count for given mesh.
     * @param mesh subset-based mesh index.
     */
    getMeshInstanceCount(mesh: number): number;
    /**
     * Returns a list of source-based instance indices for given mesh.
     * @param mesh subset-based mesh index.
     */
    getMeshInstances(mesh: number): number[];
    /**
     * Returns the source-based instance index for given mesh and index.
     * @param mesh subset-based mesh index.
     * @param index mesh-based instance index
     */
    getMeshInstance(mesh: number, index: number): number;
    /**
     * Returns a new subset that only contains unique meshes.
     */
    filterUniqueMeshes(): G3dSubset;
    /**
     * Returns a new subset that contains only the N largest meshes sorted by largest
     */
    filterLargests(count: number): G3dSubset;
    /**
     * Returns a new subset that only contains non-unique meshes.
     */
    filterNonUniqueMeshes(): G3dSubset;
    filterByCount(predicate: (i: number) => boolean): G3dSubset;
    /**
     * Returns offsets needed to build geometry.
     */
    getOffsets(section: MeshSection): G3dMeshOffsets;
    /**
     * Returns the count of each mesh attribute.
     */
    getAttributeCounts(section?: MeshSection): G3dMeshCounts;
    /**
     * Returns a new subset where the order of meshes is inverted.
     */
    reverse(): G3dSubset;
    /**
     * Returns a new subset with instances not included in given filter.
     * @param mode Defines which field the filter will be applied to.
     * @param filter Array of all values to match for.
     */
    except(mode: FilterMode, filter: number[] | Set<number>): G3dSubset;
    /**
     * Returns a new subset with instances matching given filter.
     * @param mode Defines which field the filter will be applied to.
     * @param filter Array of all values to match for.
     */
    filter(mode: FilterMode, filter: number[] | Set<number>): G3dSubset;
    private _filter;
    private filterOnArray;
    /**
     * Return the bounding box of the current subset or undefined if subset is empty.
     */
    getBoundingBox(): THREE.Box3;
}
