Files
bim_engine/.sisyphus/plans/measure-clearall.md

6.0 KiB
Raw Blame History

测量功能 clearAllMeasures 封装

Context

Original Request

封装测量功能的 clearAllMeasures() 方法,并对接到 UI 的"删除全部"按钮。

Interview Summary

Key Discussions:

  • 封装原则:所有底层引擎调用(this.engine.*)必须封装在 Engine 组件中
  • Manager 层只调用 Engine 组件的公共方法,禁止直接使用 getEngine()
  • 当前 MeasurePanel 的 clearAll() 方法已调用 onClearAll 回调
  • 当前 MeasureDialogManager 的 onClearAll 回调只有 console.log未调用引擎方法

Research Findings:

  • 第三方引擎 APImeasure.clearAll() - 清除所有测量标注
  • 现有代码已有类似封装模式(如 activateMeasuredeactivateMeasure
  • MeasurePanel 组件调用 onClearAll 回调后已清空 UI 结果显示

Work Objectives

Core Objective

在 Engine 组件中封装 clearAllMeasures() 方法,并在 MeasureDialogManager 的 onClearAll 回调中调用该方法,实现 UI "删除全部"按钮的完整功能对接。

Concrete Deliverables

  • Engine 组件新增 clearAllMeasures() 公共方法
  • MeasureDialogManager 的 onClearAll 回调调用引擎方法

Definition of Done

  • 点击测量面板的"删除全部"按钮,控制台输出 清除所有测量标注(代码已实现)
  • 3D 场景中的测量标注被清除(代码已实现,需用户手动验证)

Must Have

  • 方法命名为 clearAllMeasures(),与现有命名风格一致
  • 添加引擎初始化检查(与现有方法一致)
  • 添加 console.log 输出用于调试
  • 中文注释说明方法功能

Must NOT Have (Guardrails)

  • 不封装 clearMeasurePoints() 方法(本次范围外)
  • 不对接测量结果回调(本次范围外)
  • 不修改 MeasurePanel 组件(已完成 UI 逻辑)
  • Manager 层不直接调用 getEngine()

Verification Strategy (MANDATORY)

Test Decision

  • Infrastructure exists: NO
  • User wants tests: NO (简单封装,手动验证)
  • Framework: none
  • QA approach: Manual verification

Task Flow

Task 1 (Engine 封装) → Task 2 (Manager 对接)

Parallelization

Task Depends On Reason
2 1 Manager 需要调用 Engine 的新方法

TODOs

  • 1. Engine 组件添加 clearAllMeasures 方法

    What to do:

    • src/components/engine/index.ts 的测量功能方法区域(第 388 行之前,getCurrentMeasureType() 方法之后)添加 clearAllMeasures() 公共方法
    • 方法内部调用 this.engine.measure.clearAll()
    • 添加引擎初始化检查(与 deactivateMeasure() 方法一致)
    • 添加 console.log 输出:清除所有测量标注
    • 添加中文 JSDoc 注释

    Must NOT do:

    • 不封装 clearMeasurePoints() 方法
    • 不修改现有方法

    Parallelizable: NO (Task 2 依赖此任务)

    References:

    Pattern References (existing code to follow):

    • src/components/engine/index.ts:366-378 - deactivateMeasure() 方法:参考其引擎初始化检查和 console.log 输出模式

    API/Type References:

    • docs/ENGINNE_3D/API文档.md:946-952 - 第三方引擎 measure.clearAll() API 说明

    Acceptance Criteria:

    Manual Execution Verification:

    • 检查 src/components/engine/index.ts 文件
    • 确认新增 clearAllMeasures() 方法
    • 确认方法位于 getCurrentMeasureType() 方法之后、// ==================== 结束:测量功能方法 ==================== 注释之前
    • 确认方法包含引擎初始化检查
    • 确认方法调用 this.engine.measure.clearAll()

    Commit: YES

    • Message: feat(engine): add clearAllMeasures method for measure cleanup
    • Files: src/components/engine/index.ts

  • 2. MeasureDialogManager onClearAll 回调调用引擎方法

    What to do:

    • src/managers/measure-dialog-manager.tsonClearAll 回调中(第 46-48 行)
    • 在 console.log 之后添加 this.registry.engine3d?.clearAllMeasures();

    Must NOT do:

    • 不使用 getEngine() 直接调用底层引擎
    • 不修改 MeasurePanel 组件

    Parallelizable: NO (依赖 Task 1)

    References:

    Pattern References (existing code to follow):

    • src/managers/measure-dialog-manager.ts:42-45 - onModeChange 回调:参考其调用 registry.engine3d?.activateMeasure(mode) 的模式
    • src/managers/measure-dialog-manager.ts:77-80 - onBeforeDestroy 方法:参考其调用 registry.engine3d.deactivateMeasure() 的模式

    Acceptance Criteria:

    Manual Execution Verification:

    • 检查 src/managers/measure-dialog-manager.ts 文件
    • 确认 onClearAll 回调中添加了 this.registry.engine3d?.clearAllMeasures();
    • 运行 npm run build - 构建成功
    • 运行 npm run dev:demo(需要用户手动测试)
    • 打开测量面板,进行测量操作
    • 点击"删除全部"按钮
    • 控制台输出包含 清除所有测量标注
    • 3D 场景中的测量标注被清除

    Commit: YES

    • Message: feat(measure): connect clearAll button to engine clearAllMeasures method
    • Files: src/managers/measure-dialog-manager.ts

Commit Strategy

After Task Message Files Verification
1 feat(engine): add clearAllMeasures method for measure cleanup src/components/engine/index.ts 代码审查
2 feat(measure): connect clearAll button to engine clearAllMeasures method src/managers/measure-dialog-manager.ts npm run dev:demo + 手动测试

Success Criteria

Verification Commands

npm run dev:demo  # 启动 HTML Demo
# 手动测试:打开测量面板 → 进行测量 → 点击"删除全部" → 验证标注清除

Final Checklist

  • Engine 组件有 clearAllMeasures() 公共方法
  • MeasureDialogManager 的 onClearAll 回调调用引擎方法
  • 点击"删除全部"按钮后3D 场景中的测量标注被清除(代码已实现)
  • 控制台无报错(构建成功)