提交代码
This commit is contained in:
@@ -14,7 +14,7 @@
|
||||
```
|
||||
src/core/
|
||||
├── event-emitter.ts # 事件发射器
|
||||
├── manager-registry.ts # Manager 注册表(单例)
|
||||
├── manager-registry.ts # Manager 注册表(实例化)
|
||||
├── base-manager.ts # Manager 抽象基类
|
||||
└── base-dialog-manager.ts # 对话框 Manager 基类
|
||||
```
|
||||
@@ -22,7 +22,7 @@ src/core/
|
||||
| 文件 | 行数 | 职责 | 导出 |
|
||||
|------|------|------|------|
|
||||
| `event-emitter.ts` | 70 | 发布/订阅事件系统 | `EventEmitter` |
|
||||
| `manager-registry.ts` | 127 | 全局单例注册表 | `ManagerRegistry` |
|
||||
| `manager-registry.ts` | 127 | 实例级 Manager 注册表 | `ManagerRegistry` |
|
||||
| `base-manager.ts` | 57 | Manager 基类 | `BaseManager` |
|
||||
| `base-dialog-manager.ts` | 145 | 对话框 Manager 基类 | `BaseDialogManager` |
|
||||
|
||||
@@ -33,7 +33,7 @@ src/core/
|
||||
```
|
||||
EventEmitter
|
||||
↑ (组合)
|
||||
ManagerRegistry (单例)
|
||||
ManagerRegistry (实例)
|
||||
↑ (访问)
|
||||
BaseManager (抽象类)
|
||||
↑ (继承)
|
||||
@@ -46,7 +46,7 @@ BaseDialogManager (抽象类)
|
||||
|
||||
| 模式 | 应用 | 说明 |
|
||||
|------|------|------|
|
||||
| 单例模式 | ManagerRegistry | 全局唯一实例 |
|
||||
| 实例模式 | ManagerRegistry | 每个引擎实例独立注册表 |
|
||||
| 发布/订阅 | EventEmitter | 解耦事件通信 |
|
||||
| 模板方法 | BaseDialogManager | 定义对话框生命周期 |
|
||||
|
||||
@@ -99,17 +99,14 @@ unsubscribe();
|
||||
|
||||
### 概述
|
||||
|
||||
全局单例注册表,集中管理所有 Manager 实例,提供跨 Manager 通信。
|
||||
实例级注册表,集中管理单个引擎实例下的 Manager 与事件总线,支持多实例隔离。
|
||||
|
||||
### API
|
||||
|
||||
```typescript
|
||||
class ManagerRegistry {
|
||||
// 获取单例
|
||||
static getInstance(): ManagerRegistry;
|
||||
|
||||
// 重置单例(用于测试)
|
||||
static reset(): void;
|
||||
// 创建实例
|
||||
constructor();
|
||||
|
||||
// 容器元素
|
||||
container: HTMLElement | null;
|
||||
@@ -125,25 +122,30 @@ class ManagerRegistry {
|
||||
componentDetail: ComponentDetailManager | null;
|
||||
measure: MeasureDialogManager | null;
|
||||
walkControl: WalkControlManager | null;
|
||||
map: MapDialogManager | null;
|
||||
sectionPlane: SectionPlaneDialogManager | null;
|
||||
sectionAxis: SectionAxisDialogManager | null;
|
||||
sectionBox: SectionBoxDialogManager | null;
|
||||
walkPath: WalkPathDialogManager | null;
|
||||
walkPlanView: WalkPlanViewDialogManager | null;
|
||||
engineInfo: EngineInfoDialogManager | null;
|
||||
aiChat: AiChatManager | null;
|
||||
setting: SettingDialogManager | null;
|
||||
|
||||
// 事件方法
|
||||
emit<K extends keyof EngineEvents>(event: K, payload: EngineEvents[K]): void;
|
||||
on<K extends keyof EngineEvents>(event: K, listener: (payload: EngineEvents[K]) => void): () => void;
|
||||
off<K extends keyof EngineEvents>(event: K, listener: (payload: EngineEvents[K]) => void): void;
|
||||
clearEvents(): void;
|
||||
reset(): void;
|
||||
}
|
||||
```
|
||||
|
||||
### 使用示例
|
||||
|
||||
```typescript
|
||||
const registry = ManagerRegistry.getInstance();
|
||||
const registry = new ManagerRegistry();
|
||||
|
||||
// 访问 Manager
|
||||
// 由引擎入口在初始化时写入各个 Manager 实例
|
||||
registry.toolbar?.show();
|
||||
registry.measure?.switchMode('distance');
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
| 模块 | 路径 | 职责 | 文档 |
|
||||
|------|------|------|------|
|
||||
| **core** | `src/core/` | 核心基础设施:事件系统、管理器基类、注册表 | [核心模块.md](核心模块.md) |
|
||||
| **managers** | `src/managers/` | 15 个管理器,处理业务逻辑和组件协调 | [管理器模块.md](管理器模块.md) |
|
||||
| **components** | `src/components/` | 20+ 个 UI 组件 | [组件模块.md](组件模块.md) |
|
||||
| **managers** | `src/managers/` | 15 个管理器,处理业务逻辑和组件协调(仅 3D) | [管理器模块.md](管理器模块.md) |
|
||||
| **components** | `src/components/` | 3 个引擎组件 + 20+ UI 组件 | [组件模块.md](组件模块.md) |
|
||||
| **services** | `src/services/` | 全局服务:国际化、主题管理 | [服务模块.md](服务模块.md) |
|
||||
|
||||
## Core 模块
|
||||
@@ -16,7 +16,7 @@
|
||||
| 类 | 文件 | 职责 |
|
||||
|-----|------|------|
|
||||
| EventEmitter | `event-emitter.ts` | 事件发布/订阅系统 |
|
||||
| ManagerRegistry | `manager-registry.ts` | 全局单例注册表 |
|
||||
| ManagerRegistry | `manager-registry.ts` | 实例级注册表,隔离每个引擎实例的 Manager 与事件 |
|
||||
| BaseManager | `base-manager.ts` | Manager 抽象基类 |
|
||||
| BaseDialogManager | `base-dialog-manager.ts` | 对话框 Manager 基类 |
|
||||
|
||||
@@ -57,11 +57,18 @@
|
||||
|
||||
纯 UI 组件,不包含业务逻辑。
|
||||
|
||||
### 核心组件
|
||||
### 引擎组件
|
||||
|
||||
| 组件 | 职责 |
|
||||
|------|------|
|
||||
| Engine | 3D 视口容器(包装 iflow-engine-base) |
|
||||
| Engine2d | 2D 图纸视口(包装 createEngine2d) |
|
||||
| Engine720 | 720° 全景视口(包装 createEngine720) |
|
||||
|
||||
### 核心 UI 组件
|
||||
|
||||
| 组件 | 职责 |
|
||||
|------|------|
|
||||
| Engine | 3D 视口容器 |
|
||||
| BimDialog | 通用对话框 |
|
||||
| BimTree | 树形控件 |
|
||||
| BimMenu | 菜单组件 |
|
||||
@@ -106,7 +113,7 @@
|
||||
| 文件 | 内容 |
|
||||
|------|------|
|
||||
| `types/component.ts` | 组件接口 IBimComponent |
|
||||
| `types/events.ts` | 事件类型 EngineEvents |
|
||||
| `types/events.ts` | 事件类型 EngineEvents(含 3D/2D/720 事件) |
|
||||
| `types/measure.ts` | 测量类型定义 |
|
||||
| `locales/types.ts` | 国际化类型 |
|
||||
| `themes/types.ts` | 主题配置类型 |
|
||||
@@ -119,4 +126,4 @@
|
||||
|
||||
---
|
||||
|
||||
**文档生成时间**: 2026-01-23
|
||||
**文档更新时间**: 2026-03-10
|
||||
|
||||
@@ -5,15 +5,17 @@
|
||||
| 项目 | 内容 |
|
||||
|------|------|
|
||||
| **模块名** | components |
|
||||
| **职责** | 提供 BIM 3D 引擎 SDK 的所有 UI 组件 |
|
||||
| **公开 API** | 20+ 个组件类 |
|
||||
| **职责** | 提供 BIM SDK 的所有引擎组件(3D / 2D / 720)和 UI 组件 |
|
||||
| **公开 API** | 3 个引擎组件 + 20+ UI 组件 |
|
||||
| **状态** | ✅ 稳定 |
|
||||
|
||||
## 代码地图
|
||||
|
||||
```
|
||||
src/components/
|
||||
├── engine/ # 3D 引擎组件
|
||||
├── engine/ # 3D 引擎组件 (包装 iflow-engine-base)
|
||||
├── engine-2d/ # 2D 图纸引擎组件 (包装 createEngine2d)
|
||||
├── engine-720/ # 720° 全景引擎组件 (包装 createEngine720)
|
||||
├── dialog/ # 通用弹窗组件
|
||||
├── tree/ # 树形控件组件
|
||||
├── menu/ # 菜单组件
|
||||
@@ -30,7 +32,6 @@ src/components/
|
||||
├── walk-plan-view-panel/ # 漫游平面图面板
|
||||
├── right-key/ # 右键菜单组件
|
||||
└── map-panel/ # 地图面板组件
|
||||
```
|
||||
|
||||
## 组件接口
|
||||
|
||||
@@ -52,7 +53,7 @@ interface IBimComponent {
|
||||
|
||||
### 概述
|
||||
|
||||
包装第三方 3D 引擎 SDK,提供模型加载、视角控制、测量功能。
|
||||
包装第三方 3D 引擎 SDK,提供模型加载、视角控制、测量功能。仅由 `BimEngine` 通过 `EngineManager` 使用。
|
||||
|
||||
### 配置
|
||||
|
||||
@@ -69,33 +70,135 @@ interface EngineOptions {
|
||||
### API
|
||||
|
||||
```typescript
|
||||
class Engine {
|
||||
class Engine implements IBimComponent {
|
||||
init(): void;
|
||||
loadModel(url: string, options?: ModelLoadOptions): void;
|
||||
CameraGoHome(): void;
|
||||
getEngine(): any;
|
||||
activateMeasure(mode: MeasureMode): void;
|
||||
deactivateMeasure(): void;
|
||||
onRawEvent(event: string, handler: Function): void;
|
||||
offRawEvent(event: string, handler: Function): void;
|
||||
setTheme(theme: ThemeConfig): void;
|
||||
destroy(): void;
|
||||
}
|
||||
```
|
||||
|
||||
### 测量模式
|
||||
---
|
||||
|
||||
| 模式 | 说明 |
|
||||
|------|------|
|
||||
| `distance` | 距离测量 |
|
||||
| `minDistance` | 最小距离 |
|
||||
| `angle` | 角度测量 |
|
||||
| `elevation` | 标高测量 |
|
||||
| `volume` | 体积测量 |
|
||||
| `laserDistance` | 激光测距 |
|
||||
| `slope` | 坡度测量 |
|
||||
| `spaceVolume` | 空间体积 |
|
||||
## Engine2d(2D 图纸引擎组件)
|
||||
|
||||
### 概述
|
||||
|
||||
包装 `createEngine2d()`,提供 2D CAD/DWG 图纸加载与查看。由 `BimEngine2d` 直接使用,跳过 Manager 层。
|
||||
|
||||
### 配置
|
||||
|
||||
```typescript
|
||||
interface Engine2dOptions {
|
||||
container: HTMLElement;
|
||||
backgroundColor?: number;
|
||||
gridEnabled?: boolean;
|
||||
axesEnabled?: boolean;
|
||||
selectionColor?: number;
|
||||
highlightColor?: number;
|
||||
enablePerformanceMonitoring?: boolean;
|
||||
}
|
||||
```
|
||||
|
||||
### API
|
||||
|
||||
```typescript
|
||||
class Engine2d implements IBimComponent {
|
||||
init(): void;
|
||||
loadDrawing(url: string, options?: DrawingLoadOptions): Promise<void>;
|
||||
getLayers(): Drawing2dLayer[];
|
||||
setLayerVisible(name: string, visible: boolean): void;
|
||||
resetView(): void;
|
||||
fitToView(): void;
|
||||
setZoom(zoom: number): void;
|
||||
getZoom(): number;
|
||||
onRawEvent(event: string, handler: Function): void;
|
||||
offRawEvent(event: string, handler: Function): void;
|
||||
setTheme(theme: ThemeConfig): void;
|
||||
destroy(): void;
|
||||
}
|
||||
```
|
||||
|
||||
### 相关类型
|
||||
|
||||
```typescript
|
||||
interface DrawingLoadOptions {
|
||||
chunkSize?: number;
|
||||
enableChunkedLoading?: boolean;
|
||||
enableValidation?: boolean;
|
||||
}
|
||||
|
||||
interface Drawing2dLayer {
|
||||
name: string;
|
||||
visible: boolean;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Engine720(720° 全景引擎组件)
|
||||
|
||||
### 概述
|
||||
|
||||
包装 `createEngine720()`,提供 720° 全景图加载与查看。由 `BimEngine720` 直接使用,跳过 Manager 层。
|
||||
|
||||
### 配置
|
||||
|
||||
```typescript
|
||||
interface Engine720Options {
|
||||
container: HTMLElement;
|
||||
fov?: number; // 默认 75
|
||||
enableZoom?: boolean; // 默认 true
|
||||
enableRotate?: boolean; // 默认 true
|
||||
sphereRadius?: number; // 默认 500
|
||||
rotateSpeed?: number;
|
||||
zoomSpeed?: number;
|
||||
enableDamping?: boolean;
|
||||
dampingFactor?: number;
|
||||
minFov?: number;
|
||||
maxFov?: number;
|
||||
}
|
||||
```
|
||||
|
||||
### API
|
||||
|
||||
```typescript
|
||||
class Engine720 implements IBimComponent {
|
||||
init(): void;
|
||||
loadPanorama(url: string, options?: PanoramaLoadOptions): Promise<void>;
|
||||
preloadPanoramas(urls: string[]): Promise<void>;
|
||||
setFov(fov: number): void;
|
||||
getFov(): number;
|
||||
lookAt(phi: number, theta: number, animated?: boolean): void;
|
||||
resetView(): void;
|
||||
onRawEvent(event: string, handler: Function): void;
|
||||
offRawEvent(event: string, handler: Function): void;
|
||||
setTheme(theme: ThemeConfig): void;
|
||||
destroy(): void;
|
||||
}
|
||||
```
|
||||
|
||||
### 相关类型
|
||||
|
||||
```typescript
|
||||
interface PanoramaLoadOptions {
|
||||
timeout?: number;
|
||||
}
|
||||
|
||||
interface PanoramaAnnotation {
|
||||
id: string;
|
||||
phi?: number;
|
||||
theta?: number;
|
||||
text?: string;
|
||||
data?: any;
|
||||
}
|
||||
```
|
||||
|
||||
## BimDialog(通用弹窗组件)
|
||||
|
||||
### 概述
|
||||
@@ -602,4 +705,4 @@ interface WalkControlState {
|
||||
|
||||
---
|
||||
|
||||
**文档生成时间**: 2026-01-23
|
||||
**文档更新时间**: 2026-03-10
|
||||
|
||||
Reference in New Issue
Block a user