/**
 * @module vim-loader
 */
import * as THREE from 'three';
import { Vim } from './vim';
import { IElement, VimHelpers } from 'vim-format';
import { Submesh } from './mesh';
import { IVimElement } from '../../shared/vim';
/**
 * High level api to interact with the loaded vim   ometry and data.
 */
export declare class Element3D implements IVimElement {
    private _color;
    private _boundingBox;
    private _meshes;
    private readonly _outlineAttribute;
    private readonly _visibleAttribute;
    private readonly _coloredAttribute;
    private readonly _focusedAttribute;
    private readonly _colorAttribute;
    /**
     * Indicate whether this object is architectural or markup.
     */
    readonly type = "Element3D";
    /**
     * The vim object from which this object came from.
     */
    readonly vim: Vim;
    /**
     * The bim element index associated with this object.
     */
    readonly element: number;
    /**
     * The ID of the element associated with this object.
     */
    get elementId(): bigint;
    /**
     * The geometry instances  associated with this object.
     */
    readonly instances: number[] | undefined;
    /**
     * Checks if this object has associated geometry.
     * @returns {boolean} True if this object has geometry, otherwise false.
     */
    get hasMesh(): boolean;
    get isRoom(): boolean;
    /**
     * Determines whether to render selection outline for this object or not.
     */
    get outline(): boolean;
    set outline(value: boolean);
    /**
     * Determines whether to render focus highlight for this object or not.
     */
    get focused(): boolean;
    set focused(value: boolean);
    /**
     * Determines whether to render this object or not.
     */
    get visible(): boolean;
    set visible(value: boolean);
    /**
     * Gets or sets the display color of this object.
     * @param {THREE.Color | undefined} color The color to apply. Pass undefined to revert to the default color.
     * @returns {THREE.Color} The current color of the object.
     */
    get color(): THREE.Color | undefined;
    set color(color: THREE.Color | undefined);
    private get renderer();
    /**
     * Constructs a new instance of Object.
     * @param {Vim} vim The Vim instance.
     * @param {number} element The element index.
     * @param {number[] | undefined} instances An optional array of instance numbers.
     * @param {Submesh[] | undefined} meshes An optional array of submeshes.
     */
    constructor(vim: Vim, element: number, instances: number[] | undefined, meshes: Submesh[] | undefined);
    /**
     * Asynchronously retrieves Bim data for the element associated with this object.
     * @returns {IElement} An object containing the bim data for this element.
     */
    getBimElement(): Promise<IElement>;
    /**
     * Asynchronously retrieves Bim parameters for the element associated with this object.
     * @returns {VimHelpers.ElementParameter[]} An array of all bim parameters for this elements.
     */
    getBimParameters(): Promise<VimHelpers.ElementParameter[]>;
    /**
     * Retrieves the bounding box of the object from cache or computes it if needed.
     * Returns undefined if the element is abstract.
     * @returns {THREE.Box3 | undefined} The bounding box of the object, or undefined if the object has no geometry.
     */
    getBoundingBox(): Promise<THREE.Box3>;
    /**
     * Retrieves the center position of this object.
     * @param {THREE.Vector3} [target=new THREE.Vector3()] Optional parameter specifying where to copy the center position data.
     * A new instance is created if none is provided.
     * @returns {THREE.Vector3 | undefined} The center position of the object, or undefined if the object has no geometry.
     */
    getCenter(target?: THREE.Vector3): Promise<THREE.Vector3>;
    /**
     * Internal method used to replace this object's meshes and apply color as needed.
     * @param {Submesh} mesh The new mesh to be added.
     * @throws {Error} Throws an error if the provided mesh instance does not match any existing instances.
     */
    _addMesh(mesh: Submesh): void;
    private updateMeshes;
}
