Viewer3D
NIVIOBIM图形引擎的核心类,继承自EventManager。提供完整的3D场景管理功能,包括渲染、模型加载、插件系统、交互控制等。
类定义
class Viewer3D extends EventManager构造函数
constructor(config)
创建Viewer3D实例,初始化Viewer3D引擎,创建所有必要的管理器、加载器和控制器。设置渲染循环、事件监听、渐进式渲染等核心功能。
参数:
config{Config} - 配置类实例,包含容器、模型路径等配置信息
示例:
// 创建Viewer3D实例
const config = new Config('building_model', container);
const viewer3D = new Viewer3D(config);
// 获取各种管理器
const sceneManager = viewer3D.sceneManager;
const renderManager = viewer3D.renderManager;
const extensionManager = viewer3D.extensionManager;静态方法
Initializer(config, progress, failed)
初始化Viewer3D,根据配置的加载类型自动选择相应的模型加载方式。
参数:
config{Config} - 初始化配置实例。详见 Configprogress{Function} - 初始化过程中的回调函数failed{function(Error)} - 初始化失败的回调函数
返回值:
- {Viewer3D} Viewer3D实例
示例:
// 使用静态初始化方法创建Viewer3D
const config = new Config('building_model', container);
const viewer3D = Viewer3D.Initializer(
config,
(progress) => console.log('加载进度:', progress),
(error) => console.error('加载失败:', error)
);
// 获取各种管理器
const sceneManager = viewer3D.sceneManager;
const renderManager = viewer3D.renderManager;
const extensionManager = viewer3D.extensionManager;getTHREE()
获取THREE实例,用于访问Three.js的所有功能。
返回值:
- {Object} Three.js库实例
示例:
// 获取Three.js实例
const THREE = Viewer3D.getTHREE();
// 使用Three.js创建几何体
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);属性
renderManager
获取渲染管理器实例,用于控制WebGL渲染器和CSS2D渲染器。详见 RenderManager
类型:
示例:
// 获取渲染管理器
const renderManager = viewer3D.renderManager;
// 设置渲染器大小
viewer3D.resizeRender();sceneManager
获取场景管理器实例,用于管理3D场景、相机、灯光等。详见 SceneManager
类型:
示例:
// 获取场景管理器
const sceneManager = viewer3D.sceneManager;
// 获取几何场景
const geometryScene = sceneManager.geometryScene;extensionManager
获取扩展管理器实例,用于管理插件系统。详见 ExtensionManager
类型:
示例:
// 获取扩展管理器
const extensionManager = viewer3D.extensionManager;
// 添加插件
extensionManager.addPlugin('measure', measurePlugin, true);loader
获取NIVIOBIM加载器实例,用于加载各种格式的3D模型。详见 NIVIOBIMLoader
类型:
示例:
// 获取加载器
const loader = viewer3D.loader;
// 加载GLTF模型
loader.loadGlTF(url, onSuccess, onProgress, onError);selection
获取选择器实例,用于3D场景中的对象选择和交互。详见 Selection
类型:
示例:
// 获取选择器
const selection = viewer3D.selection;
// 设置选择模型
selection.setModel(model);config
获取配置实例,包含Viewer3D的所有配置信息。详见 Config
类型:
示例:
// 获取配置
const config = viewer3D.config;
// 获取模型名称
const modelName = config.modelName;realTimeRender
控制渲染模式,决定是否启用实时渲染。
类型: {boolean}
默认值: false
说明:
true: 启用实时渲染,每帧都进行完整渲染false: 启用渐进式渲染,仅在交互时进行优化渲染
示例:
// 启用实时渲染
viewer3D.realTimeRender = true;
// 启用渐进式渲染
viewer3D.realTimeRender = false;controllingRender
交互时的渐进式渲染方法,在用户交互时自动调用,用于优化渲染性能。
类型:
示例:
// 手动触发交互渲染
viewer3D.controllingRender();controlEndRender
交互结束时的渐进式渲染方法,在用户交互结束后自动调用,用于恢复完整渲染。
类型:
示例:
// 手动触发交互结束渲染
viewer3D.controlEndRender();方法
setRoomEnvironment(bool)
设置室内环境,控制3D场景的室内环境贴图,影响模型的反射和光照效果。
参数:
bool{boolean} - 是否启用室内环境,true为启用,false为禁用
示例:
// 启用室内环境
viewer3D.setRoomEnvironment(true);
// 禁用室内环境
viewer3D.setRoomEnvironment(false);allRender()
同时渲染标签元素和几何元素,执行完整的渲染,包括3D几何场景和2D标签场景的渲染。
示例:
// 执行完整渲染
viewer3D.allRender();glRender()
渲染几何元素,使用WebGL渲染器渲染3D几何场景。
示例:
// 渲染3D几何场景
viewer3D.glRender();cssRender()
渲染标签元素,使用CSS2D渲染器渲染2D标签场景。
示例:
// 渲染2D标签场景
viewer3D.cssRender();resizeRender()
将canvas像素适应到窗口大小,调整渲染器大小以适应容器尺寸变化,同时更新相机投影矩阵。
示例:
// 调整渲染器大小
viewer3D.resizeRender();loadGlTF(onSuccess, onProgress, onError)
加载glTF模型,并转换为Model。从配置的URL加载glTF格式的3D模型,并转换为NIVIOBIM的Model格式。
参数:
onSuccess{function(Model)} - 模型加载成功的回调函数onProgress{function(LoadedGltfStatus)} - 模型加载过程中的回调函数onError{function(Error)} - 模型加载失败的回调函数
示例:
// 加载glTF模型
viewer3D.loadGlTF(
(model) => console.log('模型加载成功:', model),
(progress) => console.log('加载进度:', progress),
(error) => console.error('加载失败:', error)
);loadGlb(glbFile, onSuccess, onProgress, onError)
加载glb模型文件,从本地文件加载glb格式的3D模型,并转换为NIVIOBIM的Model格式。
参数:
glbFile{File} - 需要加载的glb文件onSuccess{function(Model)} - 模型加载成功的回调函数onProgress{function(LoadedGltfStatus)} - 模型加载过程中的回调函数onError{function(Error)} - 模型加载失败的回调函数
示例:
// 加载glb文件
const fileInput = document.getElementById('fileInput');
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
viewer3D.loadGlb(
file,
(model) => console.log('模型加载成功:', model),
(progress) => console.log('加载进度:', progress),
(error) => console.error('加载失败:', error)
);
});loadModelByStream(onSuccess, onProgress, onError)
模型流式加载方法,使用流式加载方式加载NIVIOBIM格式的模型,支持大型模型的分批加载。
参数:
onSuccess{function(Model)} - 模型加载成功的回调函数onProgress{function(LoadedInfo)} - 模型加载过程中的回调函数onError{function(Error)} - 模型加载失败的回调函数
示例:
// 流式加载模型
viewer3D.loadModelByStream(
(model) => console.log('模型加载完成:', model),
(progress) => console.log('加载进度:', progress.status),
(error) => console.error('加载失败:', error)
);loadLocalModel(nivioFile, onSuccess, onProgress, onError)
加载本地NIVIOBIM模型文件,从本地文件加载NIVIOBIM格式的模型文件,支持.nivio格式。
参数:
nivioFile{File} - 需要加载的.nivio文件onSuccess{function(Model)} - 模型加载成功的回调函数onProgress{function(LoadedInfo)} - 模型加载过程中的回调函数onError{function(Error)} - 模型加载失败的回调函数
示例:
// 加载本地NIVIOBIM文件
const fileInput = document.getElementById('nivioFileInput');
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
viewer3D.loadLocalModel(
file,
(model) => console.log('模型加载成功:', model),
(progress) => console.log('加载进度:', progress),
(error) => console.error('加载失败:', error)
);
});loadModelProperty(model)
加载模型属性,并将该模型属性赋予它自身。异步加载模型的属性数据,包括材质、纹理、元数据等信息。
参数:
model{Model} - 需要加载属性的模型
返回值:
- {Promise<Object>} 模型属性数据
示例:
// 加载模型属性
const model = viewer3D.sceneManager.dataManager.models.get('modelId');
const properties = await viewer3D.loadModelProperty(model);
console.log('模型属性:', properties);loadModelTree(model)
加载模型树属性,并将该模型树赋予它自身。异步加载模型的树形结构数据,包括层级关系、节点信息等。
参数:
model{Model} - 需要加载树结构的模型
返回值:
- {Promise<Object>} 模型树结构数据
示例:
// 加载模型树结构
const model = viewer3D.sceneManager.dataManager.models.get('modelId');
const tree = await viewer3D.loadModelTree(model);
console.log('模型树结构:', tree);dispose()
回收viewer3D,清理Viewer3D实例的所有资源,包括场景、渲染器、插件等。调用此方法后,Viewer3D实例将不再可用。
示例:
// 清理Viewer3D资源
viewer3D.dispose();事件
processInfo
渲染过程中的信息事件,包含渲染统计等信息。
事件数据:
processInfo{Object} - 渲染过程信息
示例:
viewer3D.addEventListener('processInfo', (event) => {
console.log('渲染信息:', event.processInfo);
});相关链接
- Config - 配置管理类
- Utils - 工具类
- Selection - 选择系统
- SceneManager - 场景管理器
- RenderManager - 渲染管理器
- ExtensionManager - 扩展管理器