171 lines
6.0 KiB
Markdown
171 lines
6.0 KiB
Markdown
# 测量功能 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] 控制台无报错(构建成功)
|