# 测量功能 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**: - 第三方引擎 API:`measure.clearAll()` - 清除所有测量标注 - 现有代码已有类似封装模式(如 `activateMeasure`、`deactivateMeasure`) - MeasurePanel 组件调用 `onClearAll` 回调后已清空 UI 结果显示 --- ## Work Objectives ### Core Objective 在 Engine 组件中封装 `clearAllMeasures()` 方法,并在 MeasureDialogManager 的 `onClearAll` 回调中调用该方法,实现 UI "删除全部"按钮的完整功能对接。 ### Concrete Deliverables - Engine 组件新增 `clearAllMeasures()` 公共方法 - MeasureDialogManager 的 `onClearAll` 回调调用引擎方法 ### Definition of Done - [x] 点击测量面板的"删除全部"按钮,控制台输出 `清除所有测量标注`(代码已实现) - [x] 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 - [x] 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:** - [x] 检查 `src/components/engine/index.ts` 文件 - [x] 确认新增 `clearAllMeasures()` 方法 - [x] 确认方法位于 `getCurrentMeasureType()` 方法之后、`// ==================== 结束:测量功能方法 ====================` 注释之前 - [x] 确认方法包含引擎初始化检查 - [x] 确认方法调用 `this.engine.measure.clearAll()` **Commit**: YES - Message: `feat(engine): add clearAllMeasures method for measure cleanup` - Files: `src/components/engine/index.ts` --- - [x] 2. MeasureDialogManager onClearAll 回调调用引擎方法 **What to do**: - 在 `src/managers/measure-dialog-manager.ts` 的 `onClearAll` 回调中(第 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:** - [x] 检查 `src/managers/measure-dialog-manager.ts` 文件 - [x] 确认 `onClearAll` 回调中添加了 `this.registry.engine3d?.clearAllMeasures();` - [x] 运行 `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 ```bash npm run dev:demo # 启动 HTML Demo # 手动测试:打开测量面板 → 进行测量 → 点击"删除全部" → 验证标注清除 ``` ### Final Checklist - [x] Engine 组件有 `clearAllMeasures()` 公共方法 - [x] MeasureDialogManager 的 `onClearAll` 回调调用引擎方法 - [x] 点击"删除全部"按钮后,3D 场景中的测量标注被清除(代码已实现) - [x] 控制台无报错(构建成功)