Files
bim_engine/docs/ENGINE_2D/API文档.md
2026-03-16 16:13:36 +08:00

298 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 2D 图纸引擎 API 文档
## 概述
`BimEngine2d` 是独立的 2D CAD/DWG 图纸查看引擎。轻量级设计,不依赖 3D 引擎的 UI 管理器toolbar、measure 等),构造时自动初始化。
**文件路径**: `src/bim-engine-2d.ts`
**底层依赖**: `iflow-engine-base``createEngine2d()`
---
## 导入
```typescript
// ESM
import { BimEngine2d } from 'iflow-engine';
// UMD
const { BimEngine2d } = IflowEngine;
```
---
## BimEngine2d
### 构造函数
```typescript
constructor(container: HTMLElement | string, options?: BimEngine2dOptions)
```
**参数**:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| `container` | `HTMLElement \| string` | ✅ | DOM 元素或元素 ID |
| `options` | `BimEngine2dOptions` | | 构造选项 |
构造时自动初始化引擎,无需额外调用 `initialize()` 方法。
### BimEngine2dOptions
```typescript
interface BimEngine2dOptions {
/** 语言 */
locale?: 'zh-CN' | 'en-US';
/** 主题 */
theme?: 'dark' | 'light';
/** 背景颜色(十六进制数值,如 0xffffff */
backgroundColor?: number;
/** 是否启用网格 */
gridEnabled?: boolean;
/** 是否启用坐标轴 */
axesEnabled?: boolean;
/** 选中构件颜色 */
selectionColor?: number;
/** 高亮构件颜色 */
highlightColor?: number;
/** 是否启用性能监控 */
enablePerformanceMonitoring?: boolean;
}
```
---
## 图纸操作
### loadDrawing()
```typescript
public async loadDrawing(url: string, options?: DrawingLoadOptions): Promise<void>
```
**功能**: 加载 2D 图纸
**参数**:
- `url`: string — 图纸资源 URL
- `options`: DrawingLoadOptions — 加载选项(可选)
**返回值**: Promise\<void\>
```typescript
interface DrawingLoadOptions {
/** 分块大小 */
chunkSize?: number;
/** 是否启用分块加载 */
enableChunkedLoading?: boolean;
/** 是否启用数据校验 */
enableValidation?: boolean;
}
```
**示例**:
```typescript
await engine2d.loadDrawing('https://example.com/drawing-id');
```
### getLayers()
```typescript
public getLayers(): Drawing2dLayer[]
```
**功能**: 获取当前图纸的所有图层
**返回值**: Drawing2dLayer[]
```typescript
interface Drawing2dLayer {
/** 图层名称 */
name: string;
/** 图层是否可见 */
visible: boolean;
}
```
**示例**:
```typescript
const layers = engine2d.getLayers();
layers.forEach(layer => {
console.log(`${layer.name}: ${layer.visible ? '可见' : '隐藏'}`);
});
```
### setLayerVisible()
```typescript
public setLayerVisible(name: string, visible: boolean): void
```
**功能**: 设置指定图层的可见性
**参数**:
- `name`: string — 图层名称
- `visible`: boolean — 是否可见
**示例**:
```typescript
engine2d.setLayerVisible('标注层', false); // 隐藏标注层
engine2d.setLayerVisible('墙体', true); // 显示墙体层
```
---
## 视图控制
### resetView()
```typescript
public resetView(): void
```
**功能**: 重置视图到初始状态
### fitToView()
```typescript
public fitToView(): void
```
**功能**: 缩放到适应全部图纸内容
### setZoom()
```typescript
public setZoom(zoom: number): void
```
**功能**: 设置缩放级别
**参数**:
- `zoom`: number — 缩放值
### getZoom()
```typescript
public getZoom(): number
```
**功能**: 获取当前缩放级别
**返回值**: number — 当前缩放值,默认 1
---
## 主题
### setTheme()
```typescript
public setTheme(theme: 'dark' | 'light'): void
```
**功能**: 切换主题
**参数**:
- `theme`: 'dark' | 'light'
---
## 事件
### on()
```typescript
public on<K extends keyof EngineEvents>(
event: K,
listener: (payload: EngineEvents[K]) => void
): () => void
```
**功能**: 订阅事件
**返回值**: 取消订阅函数
**示例**:
```typescript
const unsub = engine2d.on('engine:model-loaded', (payload) => {
console.log('图纸加载完成');
});
// 取消订阅
unsub();
```
### off()
```typescript
public off<K extends keyof EngineEvents>(
event: K,
listener: (payload: EngineEvents[K]) => void
): void
```
**功能**: 取消事件订阅
### onRawEvent()
```typescript
public onRawEvent(event: string, handler: (...args: any[]) => void): void
```
**功能**: 订阅底层 2D 引擎的原始事件
### offRawEvent()
```typescript
public offRawEvent(event: string, handler: (...args: any[]) => void): void
```
**功能**: 取消订阅底层 2D 引擎的原始事件
---
## 生命周期
### destroy()
```typescript
public destroy(): void
```
**功能**: 销毁引擎,释放所有资源
- 销毁底层 Engine2d 组件
- 重置 ManagerRegistry
- 调用后实例不可再使用
**重要**: 切换引擎类型或页面卸载时务必调用。
---
## 内部架构
```text
BimEngine2d (用户 API)
├─ ManagerRegistry (仅事件总线,不注册 Manager)
└─ Engine2d 组件 (IBimComponent)
└─ createEngine2d() (iflow-engine-base)
```
`BimEngine`3D的关键区别
| | BimEngine (3D) | BimEngine2d (2D) |
|---|---|---|
| Manager 层 | 15 个 Manager | 无(跳过 Manager 层) |
| UI 组件 | toolbar、dialog、menu 等 | 无 |
| 初始化 | 需要调用 `engine.initialize()` | 构造时自动初始化 |
| ManagerRegistry | 完整注册所有 Manager | 仅用于事件发射 |
---
**文档版本**: 1.0.0 | **更新日期**: 2026-03-10