# MeasurePanel 组件详细文档 > 本文档详细描述 `MeasurePanel`(测量面板)组件的实现细节,包括 API、UI 结构、逻辑流程等,供后续维护/AI 重现。 > > 重要说明:**本组件仅实现 UI,不实现真实测量算法**(不做拾取、画线、计算等)。测量结果通过对外方法注入,仅用于展示。 --- ## 1. 组件概述 ### 1.1 基本信息 - **组件名称**:`MeasurePanel` - **文件路径**:`src/components/measure-panel/index.ts` - **类型定义**:`src/components/measure-panel/types.ts` - **样式文件**:`src/components/measure-panel/index.css` - **实现接口**:`IBimComponent` ### 1.2 在 SDK 中的位置 - `MeasurePanel` 是内部 UI 组件 - 由 `MeasureDialogManager` 创建并挂载到 `BimDialog` 中 - 外部业务(SDK 使用者)不直接 import 组件类,统一通过 `engine.measure`(Manager)调用 --- ## 2. 组件类 API 文档 ### 2.1 构造函数 ```typescript constructor(options?: MeasurePanelOptions) ``` **参数**: - `options.defaultMode?`: 默认测量方式(不传默认 `distance`) - `options.defaultExpanded?`: 是否默认展开(不传默认 `false`,即只显示前 4 个) - `options.onModeChange?`: 用户切换测量方式时回调 - `options.onClearAll?`: 用户点击“删除全部”时回调 - `options.onSettings?`: 用户点击“设置”时回调 ### 2.2 公共方法 #### `init(): void` - 初始化订阅(主题/语言),并刷新 UI 状态(展开/选中态/结果区)。 #### `setTheme(theme: ThemeConfig): void` - 将主题色映射到 CSS 变量(按钮背景、hover、active、文字、分割线等)。 #### `setLocales(): void` - 更新所有用户可见文本: - 8 个按钮的 tooltip(图标占位时 tooltip 是主要可读文本) - 展开/收起按钮 tooltip - “删除全部”文本 - “设置”tooltip - “当前测量方式”显示文本 - 主值 label(随模式变化) - X/Y/Z 标签 #### `destroy(): void` - 取消主题/语言订阅并移除 DOM。 #### `getActiveMode(): MeasureMode` - 获取当前选中的测量方式。 #### `switchMode(mode: MeasureMode): void` - **切换类型的方法**:切换当前测量方式(等价于 `setActiveMode`)。 #### `setActiveMode(mode: MeasureMode): void` - 设置当前测量方式,并触发 `onModeChange`(如果提供)。 #### `setResult(result: MeasureResult | null): void` - 外部注入测量结果: - `null`:清空显示(主值与 xyz 均显示 `--`) - 非 null:根据当前 mode 显示对应字段的值 #### `clearAll(): void` - 清空结果展示并触发 `onClearAll`(如果提供)。 #### `openSettings(): void` - 触发 `onSettings`(如果提供),否则输出中文警告日志(仅预留接口)。 #### `setExpanded(expanded: boolean): void` - 展开/收起按钮区(收起时只显示前 4 个)。 #### `getExpanded(): boolean` - 获取当前是否展开。 --- ## 3. 分化组件说明 - 无 --- ## 4. Manager API 文档(关联) ### 4.1 MeasureDialogManager(关联文件) - `src/managers/measure-dialog-manager.ts` ### 4.2 相关对外方法(本次新增/补齐) - `getActiveMode(): MeasureMode | null` - `switchMode(mode: MeasureMode): void` - `setResult(result: MeasureResult | null): void` - `clearAll(): void` - `openSettings(): void` --- ## 5. UI 详细描述 ### 5.1 DOM 结构(核心) ```html