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

171 lines
6.0 KiB
Markdown
Raw Normal View 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**:
- 第三方引擎 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] 控制台无报错(构建成功)