# 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`