213 lines
5.3 KiB
Markdown
213 lines
5.3 KiB
Markdown
|
|
# Task 4: 最终验证指令
|
|||
|
|
|
|||
|
|
## 前置条件检查
|
|||
|
|
|
|||
|
|
在开始验证前,确保:
|
|||
|
|
1. Demo 已启动:`npm run dev:demo`
|
|||
|
|
2. 浏览器打开 localhost(通常是 http://localhost:5173)
|
|||
|
|
3. 3D 引擎已初始化:控制台检查 `window.bimEngine?.engine` 不为 null
|
|||
|
|
4. 模型已加载:3D 场景中可见 BIM 模型
|
|||
|
|
|
|||
|
|
## 验证步骤(16 项验收标准)
|
|||
|
|
|
|||
|
|
### 场景 1: 打开弹窗时(4 项)
|
|||
|
|
|
|||
|
|
**操作**:点击工具栏的"轴向剖切"按钮
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- [ ] 弹窗正常显示在容器右下角
|
|||
|
|
- [ ] 控制台输出:
|
|||
|
|
```
|
|||
|
|
[Engine] Activating section axis: x
|
|||
|
|
```
|
|||
|
|
- [ ] **视觉确认**:模型被 X 轴平面剖切(可见内部结构)
|
|||
|
|
- X 轴是前后方向,模型应该被一个垂直平面切开
|
|||
|
|
- 能看到模型内部的墙、梁、柱等结构
|
|||
|
|
- [ ] UI 状态:X 按钮显示为激活状态(高亮或不同颜色)
|
|||
|
|
|
|||
|
|
**如果失败**:
|
|||
|
|
- 如果控制台输出 `[SectionAxisDialogManager] Engine not initialized`,说明未调用 `initEngine()`
|
|||
|
|
- 如果没有剖切效果,检查模型是否加载完成
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 场景 2: 切换到 Y 轴(3 项)
|
|||
|
|
|
|||
|
|
**操作**:点击 Y 按钮
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- [ ] 控制台输出(按顺序):
|
|||
|
|
```
|
|||
|
|
[SectionAxisDialogManager] 切换轴向: y
|
|||
|
|
[Engine] Deactivating section axis: x
|
|||
|
|
[Engine] Activating section axis: y
|
|||
|
|
```
|
|||
|
|
- [ ] **视觉确认**:模型截面从 X 轴方向变为 Y 轴方向
|
|||
|
|
- Y 轴是上下方向,模型应该被水平平面切开
|
|||
|
|
- 可以看到楼层的横截面
|
|||
|
|
- [ ] UI 状态:Y 按钮激活,X 按钮恢复普通状态
|
|||
|
|
|
|||
|
|
**控制台验证**:
|
|||
|
|
```javascript
|
|||
|
|
window.bimEngine?.engine.getCurrentSectionAxis() // 应返回 'y'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 场景 3: 切换到 Z 轴(3 项)
|
|||
|
|
|
|||
|
|
**操作**:点击 Z 按钮
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- [ ] 控制台输出(按顺序):
|
|||
|
|
```
|
|||
|
|
[SectionAxisDialogManager] 切换轴向: z
|
|||
|
|
[Engine] Deactivating section axis: y
|
|||
|
|
[Engine] Activating section axis: z
|
|||
|
|
```
|
|||
|
|
- [ ] **视觉确认**:模型截面变为 Z 轴方向
|
|||
|
|
- Z 轴是左右方向,模型应该被侧面垂直平面切开
|
|||
|
|
- [ ] UI 状态:Z 按钮激活,Y 按钮恢复普通状态
|
|||
|
|
|
|||
|
|
**控制台验证**:
|
|||
|
|
```javascript
|
|||
|
|
window.bimEngine?.engine.getCurrentSectionAxis() // 应返回 'z'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 场景 4: 幂等性测试(1 项)
|
|||
|
|
|
|||
|
|
**操作**:当前 Z 轴激活,再次点击 Z 按钮
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- [ ] 控制台输出:
|
|||
|
|
```
|
|||
|
|
[SectionAxisDialogManager] 切换轴向: z
|
|||
|
|
[Engine] Section axis z already active, skipping.
|
|||
|
|
```
|
|||
|
|
- [ ] **无额外 API 调用**(没有 "Deactivating" 或 "Activating" 日志)
|
|||
|
|
- [ ] 视觉效果不变
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 场景 5: 隐藏按钮(1 项)
|
|||
|
|
|
|||
|
|
**操作**:点击"隐藏"按钮(眼睛图标)
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- [ ] 控制台输出:
|
|||
|
|
```
|
|||
|
|
[SectionAxisDialogManager] 隐藏切换(暂不支持): true/false
|
|||
|
|
```
|
|||
|
|
- [ ] **无报错**:不应该有 JavaScript 错误
|
|||
|
|
- [ ] 视觉效果不变(因为功能未实现)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 场景 6: 反向按钮(1 项)
|
|||
|
|
|
|||
|
|
**操作**:点击"反向"按钮(双向箭头图标)
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- [ ] 控制台输出:
|
|||
|
|
```
|
|||
|
|
[SectionAxisDialogManager] 反向剖切(暂不支持)
|
|||
|
|
```
|
|||
|
|
- [ ] **无报错**:不应该有 JavaScript 错误
|
|||
|
|
- [ ] 视觉效果不变(因为功能未实现)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 场景 7: 关闭弹窗(2 项)
|
|||
|
|
|
|||
|
|
**操作**:点击弹窗关闭按钮(X)
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- [ ] 控制台输出:
|
|||
|
|
```
|
|||
|
|
[Engine] Deactivating all section axis
|
|||
|
|
```
|
|||
|
|
- [ ] **视觉确认**:模型恢复完整显示(不再被剖切)
|
|||
|
|
- [ ] 工具栏按钮恢复普通状态(不再激活)
|
|||
|
|
|
|||
|
|
**控制台验证**:
|
|||
|
|
```javascript
|
|||
|
|
window.bimEngine?.engine.getCurrentSectionAxis() // 应返回 null
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 场景 8: 边界情况 - 快速切换(1 项)
|
|||
|
|
|
|||
|
|
**操作**:重新打开弹窗,快速连续点击 X → Y → Z → X
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- [ ] 每次切换都有正确的控制台日志输出
|
|||
|
|
- [ ] 最终状态:X 轴激活
|
|||
|
|
- [ ] 视觉效果:模型被 X 轴平面剖切
|
|||
|
|
- [ ] 无 JavaScript 错误
|
|||
|
|
|
|||
|
|
**控制台验证**:
|
|||
|
|
```javascript
|
|||
|
|
window.bimEngine?.engine.getCurrentSectionAxis() // 应返回 'x'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 场景 9: 边界情况 - 重新打开弹窗(额外验证)
|
|||
|
|
|
|||
|
|
**操作**:关闭弹窗后再次打开
|
|||
|
|
|
|||
|
|
**预期结果**:
|
|||
|
|
- [ ] 默认激活 X 轴(而不是上次的轴向)
|
|||
|
|
- [ ] 控制台输出:`[Engine] Activating section axis: x`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 验证工具
|
|||
|
|
|
|||
|
|
### 手动 API 测试(可选)
|
|||
|
|
|
|||
|
|
在控制台运行以下命令测试 API:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 检查引擎实例
|
|||
|
|
const engine = window.bimEngine?.engine;
|
|||
|
|
console.log('Engine instance:', engine);
|
|||
|
|
|
|||
|
|
// 测试激活方法
|
|||
|
|
engine.activateSectionAxis('x'); // 应激活 X 轴
|
|||
|
|
engine.activateSectionAxis('x'); // 应输出 "already active"
|
|||
|
|
|
|||
|
|
// 测试切换
|
|||
|
|
engine.activateSectionAxis('y'); // 应先停用 X,再激活 Y
|
|||
|
|
|
|||
|
|
// 测试停用
|
|||
|
|
engine.deactivateSectionAxis(); // 应停用所有剖切
|
|||
|
|
|
|||
|
|
// 检查状态
|
|||
|
|
console.log('Current axis:', engine.getCurrentSectionAxis()); // null
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 成功标准
|
|||
|
|
|
|||
|
|
✅ **所有 16 项验收标准通过**
|
|||
|
|
✅ **控制台无 JavaScript 错误**
|
|||
|
|
✅ **日志输出顺序正确**
|
|||
|
|
✅ **视觉效果符合预期**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 如果发现问题
|
|||
|
|
|
|||
|
|
记录以下信息:
|
|||
|
|
1. **场景编号**和**操作步骤**
|
|||
|
|
2. **实际结果**(控制台输出、视觉效果)
|
|||
|
|
3. **错误信息**(如果有)
|
|||
|
|
4. **浏览器和版本**
|
|||
|
|
|
|||
|
|
将问题记录到 `.sisyphus/notepads/section-axis-integration/issues.md`
|