Files
bim_engine/USAGE_EXAMPLE.md
2025-12-04 18:41:11 +08:00

208 lines
4.6 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.

# BimEngine 使用示例
## 基础使用
### 1. 创建 BimEngine 实例
```typescript
import { BimEngine } from './src/bim-engine';
// 方式 1: 使用 DOM 元素 ID
const engine = new BimEngine('my-container', {
locale: 'zh-CN',
theme: 'dark'
});
// 方式 2: 使用 DOM 元素引用
const containerEl = document.getElementById('my-container');
const engine2 = new BimEngine(containerEl, {
locale: 'en-US',
theme: 'light'
});
```
### 2. 初始化 3D 引擎(延迟初始化)
**重要**: 3D 引擎采用延迟初始化模式,需要用户主动调用 `initEngine3D()` 方法。
```typescript
// 先创建 BimEngine 实例
const engine = new BimEngine('my-container');
// 稍后在需要时初始化 3D 引擎
const success = engine.initEngine3D({
backgroundColor: 0x333333,
version: 'v1',
showStats: true,
showViewCube: true
});
if (success) {
console.log('3D 引擎初始化成功!');
}
// 检查引擎是否已初始化
if (engine.isEngine3DInitialized()) {
// 可以加载模型了
}
```
### 3. 加载 3D 模型
```typescript
// 确保先初始化 3D 引擎
engine.initEngine3D({
backgroundColor: 0x1a1a1a,
showStats: true
});
// 加载模型 - 使用默认参数
engine.loadModel('/model/building.glb');
// 加载模型 - 自定义位置、旋转、缩放
engine.loadModel('/model/gujianzhu.glb', {
position: [10, -5, 0],
rotation: [0, Math.PI / 4, 0],
scale: [2, 2, 2]
});
```
### 3. 动态切换主题和语言
```typescript
// 切换主题
engine.setTheme('dark');
engine.setTheme('light');
// 切换语言
engine.setLocale('zh-CN');
engine.setLocale('en-US');
// 设置自定义主题
engine.setCustomTheme({
background: '#1a1a1a',
textPrimary: '#ffffff',
textSecondary: '#999999',
// ... 其他主题配置
});
```
### 4. 访问 3D 引擎实例
```typescript
// 直接访问底层 3D 引擎
if (engine.engine3D) {
// 调用第三方 3D 引擎的其他方法
engine.engine3D.someOtherMethod();
}
```
## 在 HTML 中使用
```html
<!DOCTYPE html>
<html>
<head>
<style>
#bim-container {
width: 100vw;
height: 100vh;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="bim-container"></div>
<script type="module">
import { BimEngine } from './dist/bim-engine-sdk.es.js';
const engine = new BimEngine('bim-container', {
engine3D: {
backgroundColor: 0x1a1a1a,
showStats: true,
showViewCube: true
}
});
// 加载模型
engine.loadModel('/models/building.glb', {
position: [0, 0, 0],
scale: [1.5, 1.5, 1.5]
});
</script>
</body>
</html>
```
## 在 Vue 3 中使用
```vue
<template>
<div ref="containerRef" class="bim-container"></div>
</template>
<script setup lang="ts">
import { ref, onMounted, onUnmounted } from 'vue';
import { BimEngine } from 'bim-engine-sdk';
const containerRef = ref<HTMLElement>();
let engine: BimEngine | null = null;
onMounted(() => {
if (containerRef.value) {
engine = new BimEngine(containerRef.value, {
locale: 'zh-CN',
theme: 'dark',
engine3D: {
backgroundColor: 0x202020,
showStats: true,
showViewCube: true
}
});
// 加载模型
engine.loadModel('/models/building.glb');
}
});
onUnmounted(() => {
engine?.destroy();
});
</script>
<style scoped>
.bim-container {
width: 100%;
height: 100vh;
}
</style>
```
## 配置选项说明
### Engine3DOptions
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `backgroundColor` | `number` | `0x333333` | 3D 场景背景色(十六进制颜色值) |
| `version` | `'v1' \| 'v2'` | `'v1'` | WebGL 版本 |
| `showStats` | `boolean` | `false` | 是否显示性能统计 |
| `showViewCube` | `boolean` | `true` | 是否显示视图立方体 |
### LoadModel Options
| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| `position` | `[number, number, number]` | `[0, 0, 0]` | 模型位置 [x, y, z] |
| `rotation` | `[number, number, number]` | `[0, 0, 0]` | 模型旋转(弧度)[x, y, z] |
| `scale` | `[number, number, number]` | `[1, 1, 1]` | 模型缩放 [x, y, z] |
## 注意事项
1. **容器尺寸**: 确保容器元素有明确的宽高,否则 3D 引擎无法正常渲染
2. **模型路径**: 模型文件路径需要是可访问的 URL 或相对路径
3. **销毁实例**: 组件卸载时记得调用 `engine.destroy()` 释放资源
4. **z-index 层级**: UI 组件会自动叠加在 3D 场景之上z-index: 100+