/**
 * LineControlPointProcessor - 多段线控制柄处理器
 *
 * ====== 类作用说明 ======
 * 该处理器用于处理多段线(PolyLine)控制柄的拖动操作。
 * 当用户拖动多段线中间的控制柄时，此类负责实时更新线条的几何形态。
 *
 * ====== 所属链路说明 ======
 *
 * 完整链路调用链：
 * 1. LineControlPointMode (流模式入口)
 *    - 条件：PolyLineControlPointDetector 检测到多段线控制柄时激活
 *    - 包含 LineControlPointProcessor
 *
 * 2. LineControlPointProcessor (流处理器)
 *    - onStart: 初始化检测结果，开启日志
 *    - onMove: 拖动过程中实时更新线条
 *    - onUp: 释放时完成最终更新
 *
 * ====== 控制柄数据结构 ======
 *
 * 当 PolyLineControlPointDetector 检测到控制柄时，返回 LineControlRes：
 * - line: 被操作的多段线节点
 * - point: 控制柄位置（线段中点）
 * - isHorizon: 线段是否为水平方向
 * - lIndex: 线段左端点在 points 数组中的索引
 * - rIndex: 线段右端点在 points 数组中的索引
 *
 * ====== 核心逻辑说明 ======
 *
 * 控制柄类型说明：
 * - MidControlPointHandler: 普通线段中点（最常用）
 * - StraightLineControlPointHandler: 直线控制柄
 * - StartPolyControlPointHandler: 起点辅助段控制柄
 * - EndPolyControlPointHandler: 终点辅助段控制柄
 *
 * shouldPreserveEndpointBends() 逻辑：
 * - 如果拖动的是起点侧的线段（lIndex === 0）且起点有连接，保持端点弯曲
 * - 如果拖动的是终点侧的线段（rIndex === points.length - 1）且终点有连接，保持端点弯曲
 * - 目的：保持线条与连接节点的正确关系
 *
 * unitMove() 执行流程：
 * 1. 获取当前线条和缩放比例
 * 2. 判断是否保持端点弯曲
 * 3. 计算拖动后新的线条端点
 * 4. 验证端点有效性
 * 5. 如果是最终状态（streaming=false），处理多段线特殊逻辑
 * 6. 计算新的边界框
 * 7. 更新线条的 LineProps 和 BaseProps
 * 8. 执行 UpdateNodeLog
 * 9. 处理线条文本工作
 *
 * ====== streaming 参数说明 ======
 *
 * - streaming = true: 拖动过程中的中间状态
 *   - points 直接使用计算结果
 *   - 用于实时预览效果
 *
 * - streaming = false: 释放鼠标时的最终状态
 *   - points 经过 GraphicUtils.dealWithPolyPoints 处理
 *   - 可能会有额外的多段线处理逻辑（如手柄、辅助线等）
 *   - 标记日志结束
 *
 */
import { StreamProcessor } from "../../basic/StreamProcessor";
import { InteractiveEvent } from "../../../../common/index";
import { AppEventContext } from "../../../../app/index";
import { LineControlRes } from "../../detector/PolyLineControlPointDetector";
import { IPoint } from "../../../../idl/index";
import { AbsControlPointHandler } from "./handler/AbsControlPointHandler";
import { LineTextWorker } from "../../../../ability/line/LineTextWorker";
import { RelatedGroupBaseWorker } from "../../../../ability/group/RelatedGroupBaseWorker";
export declare class LineControlPointProcessor extends StreamProcessor {
    /** 检测结果，存储当前操作的线条控制柄信息 */
    res: LineControlRes;
    /**
     * 控制柄处理器列表
     *
     * 处理逻辑：
     * 1. MidControlPointHandler - 普通中点：最常用，处理大多数拖动
     * 2. StraightLineControlPointHandler - 直线：处理直线类型的控制柄
     * 3. StartPolyControlPointHandler - 起点辅助段：处理与起点连接的辅助段
     * 4. EndPolyControlPointHandler - 终点辅助段：处理与终点连接的辅助段
     *
     * 注意：按顺序遍历，找到第一个 enable() 返回 true 的处理器
     */
    handlers: AbsControlPointHandler[];
    /** 线条文本工作器，用于处理线条上的文本标签 */
    lineTextWorker: LineTextWorker;
    groupBaseWorker: RelatedGroupBaseWorker;
    /**
     * onStart - 处理器开始时的初始化
     *
     * 执行流程：
     * 1. 检测 PolyControlPoint，获取 LineControlRes（控制柄信息）
     * 2. 开启日志记录
     * 3. 初始化线条文本工作器
     *
     * @param event - 交互事件
     * @param ctx - 应用事件上下文
     */
    onStart(event: InteractiveEvent, ctx: AppEventContext): void;
    /**
     * onMove - 拖动过程中的实时更新
     *
     * 调用 unitMove，streaming = true
     * 用于实时预览拖动效果
     *
     * @param event - 交互事件
     * @param ctx - 应用事件上下文
     */
    onMove(event: InteractiveEvent, ctx: AppEventContext): void;
    /**
     * onUp - 释放鼠标时的最终更新
     *
     * 调用 unitMove，streaming = false
     * 然后结束日志记录
     *
     * @param event - 交互事件
     * @param ctx - 应用事件上下文
     */
    onUp(event: InteractiveEvent, ctx: AppEventContext): void;
    /**
     * unitMove - 拖动/释放的统一处理逻辑
     *
     * @param event - 交互事件
     * @param ctx - 应用事件上下文
     * @param streaming - 是否为中间状态
     *
     * streaming = true 时的行为：
     * - points 直接使用 computeLinePoints 的结果
     * - 用于实时预览
     *
     * streaming = false 时的行为：
     * - points 经过 GraphicUtils.dealWithPolyPoints 处理
     * - 可能会有多段线的额外处理（如手柄计算）
     * - 最后更新线条数据
     */
    unitMove(event: InteractiveEvent, ctx: AppEventContext, streaming: boolean): void;
    /**
     * computeLinePoints - 计算拖动后的线条端点
     *
     * 遍历所有控制柄处理器，找到第一个支持当前情况的处理器
     * 调用该处理器的 handle 方法计算新的端点
     *
     * @param event - 交互事件
     * @param ctx - 应用事件上下文
     * @returns 新的线条端点数组
     */
    computeLinePoints(event: InteractiveEvent, ctx: AppEventContext): IPoint[];
    /**
     * isValidPoints - 验证端点数组有效性
     *
     * 有效性条件：
     * 1. 端点数量至少为 2
     * 2. 每个端点的 x 和 y 都是有限的数字（不是 NaN、Infinity）
     *
     * @param points - 待验证的端点数组
     * @returns 是否有效
     */
    private isValidPoints;
}
//# sourceMappingURL=LineControlPointProcessor.d.ts.map