import { G3d, MeshSection } from './g3d';
import { FilterMode, G3dMeshIndex } from './g3dMeshIndex';
import { G3dMeshCounts, G3dMeshOffsets } from './g3dMeshOffsets';
export declare type G3dSubset = G3dSubsetOG | G3dSubset2;
export declare class G3dSubset2 {
    private _source;
    private _instances;
    private _meshes;
    private _meshInstances;
    constructor(source: G3dMeshIndex | G3d, instances: number[]);
    getMesh(index: number): number;
    getMeshCount(): number;
    /**
     * Returns index count for given mesh and section.
     */
    getMeshIndexCount(mesh: number, section: MeshSection): number;
    /**
     * Returns vertext count for given mesh and section.
     */
    getMeshVertexCount(mesh: number, section: MeshSection): number;
    /**
     * Returns instance count for given mesh.
     * @param mesh The index of the mesh from the g3dIndex.
     */
    getMeshInstanceCount(mesh: number): number;
    /**
     * Returns the list of mesh-based instance indices for given mesh or undefined if all instances are included.
     * @param mesh The index of the mesh from the g3dIndex.
     */
    getMeshInstances(mesh: number): number[];
    /**
    * Returns index-th mesh-based instance index for given mesh.
    * @param mesh The index of the mesh from the g3dIndex.
    */
    getMeshInstance(mesh: number, index: number): number;
    /**
     * Returns a new subset that only contains unique meshes.
     */
    filterUniqueMeshes(): G3dSubset2;
    /**
     * Returns a new subset that only contains non-unique meshes.
     */
    filterNonUniqueMeshes(): G3dSubset2;
    private filterByCount;
    /**
   * Returns offsets needed to build geometry.
   */
    getOffsets(section: MeshSection): G3dMeshOffsets;
    getAttributeCounts(section?: MeshSection): G3dMeshCounts;
    getBoudingBox(): Float32Array;
    filter(mode: FilterMode, filter: number[]): G3dSubset2;
    private filterOnArray;
}
/**
 * Represents a filter applied to a G3dMeshIndex.
 */
export declare class G3dSubsetOG {
    private _source;
    private _instances;
    private _meshes;
    private _meshInstances;
    /**
     * @param index G3d source geometry.
     * @param meshes indices of meshes to include or undefined if all meshes.
     * @param meshToInstances indices of instances to include for each mesh or undefined if all meshes.
     */
    constructor(index: G3dMeshIndex | G3d, instances: number[], meshes: number[], meshToInstances: number[][]);
    getBoudingBox(): Float32Array;
    getMesh(index: number): number;
    getMeshCount(): number;
    /**
     * Returns index count for given mesh and section.
     */
    getMeshIndexCount(mesh: number, section: MeshSection): number;
    /**
     * Returns vertext count for given mesh and section.
     */
    getMeshVertexCount(mesh: number, section: MeshSection): number;
    /**
     * Returns instance count for given mesh.
     * @param mesh The index of the mesh from the g3dIndex.
     */
    getMeshInstanceCount(mesh: number): number;
    /**
    * Returns index-th mesh-based instance index for given mesh. Returns -1 otherwise.
    * @param mesh The index of the mesh from the g3dIndex.
    */
    getMeshInstance(mesh: number, index: number): number;
    /**
     * Returns the list of mesh-based instance indices for given mesh or undefined if all instances are included.
     * @param mesh The index of the mesh from the g3dIndex.
     */
    getMeshInstances(mesh: number): number[];
    /**
     * Returns a new subset that only contains unique meshes.
     */
    filterUniqueMeshes(): G3dSubsetOG;
    /**
     * Returns a new subset that only contains non-unique meshes.
     */
    filterNonUniqueMeshes(): G3dSubsetOG;
    private filterByCount;
    /**
     * Returns offsets needed to build geometry.
     */
    getOffsets(section: MeshSection): G3dMeshOffsets;
    getAttributeCounts(section?: MeshSection): G3dMeshCounts;
}
