/**
 * AbsLineCreateHandler - 线条创建处理器抽象基类
 *
 * ====== 类作用说明 ======
 * 该类是所有线条样式创建处理器的抽象基类，定义了线条创建的通用流程和接口。
 *
 * 子类需要实现的方法：
 * - enable(shapeType: number): boolean - 判断是否支持当前线条类型
 * - layoutHandler: AbsLineLayoutHandler - 线条布局处理器（用于计算几何形态）
 *
 * ====== 线条创建流程 ======
 *
 * 1. 起点创建 (computeDownProps)
 *    - 用户按下鼠标开始绘制
 *    - 创建初始线条，设置起点位置
 *    - 如果起点在节点边缘，自动建立连接关系
 *
 * 2. 拖动过程 (computeMoveProps)
 *    - 用户拖动鼠标，终点跟随移动
 *    - 实时更新线条的几何形态
 *    - 应用对齐算法（吸附到其他元素）
 *
 * 3. 终点确认 (computeUpProps)
 *    - 用户释放鼠标，确认终点位置
 *    - 如果终点在节点边缘，自动建立连接关系
 *    - 写入最终线条数据
 *
 * ====== 坐标系统说明 ======
 *
 * 所有几何计算使用全局坐标（画布坐标）
 * 最终写入节点时转换为父容器的本地坐标
 * 转换公式：localPoint = transform.crossPoint(globalPoint)
 * 其中 transform 是父容器的逆变换矩阵
 *
 * ====== 连接机制 ======
 *
 * 当线条起点/终点位于某个节点边缘时：
 * - ConnectProps.start/end.objectId 记录连接的节点ID
 * - ConnectProps.start/end.x/y 记录在节点上的相对位置
 * - endType 记录连接点位于节点的哪一侧
 *
 * 这使得线条与节点之间建立关联，便于后续查找和维护
 */
import { AbsProps, GraphicNode, OolongLine } from "../../../../../../graphics";
import { InteractiveEvent } from "../../../../../../common";
import { AppEventContext } from "../../../../../../app";
import { ConnectInfo } from "../../../../../../graphics/base/NodeConnectEndType";
import { IPoint } from "../../../../../../idl";
import { AbsLineLayoutHandler } from "../../../../../../ability/line/handler/AbsLineLayoutHandler";
import { AlignWorker } from "../../../../align/AlignWorker";
export declare abstract class AbsLineCreateHandler {
    /**
     * 对齐工作器
     * 用于在拖动过程中吸附线条端点到其他元素
     */
    alignWorker: AlignWorker;
    /**
     * 线条布局处理器（抽象属性，子类必须实现）
     * 负责根据起点和终点计算线条的几何形态
     * - 直线：直接连接起点终点
     * - 曲线：贝塞尔曲线
     * - 折线：带断点的折线
     * - 多段线：带手柄的连续线段
     */
    abstract layoutHandler: AbsLineLayoutHandler;
    /**
     * enable - 判断是否支持当前线条类型
     *
     * @param shapeType - 线条类型（如 LineShapeType.Line、Curve、BrokenLine 等）
     * @returns 是否支持该类型
     *
     * 子类实现示例：
     * - LineCreateHandler: return shapeType === LineShapeType.Line
     * - CurveCreateHandler: return shapeType === LineShapeType.Curve
     */
    abstract enable(shapeType: number): boolean;
    /**
     * computeLinePoints - 计算线条的端点坐标
     *
     * 内部调用 InteractiveUtils.computeLinePoints
     * 检测边缘 -> 对齐检测 -> 使用 layoutHandler 计算Points
     *
     * @param startConnect - 起点连接信息
     * @param event - 当前交互事件（包含鼠标位置）
     * @param ctx - 应用事件上下文
     * @returns 线条端点数组
     */
    protected computeLinePoints(startConnect: ConnectInfo, event: InteractiveEvent, ctx: AppEventContext): IPoint[];
    /**
     * alignLinePointsInMove - 拖动过程中对齐端点
     *
     * 可被子类重写，实现自定义对齐逻辑
     * 默认实现直接返回原端点
     *
     * @param points - 原始端点数组
     * @param ctx - 应用事件上下文
     * @returns 对齐后的端点数组
     */
    protected alignLinePointsInMove(points: IPoint[], ctx: AppEventContext): IPoint[];
    /**
     * alignLinePointsInUp - 释放时对齐端点
     *
     * 可被子类重写，实现自定义对齐逻辑
     * 默认实现直接返回原端点
     *
     * @param points - 原始端点数组
     * @param ctx - 应用事件上下文
     * @returns 对齐后的端点数组
     */
    protected alignLinePointsInUp(points: IPoint[], ctx: AppEventContext): IPoint[];
    /**
     * computeDownProps - 创建线条起点时的属性计算
     *
     * 时机：用户按下鼠标，开始创建线条时调用
     *
     * 执行流程：
     * 1. 创建 ShapeProps 确定线条类型
     * 2. 检测鼠标是否在节点边缘
     *    - 如果是，建立连接关系（起点连接到该节点）
     *    - 如果否，创建空的 ConnectProps
     * 3. 创建初始线条
     *    - 由于终点还没确定，创建一个极短的假终点（起点+1,1）
     *    - 这是为了让 LineProps.points 不为空，满足后续逻辑需求
     * 4. 计算线条边界（BaseProps）
     * 5. 添加其他属性：
     *    - BorderProps: 边框属性
     *    - ArrowProps: 箭头属性
     *    - TextProps: 文本属性
     *    - LineTextRectProps: 线条文本矩形属性
     * 6. 转换坐标到父容器本地空间
     *
     * @param startConnect - 起点连接信息
     * @param ctx - 应用事件上下文
     * @param event - 交互事件
     * @param parent - 父容器节点
     * @returns 线条属性数组
     */
    computeDownProps(startConnect: ConnectInfo, ctx: AppEventContext, event: InteractiveEvent, parent: GraphicNode): Partial<AbsProps>[];
    /**
     * computeMoveProps - 线条拖动过程中的属性计算
     *
     * 时机：用户拖动鼠标，终点跟随移动时持续调用
     *
     * 执行流程：
     * 1. 处理 Shift 键约束（如强制水平/垂直线条）
     * 2. 计算当前线条的端点坐标
     * 3. 应用对齐算法（AlignWorker）
     * 4. 转换坐标到父容器本地空间
     * 5. 更新 LineProps 和 BaseProps
     * 6. 执行 UpdateNodeLog（streaming: true）
     *
     * @param startConnect - 起点连接信息
     * @param originEvent - 原始交互事件
     * @param ctx - 应用事件上下文
     * @param node - 正在创建的线条节点
     */
    computeMoveProps(startConnect: ConnectInfo, originEvent: InteractiveEvent, ctx: AppEventContext, node: OolongLine): void;
    /**
     * computeUpProps - 线条终点确认时的属性计算
     *
     * 时机：用户释放鼠标，确认线条终点时调用
     *
     * 执行流程：
     * 1. 处理 Shift 键约束
     * 2. 检测终点是否在节点边缘
     *    - 如果是，建立连接关系
     * 3. 计算最终线条端点坐标
     * 4. 应用对齐算法
     * 5. 转换坐标到父容器本地空间
     * 6. 更新线条数据
     * 7. 执行 UpdateNodeLog（streaming: false）
     *
     * 与 computeMoveProps 的区别：
     * - streaming: false 表示最终状态
     * - 会检测终点连接关系
     * - 不更新 ArrowProps 等辅助属性（已在创建时设置）
     *
     * @param startConnect - 起点连接信息
     * @param originEvent - 原始交互事件
     * @param ctx - 应用事件上下文
     * @param node - 正在创建的线条节点
     */
    computeUpProps(startConnect: ConnectInfo, originEvent: InteractiveEvent, ctx: AppEventContext, node: OolongLine): void;
}
//# sourceMappingURL=AbsLineCreateHandler.d.ts.map