# 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. **移除冗余属性**:删除 ``, ``, `