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

171 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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