import { Vim } from '../../../loader/vim';
import { Viewer } from '../../viewer';
import * as THREE from 'three';
import { SimpleInstanceSubmesh } from '../../../loader/mesh';
import { IVimElement } from '../../../../shared/vim';
/**
 * Marker gizmo that displays an interactive sphere at a 3D position.
 * Marker gizmos are still under development.
 */
export declare class Marker implements IVimElement {
    readonly type = "Marker";
    private _viewer;
    private _submesh;
    private static _tmpMatrix;
    private static _unitVector;
    /**
     * The Vim object from which this object came.
     * Can be undefined if the object is not part of a Vim.
     */
    vim: Vim | undefined;
    /**
     * The BIM element index associated with this object.
     * Can be undefined if the object is not part of a Vim.
     */
    element: number | undefined;
    /**
     * The geometry instances associated with this object.
     * This is used when the marker is derived from multiple instances.
     */
    instances: number[] | undefined;
    /**
     * The index of the marker in the marker collection.
     */
    get index(): number;
    private _outlineAttribute;
    private _visibleAttribute;
    private _coloredAttribute;
    private _focusedAttribute;
    private _colorAttribute;
    /**
     * Constructs a new Marker object.
     * @param viewer - The viewer managing rendering and interaction.
     * @param submesh - The instanced submesh this marker is bound to.
     */
    constructor(viewer: Viewer, submesh: SimpleInstanceSubmesh);
    /**
     * Updates the underlying submesh and rebinds all attributes to the new mesh.
     * @param mesh - The new submesh to bind to this marker.
     */
    updateMesh(mesh: SimpleInstanceSubmesh): void;
    /**
     * Sets the world position of the marker.
     */
    set position(value: THREE.Vector3);
    /**
     * Gets the world position of the marker.
     */
    get position(): THREE.Vector3;
    /**
     * Always false; marker is a gizmo and not an actual mesh.
     */
    get hasMesh(): boolean;
    /**
     * Gets whether the marker is outlined (highlighted).
     */
    get outline(): boolean;
    /**
     * Sets whether the marker is outlined (highlighted).
     */
    set outline(value: boolean);
    /**
     * Gets whether the marker is focused (enlarged).
     */
    get focused(): boolean;
    /**
     * Sets whether the marker is focused (enlarged).
     */
    set focused(value: boolean);
    /**
     * Gets whether the marker is visible in the scene.
     */
    get visible(): boolean;
    /**
     * Sets whether the marker is visible in the scene.
     */
    set visible(value: boolean);
    /**
     * Gets the current color override for the marker.
     */
    get color(): THREE.Color;
    /**
     * Sets the color override for the marker.
     * Passing undefined disables the override.
     */
    set color(color: THREE.Color | undefined);
    /**
     * Gets the uniform scale factor applied to the marker.
     */
    get size(): number;
    /**
     * Sets the uniform scale factor for the marker.
     * Only updates the matrix if the size has changed.
     */
    set size(value: number);
    /**
     * Retrieves the bounding box of the object.
     * Returns a unit-sized box centered at the marker position.
     * Returned as a promise to satisfy interface, but computed synchronously.
     * @returns The bounding box of the marker.
     */
    getBoundingBox(): Promise<THREE.Box3>;
}
