import { Point, Rectangle, Vector3 } from '@vertexvis/geometry';
import { Color } from '@vertexvis/utils';
import { ShapeProps } from 'regl-shape';
import { CreateShape, DrawShape } from '../../lib/transforms/shape';
import { Viewport } from '../types';
export interface DrawablePoints {
    valid: boolean;
    shortestDistanceFrom(vector: Vector3.Vector3): number;
    toWorldArray(): Vector3.Vector3[];
    toArray(): Point.Point[];
}
export declare abstract class Drawable<T extends DrawablePoints = DrawablePoints> {
    protected createShape: CreateShape;
    identifier: string;
    points: T;
    outlineColor: string;
    fillColor?: string | undefined;
    shapeProps: Partial<ShapeProps>;
    disabled: boolean;
    protected pointsArray: Float64Array;
    initialFillColor?: string;
    draw: DrawShape;
    constructor(createShape: CreateShape, identifier: string, points: T, outlineColor: string, fillColor?: string | undefined, shapeProps?: Partial<ShapeProps>, disabled?: boolean);
    updateFillColor(color?: Color.Color | string, isInitialColor?: boolean): void;
    updateOutlineColor(color?: Color.Color | string): void;
    updatePoints(points?: T): void;
}
export declare function computeDrawable2dBounds(viewport: Viewport, ...elements: Drawable[]): Rectangle.Rectangle;
