diff --git a/AI_COLLABORATION.md b/AI_COLLABORATION.md
index 9bd3462..89e5457 100644
--- a/AI_COLLABORATION.md
+++ b/AI_COLLABORATION.md
@@ -438,6 +438,13 @@ interface IBimComponent {
- `button-group.md` - ButtonGroup 组件详细文档
- `engine.md` - Engine 组件详细文档
- `tab.md` - Tab 组件详细文档
+- `tree.md` - Tree 组件详细文档
+- `menu.md` - Menu 组件详细文档
+- `right-key.md` - RightKey 组件详细文档
+- `collapse.md` - Collapse 组件详细文档
+- `description.md` - Description 组件详细文档
+- `measure-panel.md` - MeasurePanel 组件详细文档
+- `walk-control-panel.md` - WalkControlPanel 组件详细文档
#### 文档内容结构
每个组件文档包含以下部分:
@@ -537,9 +544,10 @@ const dialog = engine.dialog.create({
| `BimMenu` | `src/components/menu/index.ts` | 通用菜单列表 | `IBimComponent` |
| `BimTree` | `src/components/tree/index.ts` | 通用树形组件 | `IBimComponent` |
| `BimTab` | `src/components/tab/index.ts` | 固定标签页组件 | `IBimComponent` |
-| `BimCollapse` | `src/components/collapse/index.ts` | 折叠面板组件 | `IBimComponent` |
-| `BimDescription` | `src/components/description/index.ts` | 描述列表组件 (Key-Value) | `IBimComponent` |
-| `MeasurePanel` | `src/components/measure-panel/index.ts` | 测量面板组件(仅 UI) | `IBimComponent` |
+| `BimCollapse` | `src/components/collapse/index.ts` | 折叠面板组件 | `IBimComponent` |
+| `BimDescription` | `src/components/description/index.ts` | 描述列表组件 (Key-Value) | `IBimComponent` |
+| `MeasurePanel` | `src/components/measure-panel/index.ts` | 测量面板组件(仅 UI) | `IBimComponent` |
+| `WalkControlPanel` | `src/components/walk-control-panel/index.ts` | 漫游控制面板组件 | `IBimComponent` |
### 4.3 服务类清单
@@ -548,7 +556,20 @@ const dialog = engine.dialog.create({
| `ThemeManager` | `src/services/theme.ts` | 主题管理 | 单例 |
| `LocaleManager` | `src/services/locale.ts` | 语言管理 | 单例 |
-### 4.4 事件总线定义
+### 4.4 工具类清单
+
+| 工具名称 | 文件路径 | 功能 | 文档路径 |
+| -------------- | ---------------------------- | ------------------------------ | ----------------------------- |
+| `IconManager` | `src/utils/icon-manager.ts` | 统一管理所有 SVG 图标资源 | `docs/utils/icon-manager.md` |
+
+**IconManager 说明**:
+- 提供 `getIcon(name: string): string` 函数
+- 所有组件通过该函数获取 SVG 图标字符串
+- 支持默认图标回退机制
+- 图标使用 `currentColor` 以支持主题颜色
+- 详细说明见 `docs/utils/icon-manager.md`
+
+### 4.5 事件总线定义
#### 事件类型 (`EngineEvents`)
@@ -643,7 +664,7 @@ this.on('ui:open-dialog', (payload) => {
});
```
-### 4.5 核心基类
+### 4.6 核心基类
| 类名 | 文件路径 | 功能 | 继承/实现 |
| -------------- | --------------------------- | -------------- | ------------------- |
@@ -653,9 +674,9 @@ this.on('ui:open-dialog', (payload) => {
---
-## 4.6 国际化实现指南
+## 4.7 国际化实现指南
-### 4.6.1 国际化的重要性
+### 4.7.1 国际化的重要性
**所有用户可见的文本都必须支持国际化,这是强制要求。**
@@ -663,7 +684,7 @@ this.on('ui:open-dialog', (payload) => {
- 所有 UI 文本必须通过翻译函数获取
- 严禁在代码中硬编码任何语言的文本
-### 4.6.2 国际化实现方式
+### 4.7.2 国际化实现方式
#### 步骤 1: 在翻译字典中添加键值
@@ -758,7 +779,7 @@ export class MyComponent implements IBimComponent {
}
```
-### 4.6.3 国际化注意事项
+### 4.7.3 国际化注意事项
#### ✅ 必须做的
@@ -831,7 +852,7 @@ export class MyComponent implements IBimComponent {
- 组件必须响应语言切换
- 不能只在初始化时设置文本
-### 4.6.4 国际化最佳实践
+### 4.7.4 国际化最佳实践
#### 翻译键的组织结构
@@ -939,7 +960,7 @@ export class MyDialog implements IBimComponent {
};
```
-### 4.6.5 国际化检查清单
+### 4.7.5 国际化检查清单
在开发新功能时,确保:
diff --git a/docs/components/walk-control-panel.md b/docs/components/walk-control-panel.md
new file mode 100644
index 0000000..8357704
--- /dev/null
+++ b/docs/components/walk-control-panel.md
@@ -0,0 +1,594 @@
+# WalkControlPanel 组件详细文档
+
+> 本文档详细描述 WalkControlPanel 组件的实现细节,包括 API、UI 结构、逻辑流程等,供 AI 根据文档重现组件。
+
+---
+
+## 1. 组件概述
+
+### 1.1 基本信息
+- **组件名称**: `WalkControlPanel`
+- **文件路径**: `src/components/walk-control-panel/index.ts`
+- **类型定义**: `src/components/walk-control-panel/types.ts`
+- **样式文件**: `src/components/walk-control-panel/index.css`
+- **实现接口**: `IBimComponent`
+- **用途**: 渲染漫游控制面板,提供平面图切换、路径漫游、人物漫游三种模式,以及速度、重力、碰撞、角色模型、行走模式等设置。
+- **特点**: 纯 UI 组件,通过回调函数通知外部状态变化,支持主题和国际化。
+
+### 1.2 在 SDK 中的位置
+- WalkControlPanel 组件通常由 `WalkControlManager` 管理(如果存在)
+- 也可以单独实例化并挂载到任何容器中
+- 用于 3D 场景的漫游控制界面
+
+---
+
+## 2. 组件类 API 文档
+
+### 2.1 构造函数
+
+```typescript
+constructor(options: WalkControlPanelOptions = {})
+```
+
+**参数**:
+- `options`: `WalkControlPanelOptions` - 漫游控制面板配置选项(可选)
+
+**WalkControlPanelOptions 定义**:
+```typescript
+interface WalkControlPanelOptions {
+ /** 平面图切换回调 */
+ onPlanViewToggle?: (isActive: boolean) => void;
+ /** 路径漫游模式切换回调 */
+ onPathModeToggle?: (isActive: boolean) => void;
+ /** 漫游模式切换回调 */
+ onWalkModeToggle?: (isActive: boolean) => void;
+ /** 速度变化回调 */
+ onSpeedChange?: (speed: number) => void;
+ /** 重力切换回调 */
+ onGravityToggle?: (enabled: boolean) => void;
+ /** 碰撞切换回调 */
+ onCollisionToggle?: (enabled: boolean) => void;
+ /** 角色模型变化回调 */
+ onCharacterModelChange?: (model: CharacterModel) => void;
+ /** 行走模式变化回调 */
+ onWalkModeChange?: (mode: WalkMode) => void;
+ /** 退出回调 */
+ onExit?: () => void;
+
+ /** 默认速度 (1-10) */
+ defaultSpeed?: number;
+ /** 默认重力状态 */
+ defaultGravity?: boolean;
+ /** 默认碰撞状态 */
+ defaultCollision?: boolean;
+ /** 默认角色模型 */
+ defaultCharacterModel?: CharacterModel;
+ /** 默认行走模式 */
+ defaultWalkMode?: WalkMode;
+}
+```
+
+**行为**:
+- 创建面板 DOM 结构
+- 保存配置选项
+- 初始化状态
+
+### 2.2 公共方法
+
+#### `init(): void`
+初始化组件(实现 `IBimComponent` 接口)
+
+**功能**:
+- 创建并渲染 DOM 结构
+- 订阅语言变更:`localeManager.subscribe()`
+- 订阅主题变更:`themeManager.subscribe()`
+- 更新初始视图状态
+
+#### `setTheme(theme: ThemeConfig): void`
+设置主题(实现 `IBimComponent` 接口)
+
+**参数**:
+- `theme`: `ThemeConfig`
+
+**功能**:
+- 将主题颜色映射到 CSS 变量:
+ - `--bim-walk-control-bg` ← `theme.panelBackground`
+ - `--bim-walk-btn-hover` ← `theme.componentHover`
+ - `--bim-walk-btn-active` ← `theme.componentActive`
+ - `--bim-primary-color` ← `theme.primary`
+ - `--bim-primary-hover` ← `theme.primaryHover`
+ - `--bim-icon-color` ← `theme.icon`
+ - `--bim-text-color` ← `theme.textPrimary`
+ - `--bim-divider-color` ← `theme.border`
+ - 以及其他速度控制、下拉框相关的主题变量
+
+#### `setLocales(): void`
+设置语言(实现 `IBimComponent` 接口)
+
+**功能**:
+- 更新速度标签文本:`t('walkControl.speed')`
+- 更新复选框标签:`t('walkControl.gravity')`, `t('walkControl.collision')`
+- 更新角色模型下拉框选项和标签
+- 更新行走模式下拉框选项和标签
+- 更新退出按钮文本:`t('walkControl.exit')`
+
+#### `destroy(): void`
+销毁组件(实现 `IBimComponent` 接口)
+
+**功能**:
+- 取消语言和主题订阅
+- 从 DOM 中移除自身元素
+
+#### `setPlanViewActive(active: boolean): void`
+设置平面图按钮激活状态
+
+**参数**:
+- `active`: boolean - 是否激活
+
+**功能**:
+- 更新内部状态
+- 更新按钮视觉状态
+
+#### `setPathModeActive(active: boolean): void`
+设置路径模式按钮激活状态
+
+**参数**:
+- `active`: boolean - 是否激活
+
+**功能**:
+- 更新模式状态
+- 更新按钮视觉状态
+- 路径模式激活时禁用重力和碰撞选项
+
+#### `getState(): WalkControlState`
+获取当前状态
+
+**返回**: `WalkControlState` - 当前控制面板状态的副本
+
+---
+
+## 3. 分化组件说明
+
+**WalkControlPanel 没有子类或分化组件**。
+
+---
+
+## 4. Manager API 文档
+
+目前 WalkControlPanel 没有专门的 Manager,通常由使用方直接创建和管理。
+未来可以创建 `WalkControlManager` 来统一管理该组件的实例。
+
+---
+
+## 5. UI 详细描述
+
+### 5.1 DOM 结构
+
+```html
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+```
+
+### 5.2 CSS 类名和样式
+
+#### `.walk-control-panel` (根容器)
+- `display: flex`, `align-items: center`
+- `gap: 20px`, `padding: 8px 16px`
+- `background`: `var(--bim-walk-control-bg)`
+- `border-radius: 8px`
+- `user-select: none`
+
+#### `.walk-icon-btn` (左侧图标按钮)
+- `width: 48px`, `height: 48px`
+- `padding: 8px` (实际图标 32x32)
+- `display: flex`, `align-items: center`, `justify-content: center`
+- `background: transparent`
+- `border: 2px solid transparent`, `border-radius: 6px`
+- `cursor: pointer`, `transition: all 0.2s`
+- `color`: `var(--bim-icon-color)`
+
+#### `.walk-icon-btn:hover`
+- `background`: `var(--bim-walk-btn-hover)`
+
+#### `.walk-icon-btn.active`
+- `background`: `var(--bim-walk-btn-active)`
+
+#### `.walk-icon-btn svg`
+- `width: 32px`, `height: 32px`
+
+#### `.walk-divider` (分割线)
+- `width: 1px`, `height: 40px`
+- `background`: `var(--bim-divider-color)`
+- `flex-shrink: 0`
+
+#### `.walk-speed-control` (速度控件)
+- `display: flex`, `align-items: center`, `gap: 12px`
+
+#### `.walk-speed-btn` (速度按钮)
+- `width: 32px`, `height: 32px`
+- `background`: `var(--bim-speed-btn-bg)`
+- `border: none`, `border-radius: 4px`
+- `cursor: pointer`
+- `:disabled` 时 `opacity: 0.5`, `cursor: not-allowed`
+
+#### `.walk-checkbox-wrapper` (复选框包装)
+- `display: flex`, `align-items: center`, `gap: 8px`
+- `cursor: pointer`
+
+#### `.walk-select-wrapper` (下拉框包装)
+- `display: flex`, `align-items: center`, `gap: 8px`
+
+#### `.walk-exit-btn` (退出按钮)
+- `padding: 10px 24px`
+- `background`: `var(--bim-primary-color)`
+- `border: none`, `border-radius: 6px`
+- `color: #fff`, `font-size: 14px`, `font-weight: 600`
+- `cursor: pointer`, `transition: all 0.2s`
+
+---
+
+## 6. 逻辑流程详细描述
+
+### 6.1 初始化流程 (`init`)
+
+1. **创建面板**(`createPanel`):
+ - 创建根容器 `.walk-control-panel`
+ - 创建左侧按钮区(`createLeftButtons`)
+ - 创建中间设置区(`createSettingsContainer`)
+ - 创建右侧退出按钮(`createExitButton`)
+ - 组装各部分并添加分割线
+
+2. **订阅变更**:
+ - 订阅语言变更:`localeManager.subscribe(() => this.setLocales())`
+ - 订阅主题变更:`themeManager.subscribe((theme) => this.setTheme(theme))`
+
+3. **初始设置**:
+ - 调用 `setLocales()` 设置初始文本
+ - 调用 `setTheme()` 应用当前主题
+ - 调用 `updateSettingsView()` 根据初始模式显示/隐藏控件
+
+### 6.2 模式切换流程
+
+#### 模式类型
+- `'none'`: 无模式
+- `'path'`: 路径漫游模式
+- `'walk'`: 人物漫游模式
+
+#### 模式切换逻辑 (`setMode`)
+1. **保存旧模式**:用于触发关闭事件
+
+2. **触发旧模式关闭事件**:
+ - 如果从 `'walk'` 切换出去,触发 `onWalkModeToggle(false)`
+ - 如果从 `'path'` 切换出去,触发 `onPathModeToggle(false)`
+
+3. **更新模式状态**:`this.state.mode = newMode`
+
+4. **特殊处理**:
+ - 路径模式时:禁用重力和碰撞复选框,并设置为 false
+ - 其他模式:启用重力和碰撞复选框
+
+5. **更新视图**:
+ - `updateButtonStates()`: 更新按钮激活状态
+ - `updateSettingsView()`: 显示/隐藏相应的设置控件
+ - `updateSpeedButtonStates()`: 更新速度按钮禁用状态
+
+### 6.3 设置视图更新 (`updateSettingsView`)
+
+根据当前模式动态显示/隐藏控件:
+
+**漫游模式 (`'walk'`)**:
+- 隐藏速度控件
+- 显示角色模型选择
+- 显示行走模式选择
+- 显示重力复选框
+- 显示碰撞复选框
+
+**路径模式 (`'path'`)** 或 **无模式 (`'none'`)**:
+- 显示速度控件
+- 隐藏角色模型选择
+- 隐藏行走模式选择
+- 显示重力复选框
+- 显示碰撞复选框
+
+### 6.4 图标管理
+
+使用统一的图标管理器 (`icon-manager.ts`) 获取 SVG 图标:
+
+```typescript
+private getIconSVG(type: string): string {
+ const icons: Record = {
+ 'plan-view': getIcon('地图'), // 平面图/鸟瞰
+ 'path': getIcon('地图'), // 路径漫游
+ 'walk': getIcon('漫游') // 人物漫游
+ };
+ return icons[type] || '';
+}
+```
+
+**重要**: 所有按钮图标尺寸统一为 32x32,与 toolbar 底部工具栏保持一致。
+
+---
+
+## 7. 国际化支持
+
+### 7.1 使用的翻译键
+
+```typescript
+// 翻译键路径
+'walkControl.speed' // 速度标签
+'walkControl.gravity' // 重力标签
+'walkControl.collision' // 碰撞标签
+'walkControl.characterModel.label' // 角色模型标签
+'walkControl.characterModel.constructionWorker' // 建筑工人
+'walkControl.characterModel.officeMale' // 办公室男性
+'walkControl.walkMode.label' // 行走模式标签
+'walkControl.walkMode.walk' // 行走
+'walkControl.walkMode.run' // 奔跑
+'walkControl.exit' // 退出按钮
+```
+
+### 7.2 实现方式
+- 使用 `src/services/locale.ts` 中的 `t()` 函数
+- 组件初始化时订阅语言变更,变更发生时更新所有文本 (`setLocales`)
+- 动态创建的下拉框选项也使用 `t()` 函数获取翻译文本
+
+---
+
+## 8. 主题支持
+
+### 8.1 变量映射
+
+在 `setTheme` 中设置内联样式变量:
+- `--bim-walk-control-bg`: 面板背景色
+- `--bim-walk-btn-hover`: 按钮悬停背景
+- `--bim-walk-btn-active`: 按钮激活背景
+- `--bim-primary-color`: 主色(退出按钮)
+- `--bim-primary-hover`: 主色悬停
+- `--bim-icon-color`: 图标颜色
+- `--bim-text-color`: 文本颜色
+- `--bim-divider-color`: 分割线颜色
+- `--bim-speed-group-bg`: 速度组背景
+- `--bim-speed-btn-bg`: 速度按钮背景
+- `--bim-speed-btn-hover`: 速度按钮悬停
+- `--bim-select-bg`: 下拉框背景
+- `--bim-select-border`: 下拉框边框
+- `--bim-select-option-bg`: 下拉框选项背景
+
+---
+
+## 9. 使用示例
+
+### 9.1 基本使用
+
+```typescript
+import { WalkControlPanel } from './components/walk-control-panel';
+
+// 创建实例
+const walkPanel = new WalkControlPanel({
+ defaultSpeed: 1,
+ defaultGravity: false,
+ defaultCollision: false,
+ onPlanViewToggle: (isActive) => {
+ console.log('平面图模式:', isActive);
+ },
+ onPathModeToggle: (isActive) => {
+ console.log('路径模式:', isActive);
+ // 启用/禁用路径漫游功能
+ },
+ onWalkModeToggle: (isActive) => {
+ console.log('漫游模式:', isActive);
+ // 启用/禁用人物漫游功能
+ },
+ onSpeedChange: (speed) => {
+ console.log('速度:', speed);
+ // 更新漫游速度
+ },
+ onGravityToggle: (enabled) => {
+ console.log('重力:', enabled);
+ },
+ onCollisionToggle: (enabled) => {
+ console.log('碰撞:', enabled);
+ },
+ onCharacterModelChange: (model) => {
+ console.log('角色模型:', model);
+ },
+ onWalkModeChange: (mode) => {
+ console.log('行走模式:', mode);
+ },
+ onExit: () => {
+ console.log('退出漫游');
+ // 销毁面板,退出漫游模式
+ }
+});
+
+// 初始化
+walkPanel.init();
+
+// 挂载到 DOM
+document.body.appendChild(walkPanel.element);
+```
+
+### 9.2 外部控制状态
+
+```typescript
+// 外部设置平面图激活状态
+walkPanel.setPlanViewActive(true);
+
+// 外部设置路径模式激活状态
+walkPanel.setPathModeActive(true);
+
+// 获取当前状态
+const state = walkPanel.getState();
+console.log('当前模式:', state.mode);
+console.log('当前速度:', state.speed);
+```
+
+---
+
+## 10. 实现细节(供 AI 重现)
+
+### 10.1 状态管理
+
+组件内部维护一个状态对象 `WalkControlState`:
+
+```typescript
+private state: WalkControlState = {
+ mode: 'none', // 当前模式
+ isPlanViewActive: false, // 平面图是否激活
+ speed: 1, // 移动速度 1-10
+ gravity: false, // 重力是否启用
+ collision: false, // 碰撞是否启用
+ characterModel: 'construction-worker', // 角色模型
+ walkMode: 'walk' // 行走模式
+};
+```
+
+状态变更时:
+1. 更新内部状态
+2. 更新 UI 视觉效果
+3. 触发对应的回调函数
+
+### 10.2 模式互斥逻辑
+
+三个按钮(平面图、路径、漫游)中:
+- **平面图**是独立的开关,不影响模式
+- **路径**和**漫游**是互斥的,激活一个会关闭另一个
+- 点击已激活的模式按钮会关闭该模式(回到 `'none'`)
+
+### 10.3 路径模式的特殊处理
+
+当进入路径模式时:
+1. 自动禁用并取消勾选重力和碰撞
+2. 禁用重力和碰撞复选框(设置 `disabled` 属性)
+3. 退出路径模式时重新启用这两个复选框
+
+### 10.4 速度控制
+
+- 速度范围: 1-10
+- 减速按钮在速度为 1 时禁用
+- 加速按钮在速度为 10 时禁用
+- 速度显示格式: `${speed}X`
+
+### 10.5 下拉框动态创建
+
+角色模型和行走模式的下拉框选项在 `setLocales()` 中动态创建:
+1. 清空现有选项:`select.innerHTML = ''`
+2. 创建新选项,使用 `t()` 获取翻译文本
+3. 根据当前状态设置选中项
+
+这样可以确保语言切换时下拉框文本也会更新。
+
+---
+
+## 11. 类型定义
+
+### 11.1 WalkControlMode
+```typescript
+export type WalkControlMode = 'none' | 'path' | 'walk';
+```
+
+### 11.2 CharacterModel
+```typescript
+export type CharacterModel = 'office-male' | 'construction-worker';
+```
+
+### 11.3 WalkMode
+```typescript
+export type WalkMode = 'walk' | 'run';
+```
+
+### 11.4 WalkControlState
+```typescript
+export interface WalkControlState {
+ mode: WalkControlMode;
+ isPlanViewActive: boolean;
+ speed: number;
+ gravity: boolean;
+ collision: boolean;
+ characterModel: CharacterModel;
+ walkMode: WalkMode;
+}
+```
+
+### 11.5 WalkControlPanelOptions
+见 2.1 节
+
+---
+
+## 12. 文件清单
+
+- `src/components/walk-control-panel/index.ts`: 组件核心逻辑
+- `src/components/walk-control-panel/index.css`: 组件样式
+- `src/components/walk-control-panel/types.ts`: 类型定义
+
+---
+
+## 13. 更新记录
+
+| 日期 | 修改内容 | 修改人 |
+| ---------- | ----------------------------------------- | ------------ |
+| 2025-12-25 | 创建漫游控制面板组件文档,集成图标管理器 | AI Assistant |
diff --git a/docs/utils/icon-manager.md b/docs/utils/icon-manager.md
new file mode 100644
index 0000000..55cbbd9
--- /dev/null
+++ b/docs/utils/icon-manager.md
@@ -0,0 +1,423 @@
+# Icon Manager 图标管理器文档
+
+> 本文档详细描述 Icon Manager 图标管理工具的实现细节,包括 API、使用方式、图标清单等,供 AI 根据文档重现功能。
+
+---
+
+## 1. 工具概述
+
+### 1.1 基本信息
+- **工具名称**: `IconManager`
+- **文件路径**: `src/utils/icon-manager.ts`
+- **导出函数**: `getIcon(name: string): string`
+- **用途**: 统一管理所有 SVG 图标资源,提供通过名称获取图标的接口
+- **特点**: 单一职责,简单易用,支持默认图标回退
+
+### 1.2 设计目标
+- **统一管理**: 所有图标集中在一个文件中管理,避免重复和不一致
+- **简化使用**: 通过简单的函数调用获取图标,无需在各处重复 SVG 代码
+- **类型安全**: SVG 作为字符串存储,可直接用于 innerHTML 或图标属性
+- **容错机制**: 当请求的图标不存在时,返回默认图标而不是报错
+
+---
+
+## 2. API 文档
+
+### 2.1 getIcon 函数
+
+```typescript
+function getIcon(name: string): string
+```
+
+**参数**:
+- `name`: string - 图标名称(中文)
+
+**返回值**:
+- string - SVG 图标的完整字符串
+
+**行为**:
+1. 从 `ICONS` 对象中查找对应名称的图标
+2. 如果找到,返回该图标的 SVG 字符串
+3. 如果未找到,在控制台输出警告并返回默认图标
+
+**示例**:
+```typescript
+import { getIcon } from '../../utils/icon-manager';
+
+// 获取测量图标
+const measureIcon = getIcon('测量');
+
+// 获取不存在的图标(会返回默认图标并警告)
+const unknownIcon = getIcon('不存在的图标');
+// 控制台输出: [IconManager] Icon "不存在的图标" not found, using default icon
+```
+
+---
+
+## 3. 图标清单
+
+### 3.1 来自 assets 的图标 (48x48)
+
+这些图标从 `src/assets/` 目录中的 SVG 文件简化而来,用于 toolbar 和主要功能按钮:
+
+| 图标名称 | 用途 | 原始文件 |
+|---------|------|----------|
+| 测量 | 测量工具 | 测量.svg |
+| 地图 | 地图视图/平面图 | 地图.svg |
+| 框选放大 | 框选缩放 | 框选放大.svg |
+| 漫游 | 漫游模式 | 漫游.svg |
+| 目录树 | 构件树 | 目录树.svg |
+| 剖切 | 剖切菜单 | 剖切.svg |
+| 剖切盒 | 剖切盒 | 剖切盒.svg |
+| 全屏 | 全屏模式 | 全屏.svg |
+| 设置 | 设置面板 | 设置.svg |
+| 拾曲面剖切 | 拾取曲面剖切 | 拾曲面剖切.svg |
+| 轴向剖切 | 轴向剖切 | 轴向剖切.svg |
+| 主视角 | 主视角/首页 | 主视角.svg |
+| 文档 | 文档/属性 | 地图 – 1.svg |
+
+### 3.2 测量相关图标 (32x32)
+
+用于测量面板的各种测量方式:
+
+| 图标名称 | 用途 |
+|---------|------|
+| 标高 | 标高测量 |
+| 距离 | 距离测量 |
+| 最小距离 | 最小距离测量 |
+| 激光边距 | 激光边距测量 |
+| 角度 | 角度测量 |
+| 坡度 | 坡度测量 |
+| 体积 | 体积测量 |
+| 空间体积 | 空间体积测量 |
+
+### 3.3 通用图标 (24x24)
+
+常用的 UI 图标:
+
+| 图标名称 | 用途 |
+|---------|------|
+| close | 关闭 |
+| check | 勾选/确认 |
+| warning | 警告 |
+| error | 错误 |
+| success | 成功 |
+| plus | 加号/新增 |
+| minus | 减号/删除 |
+| arrowUp | 向上箭头 |
+| arrowDown | 向下箭头 |
+| arrowLeft | 向左箭头 |
+| arrowRight | 向右箭头 |
+| search | 搜索 |
+| refresh | 刷新 |
+| delete | 删除 |
+| edit | 编辑 |
+| save | 保存 |
+| expand | 展开 |
+| collapse | 收起 |
+
+### 3.4 默认图标
+
+| 图标名称 | 用途 |
+|---------|------|
+| default | 当请求的图标不存在时返回 |
+
+---
+
+## 4. 使用场景
+
+### 4.1 在按钮配置中使用
+
+```typescript
+import { getIcon } from '../../../utils/icon-manager';
+
+export const createMeasureButton = (engine: BimEngine): ButtonConfig => {
+ return {
+ id: 'measure',
+ groupId: 'group-1',
+ type: 'button',
+ label: 'toolbar.measure',
+ icon: getIcon('测量'), // 使用图标管理器
+ onClick: () => {
+ engine.measure?.show();
+ }
+ };
+};
+```
+
+### 4.2 在组件中使用
+
+```typescript
+import { getIcon } from '../../utils/icon-manager';
+
+export class WalkControlPanel implements IBimComponent {
+ private getIconSVG(type: string): string {
+ const icons: Record = {
+ 'plan-view': getIcon('地图'),
+ 'path': getIcon('地图'),
+ 'walk': getIcon('漫游')
+ };
+ return icons[type] || '';
+ }
+
+ private createIconButton(type: string, onClick: () => void): HTMLButtonElement {
+ const btn = document.createElement('button');
+ btn.className = `walk-icon-btn walk-icon-btn-${type}`;
+ btn.innerHTML = this.getIconSVG(type);
+ btn.addEventListener('click', onClick);
+ return btn;
+ }
+}
+```
+
+### 4.3 在树节点中使用
+
+```typescript
+import { getIcon } from '../../utils/icon-manager';
+
+const treeData: TreeNodeConfig[] = [
+ {
+ id: 'level-1',
+ label: '一层',
+ icon: getIcon('目录树'),
+ children: [...]
+ }
+];
+```
+
+---
+
+## 5. SVG 简化规范
+
+### 5.1 简化原则
+
+从 assets 目录中的 SVG 文件简化时,遵循以下原则:
+
+1. **保留核心路径**:只保留 `` 元素及其 `d` 属性
+2. **移除冗余属性**:删除 ``, ``, `