/** @packageDocumentation
 * @module MarkupTools
 */
import { Point3d } from "@itwin/core-geometry";
import { BeButtonEvent, EventHandled } from "@itwin/core-frontend";
import { G, Marker, Element as MarkupElement } from "@svgdotjs/svg.js";
import { MarkupTool } from "./MarkupTool";
/** Base class for tools that place new Markup elements
 * @public
 */
export declare abstract class RedlineTool extends MarkupTool {
    protected _minPoints: number;
    protected _nRequiredPoints: number;
    protected readonly _points: Point3d[];
    protected onAdded(el: MarkupElement): void;
    protected isComplete(_ev: BeButtonEvent): boolean;
    protected setupAndPromptForNextAction(): void;
    protected createMarkup(_svgMarkup: G, _ev: BeButtonEvent, _isDynamics: boolean): void;
    protected clearDynamicsMarkup(_isDynamics: boolean): void;
    onRestartTool(): Promise<void>;
    onCleanup(): Promise<void>;
    onReinitialize(): Promise<void>;
    onUndoPreviousStep(): Promise<boolean>;
    onMouseMotion(ev: BeButtonEvent): Promise<void>;
    onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled>;
    onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled>;
    protected provideToolAssistance(mainInstrKey: string, singlePoint?: boolean): void;
}
/** Tool for placing Markup Lines
 * @public
 */
export declare class LineTool extends RedlineTool {
    static toolId: string;
    static iconSpec: string;
    protected showPrompt(): void;
    protected createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void;
}
/** Tool for placing Markup Rectangles
 * @public
 */
export declare class RectangleTool extends RedlineTool {
    protected _cornerRadius?: number | undefined;
    static toolId: string;
    static iconSpec: string;
    constructor(_cornerRadius?: number | undefined);
    protected showPrompt(): void;
    protected createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void;
}
/** Tool for placing Markup Polygons
 * @public
 */
export declare class PolygonTool extends RedlineTool {
    protected _numSides?: number | undefined;
    static toolId: string;
    static iconSpec: string;
    constructor(_numSides?: number | undefined);
    protected showPrompt(): void;
    protected getPoints(points: number[], center: Point3d, edge: Point3d, numSides: number, inscribe: boolean): boolean;
    protected createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void;
}
/** Tool for placing Markup Clouds
 * @public
 */
export declare class CloudTool extends RedlineTool {
    static toolId: string;
    static iconSpec: string;
    protected _cloud?: MarkupElement;
    protected showPrompt(): void;
    protected createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void;
    protected clearDynamicsMarkup(isDynamics: boolean): void;
}
/** Tool for placing Markup Circles
 * @public
 */
export declare class CircleTool extends RedlineTool {
    static toolId: string;
    static iconSpec: string;
    protected showPrompt(): void;
    protected createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void;
}
/** Tool for placing Markup Ellipses
 * @public
 */
export declare class EllipseTool extends RedlineTool {
    static toolId: string;
    static iconSpec: string;
    protected showPrompt(): void;
    protected createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void;
}
/** Tool for placing Markup Arrows
 * @public
 */
export declare class ArrowTool extends RedlineTool {
    protected _arrowPos?: string | undefined;
    static toolId: string;
    static iconSpec: string;
    /** ctor for ArrowTool
     * @param _arrowPos "start", "end", or "both". If undefined = "end".
     */
    constructor(_arrowPos?: string | undefined);
    protected showPrompt(): void;
    protected getOrCreateArrowMarker(color: string): Marker;
    protected createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void;
}
/** Tool for measuring distances and placing Markups of them
 * @public
 */
export declare class DistanceTool extends ArrowTool {
    static toolId: string;
    static iconSpec: string;
    protected readonly _startPointWorld: Point3d;
    protected showPrompt(): void;
    protected setupAndPromptForNextAction(): void;
    protected getFormattedDistance(distance: number): string | undefined;
    protected createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void;
    onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled>;
}
/** Tool for placing Markup freehand sketches
 * @public
 */
export declare class SketchTool extends RedlineTool {
    static toolId: string;
    static iconSpec: string;
    protected _minDistSquared: number;
    protected showPrompt(): void;
    protected createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void;
    onMouseMotion(ev: BeButtonEvent): Promise<void>;
}
/** Tool for placing SVG symbols on a Markup
 * @public
 */
export declare class SymbolTool extends RedlineTool {
    protected _symbolData?: string | undefined;
    protected _applyCurrentStyle?: boolean | undefined;
    static toolId: string;
    static iconSpec: string;
    protected _symbol?: MarkupElement;
    constructor(_symbolData?: string | undefined, _applyCurrentStyle?: boolean | undefined);
    onInstall(): Promise<boolean>;
    protected showPrompt(): void;
    protected createMarkup(svgMarkup: G, ev: BeButtonEvent, isDynamics: boolean): void;
    onDataButtonUp(ev: BeButtonEvent): Promise<EventHandled>;
    onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled>;
    protected clearDynamicsMarkup(isDynamics: boolean): void;
}
//# sourceMappingURL=RedlineTool.d.ts.map