Files
bim_engine/docs/MODULES/管理器模块.md
yuding b96e5f3262 refactor: slim down EngineManager from 861 to 290 lines by removing passthrough proxy pattern
- EngineManager now only exposes public SDK API (initialize, loadModel, pause/resumeRendering, getEngineComponent, destroy)
- Internal managers access Engine component directly via this.engineComponent getter on BaseManager
- Non-manager components use registry.engine3d.getEngineComponent() for direct Engine access
- Replaced getEngine() with onRawEvent()/offRawEvent() for raw engine event access
- Migrated 62 call sites across 13 files (9 managers, 1 panel, 3 toolbar buttons)
- Updated all architecture docs, API docs, and README to reflect new patterns
2026-03-05 11:15:57 +08:00

3.9 KiB
Raw Blame History

Managers 模块文档

模块概述

src/managers/ 负责业务编排与生命周期管理,不直接承载底层 3D 细节。

2026-03 更新后,管理器层的核心变化:

  • EngineManager 从“全量透传”改为“对外公共 API + 初始化编排”
  • BaseManager 新增 engineComponent getter内部管理器直接调用 Engine 组件
  • Manager 层统一收敛为“编排者”,而不是“透传中间层”

代码地图

src/managers/
├── engine-manager.ts
├── 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-axis-dialog-manager.ts
├── section-box-dialog-manager.ts
├── map-dialog-manager.ts
├── walk-path-dialog-manager.ts
├── walk-plan-view-dialog-manager.ts
├── setting-dialog-manager.ts
├── engine-info-dialog-manager.ts
└── ai-chat-manager.ts

继承关系

BaseManager
├── EngineManager
├── ToolbarManager
├── DialogManager
├── ButtonGroupManager
├── RightKeyManager
├── ComponentDetailManager
├── ConstructTreeManagerBtn
├── WalkControlManager
├── SettingDialogManager
├── EngineInfoDialogManager
└── AiChatManager

BaseDialogManager (extends BaseManager)
├── MeasureDialogManager
├── SectionPlaneDialogManager
├── SectionAxisDialogManager
├── SectionBoxDialogManager
├── MapDialogManager
├── WalkPathDialogManager
└── WalkPlanViewDialogManager

BaseManager 统一能力

文件:src/core/base-manager.ts

protected get engineComponent(): Engine | null;

用途:

  • 内部 manager 直接调用 Engine 组件能力
  • 替代历史写法 this.registry.engine3d?.xxx()

示例:

this.engineComponent?.activeSection('box');
this.engineComponent?.setWalkSpeed(speed);

EngineManager最新职责

文件:src/managers/engine-manager.ts

职责

  1. 创建/销毁 Engine 组件
  2. 创建/销毁 RightKeyManager
  3. 组装右键菜单逻辑
  4. 暴露外部公共 API

公共 API

class EngineManager extends BaseManager {
  rightKey: RightKeyManager | null;

  getEngineComponent(): Engine | null;
  initialize(options?: Omit<EngineOptions, 'container'>): boolean;
  isInitialized(): boolean;
  loadModel(urls: string[], options?: ModelLoadOptions): void;
  pauseRendering(): void;
  resumeRendering(): void;
  destroy(): void;
}

说明:

  • 不再提供 activateMeasure()/activeSection()/setWalkSpeed() 等透传 API
  • 这些能力由内部 manager 直接调用 engineComponent

各管理器职责分层

类别 代表 Manager 主要职责
核心入口 EngineManager 引擎生命周期与外部 API
UI 容器 ToolbarManager, DialogManager, ButtonGroupManager UI 容器与通用交互
业务编排 MeasureDialogManager, Section*DialogManager, WalkControlManager, SettingDialogManager 对话框/面板回调与引擎能力编排
数据/交互 ConstructTreeManagerBtn, ComponentDetailManager, RightKeyManager 构件树、属性、右键菜单

推荐调用方式

Manager 内部

// 推荐
this.engineComponent?.setSectionBoxRange(range);

// 不推荐
this.registry.engine3d?.setSectionBoxRange(range);

非 Manager 组件

registry.engine3d?.getEngineComponent()?.toggleMiniMap();

迁移约束(团队规范)

新增功能时遵循:

  1. 先在 Engine 组件实现能力
  2. 内部 manager 通过 engineComponent 访问
  3. 仅当确有外部 SDK 需求时,才新增 EngineManager 公共方法
  4. 不新增大规模透传方法