10 KiB
10 KiB
Managers 模块文档
模块概述
| 项目 | 内容 |
|---|---|
| 模块名 | managers |
| 职责 | 处理业务逻辑,协调组件交互,管理组件生命周期 |
| 公开 API | 15 个 Manager 类 |
| 状态 | ✅ 稳定 |
代码地图
src/managers/
├── engine-manager.ts # 3D 引擎管理器
├── toolbar-manager.ts # 工具栏管理器
├── dialog-manager.ts # 对话框管理器
├── button-group-manager.ts # 按钮组管理器
├── right-key-manager.ts # 右键菜单管理器
├── component-detail-manager.ts # 构件详情弹窗管理器
├── construct-tree-manager-btn.ts # 构件树管理器
├── walk-control-manager.ts # 漫游控制管理器
├── measure-dialog-manager.ts # 测量对话框管理器
├── section-plane-dialog-manager.ts # 平面剖切对话框管理器
├── section-box-dialog-manager.ts # 剖切盒对话框管理器
├── section-axis-dialog-manager.ts # 轴向剖切对话框管理器
├── map-dialog-manager.ts # 地图对话框管理器
├── walk-path-dialog-manager.ts # 漫游路径对话框管理器
└── walk-plan-view-dialog-manager.ts # 漫游平面图对话框管理器
管理器分类
按继承关系
BaseManager
├── EngineManager
├── ToolbarManager
├── DialogManager
├── ButtonGroupManager
├── RightKeyManager
├── ComponentDetailManager
├── ConstructTreeManagerBtn
└── WalkControlManager
BaseDialogManager (继承自 BaseManager)
├── MeasureDialogManager
├── SectionPlaneDialogManager
├── SectionAxisDialogManager
├── SectionBoxDialogManager
├── MapDialogManager
├── WalkPathDialogManager
└── WalkPlanViewDialogManager
按功能分类
| 类别 | 管理器 | 职责 |
|---|---|---|
| 核心 | EngineManager | 3D 引擎管理 |
| UI 容器 | ToolbarManager, DialogManager, ButtonGroupManager | 容器组件管理 |
| 交互 | RightKeyManager, ComponentDetailManager, ConstructTreeManagerBtn | 用户交互 |
| 3D 工具 | MeasureDialogManager, SectionPlaneDialogManager, SectionAxisDialogManager, SectionBoxDialogManager | 3D 操作工具 |
| 漫游 | WalkControlManager, WalkPathDialogManager, WalkPlanViewDialogManager, MapDialogManager | 漫游功能 |
EngineManager
概述
管理 3D 引擎的初始化、模型加载和测量功能。
API
class EngineManager extends BaseManager {
initialize(options?: EngineOptions): void;
isInitialized(): boolean;
loadModel(url: string, options?: ModelLoadOptions): void;
getEngine(): any;
CameraGoHome(): void;
activateMeasure(mode: MeasureMode): void;
deactivateMeasure(): void;
getCurrentMeasureType(): MeasureMode | null;
destroy(): void;
}
使用示例
const engine = new EngineManager(container);
engine.initialize();
engine.loadModel('model.gltf', { autoFit: true });
engine.activateMeasure('distance');
ToolbarManager
概述
管理底部工具栏的按钮配置、显示控制、主题管理。
API
class ToolbarManager extends BaseManager {
addGroup(groupId: string, beforeGroupId?: string): void;
addButton(config: ButtonConfig): void;
setBtnActive(id: string, active?: boolean): void;
setButtonVisibility(id: string, visible: boolean): void;
setShowLabel(show: boolean): void;
updateTheme(theme: ThemeConfig): void;
setBackgroundColor(color: string): void;
setColors(colors: ButtonGroupColors): void;
show(): void;
hide(): void;
setVisible(visible: boolean): void;
refresh(): void;
destroy(): void;
}
使用示例
const toolbar = new ToolbarManager(container);
toolbar.addGroup('custom-group');
toolbar.addButton({
id: 'custom-btn',
groupId: 'custom-group',
type: 'button',
label: 'Custom',
icon: '<svg>...</svg>',
onClick: () => console.log('Clicked')
});
toolbar.setBtnActive('custom-btn', true);
DialogManager
概述
创建和管理通用对话框实例。
API
class DialogManager extends BaseManager {
create(options: DialogOptions): BimDialog;
showInfoDialog(): void;
updateTheme(theme: ThemeConfig): void;
destroy(): void;
}
使用示例
const dialogManager = new DialogManager(container);
const dialog = dialogManager.create({
title: 'My Dialog',
content: element,
width: 400,
onClose: () => console.log('Closed')
});
MeasureDialogManager
概述
管理测量工具的对话框和测量面板。
API
class MeasureDialogManager extends BaseDialogManager {
getActiveMode(): MeasureMode;
switchMode(mode: MeasureMode): void;
setMeasureResult(result: MeasureResult | null): void;
getConfig(): MeasureConfig;
setConfig(partial: Partial<MeasureConfig>, persist?: boolean): void;
clearAll(): void;
openSettings(): void;
show(): void;
hide(): void;
toggle(): void;
}
测量模式
| 模式 | 说明 |
|---|---|
distance |
距离测量 |
minDistance |
最小距离 |
angle |
角度测量 |
elevation |
标高测量 |
volume |
体积测量 |
laserDistance |
激光测距 |
slope |
坡度测量 |
spaceVolume |
空间体积 |
使用示例
const measure = new MeasureDialogManager();
measure.show();
measure.switchMode('distance');
const config = measure.getConfig();
measure.setConfig({ unit: 'cm', precision: 1 });
SectionPlaneDialogManager
概述
管理平面剖切工具对话框。
API
class SectionPlaneDialogManager extends BaseDialogManager {
show(): void;
hide(): void;
toggle(): void;
isOpen(): boolean;
}
SectionAxisDialogManager
概述
管理轴向剖切工具对话框。
API
class SectionAxisDialogManager extends BaseDialogManager {
getHiddenState(): boolean;
setHiddenState(isHidden: boolean): void;
getActiveAxis(): 'x' | 'y' | 'z';
setActiveAxis(axis: 'x' | 'y' | 'z'): void;
show(): void;
hide(): void;
toggle(): void;
}
使用示例
const sectionAxis = new SectionAxisDialogManager();
sectionAxis.show();
sectionAxis.setActiveAxis('y');
SectionBoxDialogManager
概述
管理剖切盒工具对话框。
API
class SectionBoxDialogManager extends BaseDialogManager {
getHiddenState(): boolean;
setHiddenState(isHidden: boolean): void;
getReversedState(): boolean;
setReversedState(isReversed: boolean): void;
getRange(): SectionBoxRange;
setRange(range: Partial<SectionBoxRange>): void;
show(): void;
hide(): void;
toggle(): void;
}
interface SectionBoxRange {
minX: number;
maxX: number;
minY: number;
maxY: number;
minZ: number;
maxZ: number;
}
使用示例
const sectionBox = new SectionBoxDialogManager();
sectionBox.show();
const range = sectionBox.getRange();
sectionBox.setRange({ minX: 0, maxX: 100 });
sectionBox.setReversedState(true);
WalkControlManager
概述
管理漫游控制面板和相关交互。
API
class WalkControlManager extends BaseManager {
init(): void;
show(): void;
hide(): void;
destroy(): void;
}
事件
| 事件 | 说明 |
|---|---|
walk:plan-view-toggle |
平面图切换 |
walk:path-mode-toggle |
路径模式切换 |
walk:walk-mode-toggle |
漫游模式切换 |
walk:speed-change |
速度变化 |
walk:gravity-toggle |
重力开关 |
walk:collision-toggle |
碰撞开关 |
ComponentDetailManager
概述
管理构件详情弹窗(属性展示)的显示。
API
class ComponentDetailManager extends BaseManager {
init(): void;
show(): void;
isOpen(): boolean;
hide(): void;
destroy(): void;
}
ConstructTreeManagerBtn
概述
管理构件树按钮和对话框。
API
class ConstructTreeManagerBtn extends BaseManager {
openConstructTreeDialog(): void;
addGroup(groupId: string, beforeGroupId?: string): void;
addButton(config: ButtonConfig): void;
setButtonVisibility(id: string, visible: boolean): void;
setShowLabel(show: boolean): void;
setVisible(visible: boolean): void;
setBackgroundColor(color: string): void;
setColors(colors: ButtonGroupColors): void;
refresh(): void;
destroy(): void;
}
RightKeyManager
概述
管理右键上下文菜单。
API
class RightKeyManager extends BaseManager {
registerHandler(handler: ContextMenuHandler): void;
showMenu(x: number, y: number, items: MenuItemConfig[], groupOrder?: string[]): void;
hide(): void;
destroy(): void;
}
type ContextMenuHandler = (e: MouseEvent) => MenuItemConfig[];
使用示例
const rightKey = new RightKeyManager(container);
rightKey.registerHandler((e) => [
{ id: 'view', label: 'View', onClick: () => {} },
{ id: 'delete', label: 'Delete', onClick: () => {} }
]);
ButtonGroupManager
概述
创建和管理多个按钮组实例。
API
class ButtonGroupManager extends BaseManager {
create(id: string, options: ButtonGroupOptions): BimButtonGroup;
get(id: string): BimButtonGroup | undefined;
updateTheme(theme: ThemeConfig): void;
destroy(): void;
}
交互流程
工具栏按钮触发测量
ToolbarManager (按钮点击)
↓
MeasureDialogManager.show()
↓
onModeChange 事件
↓
EngineManager.activateMeasure(mode)
↓
3D 引擎进入测量模式
漫游模式激活
ToolbarManager (walk 按钮)
↓
WalkControlManager.show()
↓
隐藏底部工具栏
↓
显示漫游控制面板
依赖关系
所有 Manager 都依赖:
BaseManager或BaseDialogManagerManagerRegistry
各 Manager 之间通过事件系统通信,避免直接依赖。
文档生成时间: 2026-01-23