import { type Nullable } from "../../types.js";
import { type Scene } from "../../scene.js";
import { Mesh } from "../mesh.js";
import { type GaussianSplattingMesh } from "./gaussianSplattingMesh.js";
import { type Ray } from "../../Culling/ray.core.js";
import { PickingInfo } from "../../Collisions/pickingInfo.js";
/**
 * Class used as a proxy mesh for a part of a compound Gaussian Splatting mesh
 */
export declare class GaussianSplattingPartProxyMesh extends Mesh {
    /**
     * The Gaussian Splatting mesh that this proxy represents a part of
     */
    readonly proxiedMesh: GaussianSplattingMesh;
    /**
     * The index of the part in the compound mesh (internal storage)
     */
    private _partIndex;
    /**
     * Gets the index of the part in the compound mesh
     */
    get partIndex(): number;
    /**
     * The original Gaussian Splatting mesh that was merged into the compound
     */
    readonly compoundSplatMesh: GaussianSplattingMesh;
    /**
     * Creates a new Gaussian Splatting part proxy mesh
     * @param name The name of the proxy mesh
     * @param scene The scene the proxy mesh belongs to
     * @param compoundSplatMesh The original Gaussian Splatting mesh that was merged into the compound
     * @param proxiedMesh The Gaussian Splatting mesh that this proxy represents a part of
     * @param partIndex The index of the part in the compound mesh
     */
    constructor(name: string, scene: Nullable<Scene>, compoundSplatMesh: GaussianSplattingMesh, proxiedMesh: GaussianSplattingMesh, partIndex: number);
    /**
     * Updates the bounding info of this proxy mesh from the proxied mesh
     */
    updateBoundingInfoFromProxiedMesh(): void;
    /**
     * Returns the class name
     * @returns "GaussianSplattingPartProxyMesh"
     */
    getClassName(): string;
    /**
     * Updates the part index for this proxy mesh.
     * This should only be called internally when parts are removed from the compound mesh.
     * @param newPartIndex the new part index
     * @internal
     */
    updatePartIndex(newPartIndex: number): void;
    /**
     * Gets whether the part is visible
     */
    get isVisible(): boolean;
    /**
     * Sets whether the part is visible
     */
    set isVisible(value: boolean);
    /**
     * Gets the visibility of the part (0.0 to 1.0)
     */
    get visibility(): number;
    /**
     * Sets the visibility of the part (0.0 to 1.0)
     */
    set visibility(value: number);
    /**
     * Checks if a ray intersects with this proxy mesh using only bounding info
     * @param ray defines the ray to test
     * @returns the picking info with this mesh set as pickedMesh if hit
     */
    intersects(ray: Ray): PickingInfo;
}
