Skip to content

[Task] 绘图交互硬化 (PR #174) 宿主接入与引擎缺口补齐清单 #175

Description

@363045841

背景

PR #174 (feat(core): 绘图交互硬化) 已成功将 fork 侧验证的绘图交互能力(OHLC 磁吸、locked 强制语义、Shift 多选、hitTestAt 与编辑路径磁吸)下沉至核心引擎层。

由于该 PR 严格遵循“纯引擎改动”原则,未包含任何宿主或 UI 层的接入代码,导致当前上游呈现“引擎能力就绪,但界面无入口”的状态。开发者无法直接在 <KLineChart> 组件上进行可视化操作或手工测试,必须依赖自定义宿主或控制台指令触发。

本 Issue 旨在系统性地登记上述能力缺口,作为后续任务拆分、UI 接入及架构决策的追踪清单。当前评估基于 PR #174 分支(head 2cba8a7f)的工作区状态。


A. 宿主层接入缺口 (引擎已就绪,亟待 UI 消费)

以下功能在引擎层已实现,但缺乏宿主层的调用入口或 UI 控件。

编号 缺失功能 当前现状 / 证据 补齐行动项 (Action Item)
A1 磁吸模式切换入口 DrawingInteractionController.setMagnetMode 全仓库无调用点;左侧工具栏 (LeftToolbar.vue) 缺失对应控件。 在工具栏新增 off / weak / strong 档位开关,并绑定对应 API。
A2 磁吸修饰键交互提示 Ctrl/Cmd 临时取反与 Shift 互斥逻辑仅在引擎层实现,UI 层缺乏用户引导。 在磁吸开关旁补充 Tooltip 或状态栏文案说明。
A3 图元锁定/解锁操作入口 locked 属性目前仅能通过底层 API (updateBatch / updateDrawing / 导入配置) 写入。 在右键菜单或属性面板中新增锁定/解锁的可视化操作入口。
A4 橡皮擦与对象树 Hover 支持 hitTestAt 接口目前无任何调用点。 宿主层接入 hitTestAt,或补充对象树/橡皮擦的 UI 交互逻辑。
A5 分步绘制状态提示 getAnchorCountForTool 及锚点数表已从引擎导出,但 UI 层未消费(此前由宿主自行维护副本)。 在绘制过程中接入该数据,展示“第 n / N 次点击”的进度提示。
A6 填充样式 (Fill) 控件 DrawingStyleToolbar.vue 目前仅支持颜色、线宽、线型与删除操作,缺失 fill 与 fillOpacity 控件。 补充填充控件(注:引擎层 getBatchStyleKeys 已确保对全通道类集合无条件包含 fill 键)。
A7 公共 API 暴露规范 hitTestAt 与 setMagnetMode 仅存在于 DrawingInteractionController 内部,ChartController 未暴露,useDrawingManager 亦非公开导出。 需决策是否将其提升至 ChartController 公共接口层(见下方“待拍板”)。

B. 引擎层能力缺口 (PR 未覆盖或明确延后)

以下功能在当前 PR 中未完全覆盖,或基于设计考量被明确延后,需持续追踪。

编号 缺失功能 当前现状 / 证据 备注 / 影响
B1 水平/垂直线整线拖拽的磁吸 设计文档已明确:整线拖拽采用位移增量语义,暂不吸附。 属后续任务,需先行定义 delta 到 snap 的映射语义。
B2 锁定图元的标签编辑未拦截 DrawingInteractionController.getLineLabelTarget (packages/core/src/engine/drawing/interaction.ts:167-182) 的候选列表未过滤 locked 状态。 存在锁定语义漏洞,锁定的线或区域标签仍可被 hover 并触发编辑。
B3 未来区域 (Future Area) 的磁吸行为 磁吸 X 轴无条件吸附至 Bar 中心并夹取到有效 Bar 范围,导致最后一根 K 线右侧的落点被强制拉回,丢失 futureOffset。 属设计取舍,需确认当前行为是否符合产品预期。
B4 框选 (box-select) 模式下的 Shift 多选 Shift 多选逻辑目前仅在 cursor 分支 (handleCursorDown) 生效。 需根据产品实际需求评估是否扩展至框选模式。

待拍板决策 (需架构/产品确认)

  1. API 暴露边界 (对应 A7)
    上述交互能力是应统一收敛至 ChartController 作为公共接口暴露,还是保持现状,仅允许高级宿主自行实例化或访问 DrawingInteractionController?
  2. 锁定语义与未来区域行为 (对应 B2 / B3)
    • 锁定状态 (locked) 是否应严格拦截所有交互,包括标签的 Hover 与编辑?
    • 未来区域(最后一根 K 线右侧)是否允许磁吸?若允许,如何兼容 futureOffset 的偏移量计算?

验收标准 (Definition of Done)

  1. 交互闭环:A1 至 A6 每一项补齐后,必须能够在上游 <KLineChart> 组件上直接进行手工测试,无需依赖自定义宿主或控制台指令。
  2. 测试覆盖:引擎侧的任何补充改动必须配套相应的单元测试;涉及视觉或交互行为的变更,必须补充视觉回归或行为回归测试。
  3. 文档同步:A1 至 A6 任一项合入主分支后,需同步更新对应手工测试步骤与相关用户文档。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    feat功能请求、跟进

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions