import { type Types as coreTypes } from '@cornerstonejs/core';
import { AnnotationTool, type Types as toolsTypes } from '@cornerstonejs/tools';
/**
 * @description 负责可拖拽元素交互
 * @author jiannan.jiao
 * @date 21/09/2023
 * @class DraggableTool
 * @extends {AnnotationDisplayTool}
 */
declare class DraggableTool extends AnnotationTool {
    static toolName: string;
    constructor(toolProps?: toolsTypes.PublicToolProps, defaultToolProps?: toolsTypes.ToolProps);
    /**
     * @description 应用于靶点、基准标记点的拖拽添加
     * @author jiannan.jiao
     * @date 21/09/2023
     * @param {toolsTypes.EventTypes.InteractionEventType} evt
     * @param {toolsTypes.InteractionTypes} interactionType
     * @returns {*}  {toolsTypes.Annotation}
     * @memberof DraggableTool
     */
    addNewAnnotation(evt: toolsTypes.EventTypes.InteractionEventType, interactionType: toolsTypes.InteractionTypes): toolsTypes.Annotation;
    /**
     * @description
     * @author jiannan.jiao
     * @date 21/09/2023
     * @param {HTMLDivElement} element 记录接收到的参数，勿删
     * @memberof DraggableTool
     */
    cancel(): void;
    /**
     * @description 选中一个可拖拽元素
     * @author jiannan.jiao
     * @date 21/09/2023
     * @param {toolsTypes.EventTypes.InteractionEventType} evt
     * @param {toolsTypes.Annotation} annotation
     * @param {toolsTypes.ToolHandle} handle
     * @param {toolsTypes.InteractionTypes} interactionType
     * @memberof DraggableTool
     */
    handleSelectedCallback(evt: toolsTypes.EventTypes.InteractionEventType, annotation: toolsTypes.Annotation, handle: toolsTypes.ToolHandle, interactionType: toolsTypes.InteractionTypes): void;
    /**
     * @description
     * @author jiannan.jiao
     * @date 21/09/2023
     * @param {toolsTypes.EventTypes.InteractionEventType} evt
     * @param {toolsTypes.Annotation} annotation
     * @param {toolsTypes.InteractionTypes} interactionType
     * @memberof DraggableTool
     */
    toolSelectedCallback(evt: toolsTypes.EventTypes.InteractionEventType, annotation: toolsTypes.Annotation, interactionType: toolsTypes.InteractionTypes): void;
    /**
     * @description 当鼠标移动执行完getHandleNearImagePoint未找到annotation时执行这里
     * 参照AngleTool的实现发现可以用于判断鼠标是否在端点连线上，可用于头框注册
     * @author jiannan.jiao
     * @date 21/09/2023
     * @param {HTMLDivElement} element
     * @param {toolsTypes.Annotation} annotation
     * @param {coreTypes.Point2} canvasCoords
     * @param {number} proximity
     * @param {string} interactionType
     * @returns {*}  {boolean}
     * @memberof DraggableTool
     */
    isPointNearTool(element: HTMLDivElement, annotation: toolsTypes.Annotation, canvasCoords: coreTypes.Point2, proximity: number, interactionType: string): boolean;
    /**
     * @description mouseMove.ts和mouseDown.ts中获取鼠标点下Annotations，会获取到视口中全部的Annotations，然后调用对应工具的getHandleNearImagePoint确定是否靠近其中的某个点。
     * 需要根据患者原点、影像中心等不同类型控制点绘制的半径执行判断，为设置判断程序的控制点使用父类的getHandleNearImagePoint作为默认处理程序
     * @author jiannan.jiao
     * @date 21/09/2023
     * @param {HTMLDivElement} element
     * @param {toolsTypes.Annotation} annotation
     * @param {coreTypes.Point2} canvasCoords
     * @param {number} proximity 针对浏览器端的默认靠近值为6
     * @returns {*}
     * @memberof DraggableTool
     */
    getHandleNearImagePoint(element: HTMLDivElement, annotation: toolsTypes.Annotation, canvasCoords: coreTypes.Point2, proximity: number): toolsTypes.ToolHandle | undefined;
    /**
     * @description 父类中定义的抽象方法，这里定义出来防止报错，渲染交给DraggableDisplayTool执行
     * @author jiannan.jiao
     * @date 21/09/2023
     * @param {coreTypes.IEnabledElement} enabledElement 记录接收到的参数，勿删
     * @param {toolsTypes.SVGDrawingHelper} svgDrawingHelper 记录接收到的参数，勿删
     * @memberof DraggableTool
     */
    renderAnnotation(): void;
    /**
     * @description 监听CORNERSTONE_TOOLS_MOUSE_CLICK事件，当发生时触发CORNERSTONE_TOOLS_MOUSE_UP
     * @author jiannan.jiao
     * @date 17/10/2023
     * @param {toolsTypes.EventTypes.MouseClickEventType} evt
     * @memberof DraggableTool
     */
    mouseClickCallback: (evt: toolsTypes.EventTypes.MouseClickEventType) => void;
    /**
     * @description 重写父类的filterInteractableAnnotationsForElement，处理多个可拖拽元素重叠时鼠标点选时选中项与高亮不一致的问题
     * @author jiannan.jiao
     * @date 13/10/2023
     * @param {HTMLDivElement} element
     * @param {toolsTypes.Annotations} annotations
     * @returns {*}  {(toolsTypes.Annotations | undefined)}
     * @memberof DraggableTool
     * @override
     */
    filterInteractableAnnotationsForElement(element: HTMLDivElement, annotations: toolsTypes.Annotations): toolsTypes.Annotations | undefined;
    /**
     * @description 重写父类的mouseMoveCallback，处理多个可拖拽元素重叠时鼠标移入均会高亮显示的问题
     * @author jiannan.jiao
     * @date 09/10/2023
     * @param {toolsTypes.EventTypes.MouseMoveEventType} evt
     * @param {toolsTypes.Annotations} [filteredAnnotations]
     * @memberof DraggableTool
     * @override
     */
    mouseMoveCallback: (evt: toolsTypes.EventTypes.MouseMoveEventType, filteredAnnotations?: toolsTypes.Annotations) => boolean;
    private _imagePointNearOrOnline;
}
export default DraggableTool;
