import { Vector3 } from '@babylonjs/core';
import type { BimProductMesh, BimProductMeshPreMerge } from './BimProductMesh';
import type { CullOnCameraMovePredicate } from './CullOnCameraMovePredicate';
/**
 * Represents a unique identifier for merging IFC product meshes based on spatial locality and rendering properties.
 *
 * Each `MergeId` groups {@link BimProductMesh} instances that share similar characteristics,
 * allowing them to be merged into a single BabylonJS mesh for optimized rendering.
 */
export interface MergeId {
    /** Unique string identifier encoding all merge properties (prefix, opacity, cull, level, cell coords, size). */
    readonly id: string;
    /** Center point of the grid cell in world space coordinates. */
    readonly cubeCellCenter: Vector3;
    /** Grid cell coordinates (integer indices, not world space). */
    readonly cubeCellId: Vector3;
    /** Distance at which this merge group should be culled. -1 means no distance culling. */
    readonly cullingDistance: number;
    /** Whether meshes in this group should be culled when the camera moves. */
    readonly cullOnCameraMove: boolean;
    /** Total index count of all meshes in this merge group. */
    readonly indiceCount: number;
    /** Total primitive count of all meshes in this merge group. */
    readonly primitiveCount: number;
    /** Array of product meshes assigned to this merge group. */
    readonly ifcProductMeshes: BimProductMesh[];
}
/**
 * Interface defining the algorithm for building and optimizing {@link MergeId} instances.
 * Allows for different strategies to group and merge IFC product meshes.
 */
export interface MergeIdBuilderAlgorithm {
    /**
     *  Adds a {@link BimProductMeshPreMerge} to the merge ID grouping based on the provided culling predicate.
     * @param mesh  The BIM product mesh to be added.
     * @param cullOnCameraMovePredicate Predicate to determine if the mesh should be culled on camera move.
     */
    add(mesh: BimProductMeshPreMerge, cullOnCameraMovePredicate: CullOnCameraMovePredicate): MergeId;
    /**
     * Builds and returns the array of {@link MergeId} instances.
     * @returns Array of {@link MergeId} instances.
     */
    build(): MergeId[];
}
//# sourceMappingURL=MergeId.d.ts.map