基础概念
本文档介绍 NIVIOBIM 图形引擎的核心概念和架构设计,帮助您建立完整的技术认知。
架构概述
NIVIOBIM 图形引擎采用模块化分层架构:
text
┌─────────────────────────────────────────┐
│ 应用层 │
├─────────────────────────────────────────┤
│ 插件层 │
├─────────────────────────────────────────┤
│ 核心层 │
├─────────────────────────────────────────┤
│ 管理器层 │
├─────────────────────────────────────────┤
│ 模型层 │
├─────────────────────────────────────────┤
│ 加载器层 │
├─────────────────────────────────────────┤
│ 渲染层 │
└─────────────────────────────────────────┘核心组件
Viewer3D 主引擎
Viewer3D 是引擎入口,负责协调场景、渲染、加载和插件系统。
管理器系统
- SceneManager:场景与对象组织
- RenderManager:WebGL/CSS2D 渲染与渲染策略
- CameraManager:相机控制与视点管理
- LightManager:灯光系统管理
- DataManager:模型与属性数据管理
- EventManager:统一事件机制
- ExtensionManager:插件注册与生命周期
模型系统
- Model:模型基类
- InstancedObjects:实例化对象
- MergedObjects:合并对象
- SingleObjects:单独对象
加载器系统
- NIVIOBIMLoader:模型加载与流式解析
插件系统
- Plugin:插件基类
- Measure:测量
- Section:剖切
- SkyBox:天空盒
- ViewCubeControl:视图立方体
- FirstPersonControl:漫游控制
- DrawingMapModel:图模映射
数据流
模型加载流程
text
配置对象(Config) → NIVIOBIMLoader → Model → SceneManager → RenderManager交互事件流程
text
用户输入 → EventManager → 插件系统/选择系统 → 场景更新 → 渲染更新完整案例:测量插件接入流程
以下示例展示从初始化到启用测量插件的完整流程:
javascript
import * as GraphicsEngine from './core/viewer3D@2.1.5.module.js';
import PluginPackage from './plugins/PluginPackage@2.1.5.module.js';
window.PluginPackage = PluginPackage;
const container = document.getElementById('app');
const config = new GraphicsEngine.Config('地质博物馆建筑', container);
config.setStaticPath('../public/models/');
config.currentLoadType = GraphicsEngine.Config.LoadType.Local;
const viewer3D = GraphicsEngine.Viewer3D.Initializer(
config,
(progress) => console.log('加载进度:', progress),
(error) => console.error('加载错误:', error)
);
// 创建并启用测量插件
const measure = new PluginPackage.Measure(viewer3D, {
name: 'Measure',
enabled: true
});
// 设置测量模式和单位
measure.setCurrentMode(PluginPackage.Measure.MODE.DISTANCE);
measure.setCurrentUnit(PluginPackage.Measure.UNIT.M);
measure.setCurrentPrecision(PluginPackage.Measure.PRECISION.TWO);
// 监听测量更新
measure.addEventListener('update', () => {
console.log('测量状态已更新');
});最佳实践
- 先稳定主流程再扩展插件:先跑通 Config + Viewer3D + 模型加载。
- 统一资源释放:页面销毁时调用插件与引擎
dispose。 - 配置与文档版本保持一致:SDK、文档入口、版本号同步更新。
- 优先使用事件驱动:通过
update等事件同步业务 UI 状态。