import { PropertyChangeObservable } from '../PropertyChangeObservable';
import { Vertex3 } from '../math';
import { Color3, Plane, Scene } from './babylonjs-import';
/**
 * A mapping from clip plane names to values of type T.
 * Used to represent a set of clip planes, e.g. for configuration or state.
 *
 * @template T The value type for each clip plane (e.g. ClipPlane, configuration object, etc).
 */
export type ClipPlanes<T = PropertyChangeObservable<ClipPlane>> = {
    [plane in ClipPlaneName]?: T;
};
/**
 * The valid names for supported clip planes in a Babylon.js scene.
 *
 * These correspond to the properties 'clipPlane', 'clipPlane2', ..., 'clipPlane6' on a Babylon.js Scene.
 */
export type ClipPlaneName = keyof Pick<Scene, 'clipPlane' | 'clipPlane2' | 'clipPlane3' | 'clipPlane4' | 'clipPlane5' | 'clipPlane6'>;
/**
 * Base type for clip plane configuration, specifying whether the plane is enabled and its index.
 */
export type ClipPlanePoint = {
    /**
     * Whether the clip plane is enabled (`boolean`).
     */
    readonly enabled: boolean;
    /**
     * The name/index of the clip plane.
     */
    readonly clipPlaneIndex: ClipPlaneName;
};
/**
 * Configuration for enabling a clip plane at a specific point and normal.
 *
 * When enabled, the plane clips geometry at the given point and normal, and applies the specified color and fade.
 */
export type EnableClipPlanePoint = {
    /**
     * Must be `true` to enable the plane.
     */
    readonly enabled: true;
    /**
     * The point on the plane (origin for the plane equation).
     */
    readonly point: Vertex3;
    /**
     * The normal vector of the plane (should be normalized).
     */
    readonly normalVector: Vertex3;
    /**
     * The color to apply at the intersection (optional).
     */
    readonly color?: Color3;
    /**
     * How much the color is smudged (faded) over the clipped area (optional, `number`).
     */
    readonly fadeSize?: number;
    /**
     * If `true`, disables depth writing for this plane (optional, `boolean`).
     */
    readonly ignoreDepthWrite?: boolean;
} & ClipPlanePoint;
/**
 * Configuration for disabling a clip plane.
 */
export type DisableClipPlanePoint = {
    /**
     * Must be `false` to disable the plane.
     */
    readonly enabled: false;
} & ClipPlanePoint;
/**
 * Union type for clip plane configuration: either enabled (with point/normal) or disabled.
 */
export type ClipPlaneOptions = EnableClipPlanePoint | DisableClipPlanePoint;
/**
 * Represents a single clipping plane in a 3D scene.
 *
 * A ClipPlane defines a plane by position and normal, and can be enabled or disabled.
 * When enabled, geometry intersecting the plane is clipped and the intersection is colored using the plane's color.
 * The `fadeSize` property controls how much the color is smudged (faded) over the clipped area.
 *
 * ClipPlane instances are used to clip IFC geometry in a scene.
 */
export declare class ClipPlane {
    /**
     * Whether this clip plane is enabled and actively clipping geometry.
     */
    enabled: boolean;
    /**
     * The name/index of this clip plane (e.g. 'clipPlane', 'clipPlane2', ...).
     */
    readonly index: ClipPlaneName;
    /**
     * The position (origin) of the clip plane in 3D space.
     */
    readonly position: Vertex3;
    /**
     * The normal vector of the clip plane. Should always be normalized.
     */
    readonly normal: Vertex3;
    /**
     * The color applied to the intersection where geometry is clipped by this plane.
     */
    readonly color: Color3;
    /**
     * The underlying Babylon.js Plane object representing this clip plane.
     */
    readonly plane: Plane;
    /**
     * Controls how much the clip color is faded (smudged) over the clipped area. Higher values increase the fade distance.
     */
    fadeSize: number;
    /**
     * If `true`, disables depth writing for geometry clipped by this plane.
     */
    ignoreDepthWrite: boolean;
    /**
     * Set of all valid clip plane names supported by the system.
     */
    static readonly allClipPlanes: Set<"clipPlane" | "clipPlane2" | "clipPlane3" | "clipPlane4" | "clipPlane5" | "clipPlane6">;
    private static _clipPlanes;
    /**
     * Creates a set of observable ClipPlane instances from a configuration object.
     * @param o An object mapping clip plane names to their initial color.
     * @returns A map of clip plane names to observable ClipPlane instances.
     */
    static create(o: ClipPlanes<{
        readonly color: Color3;
    }>): ClipPlanes;
    /**
     * Constructs a new ClipPlane.
     * @param index The name/index of the clip plane.
     * @param color The color to use for the clipped intersection.
     */
    private constructor();
    /**
     * Iterates over all valid entries in a ClipPlanes object.
     * @param o The ClipPlanes object to iterate.
     */
    static entries<T>(o: ClipPlanes<T>): IterableIterator<[ClipPlaneName, T]>;
    /**
     * Iterates over all valid values in a ClipPlanes object.
     * @param o The ClipPlanes object to iterate.
     */
    static values<T>(o: ClipPlanes<T>): IterableIterator<T>;
    /**
     * Looks up a ClipPlane by name.
     * @param name The name of the clip plane.
     * @returns The ClipPlane instance.
     * @throws If the clip plane does not exist.
     */
    static entry(name: ClipPlaneName): ClipPlane;
}
//# sourceMappingURL=ClipPlane.d.ts.map