NIVIOBIMLoader
NIVIOBIM数据加载器类,用于加载NIVIOBIM格式3D模型数据的核心类。支持多种加载方式:流式加载、本地文件加载。支持自主研发的nivio、GLTF/GLB格式加载。
类定义
class NIVIOBIMLoader静态属性
STREAM_STATUS
流式加载状态枚举,定义了模型流式加载过程中的各种状态。
类型: {Object}
静态: true
只读: true
属性:
INITIALIZED{string} - 已初始化状态START{string} - 开始加载状态LOADING{string} - 加载中状态END{string} - 流式加载结束状态CLOSE{string} - 加载关闭状态NONE{string} - 无状态
示例:
// 检查加载状态
if (loadedInfo.status === NIVIOBIMLoader.STREAM_STATUS.LOADING) {
console.log('正在加载中...');
}属性
fileLoader
获取文件加载器实例,用于加载各种文件。
类型: {FileLoader}
只读: true
示例:
// 获取文件加载器
const fileLoader = loader.fileLoader;gltfLoader
获取GLTF加载器实例,用于加载GLTF/GLB格式的模型。
类型: {GLTFLoader}
只读: true
示例:
// 获取GLTF加载器
const gltfLoader = loader.gltfLoader;方法
decompressAsync(file)
异步解压ZIP文件,使用Archive模块解压ZIP文件,支持加密文件的密码验证。
参数:
file{File} - 要解压的ZIP文件
返回值:
- {Promise<Object>} 返回解压后的文件对象
示例:
// 解压ZIP文件
const zipFile = new File([zipData], 'archive.zip');
const extractedFiles = await loader.decompressAsync(zipFile);
console.log('解压后的文件:', extractedFiles);traverseCompress(file, callback)
递归解压文件,递归遍历文件结构,对ZIP和NIVIO格式的文件进行解压处理。
参数:
file{File|Object} - 要处理的文件或文件对象callback{function(File)} - 处理完成后的回调函数
示例:
// 递归解压文件
loader.traverseCompress(compressedFile, (extractedFile) => {
console.log('解压出文件:', extractedFile.name);
});decompressing(url, fileName)
加载压缩文件并解压,从URL下载压缩文件,然后递归解压并返回最终的文件对象。
参数:
url{string} - 压缩文件的URL地址fileName{string} - 文件名,包含扩展名
返回值:
- {Promise<File>} 返回解压后的文件对象
示例:
// 下载并解压文件
const extractedFile = await loader.decompressing(
'path/to/compressed.nivio',
'compressed.nivio'
);
console.log('解压后的文件:', extractedFile);resolveObjectByJsonZIP(url, fileName)
解析ZIP压缩的JSON文件,从URL下载ZIP文件,解压并解析其中的JSON内容。
参数:
url{string} - 压缩文件的URL地址fileName{string} - 文件名,包含扩展名
返回值:
- {Promise<Object>} 返回解析后的JSON对象
示例:
// 解析JSON ZIP文件
const jsonData = await loader.resolveObjectByJsonZIP(
'path/to/data.zip',
'data.zip'
);
console.log('解析的JSON数据:', jsonData);loadModelByStream(indexUrl, indexFileName, onSuccess, onProgress, onError)
模型的流式加载,分批加载大型模型,提供进度监控和错误处理。首先加载索引文件获取模型结构信息,然后分批加载各个模型文件,每批处理5个文件,避免浏览器阻塞。
参数:
indexUrl{string} - 索引文件的URL路径indexFileName{string} - 索引文件名称onSuccess{function(Model)} - 模型加载成功的回调函数onProgress{function(LoadedInfo)} - 模型加载过程中的进度回调函数onError{function(Error)} - 模型加载失败的错误回调函数
示例:
// 流式加载模型
loader.loadModelByStream(
'path/to/index.nivio',
'index.nivio',
(model) => console.log('模型加载完成', model),
(info) => console.log('加载进度:', info.loaded + '/' + info.total),
(error) => console.error('加载失败:', error)
);loadLocalModel(file, onSuccess, onProgress, onError)
加载本地模型文件,从本地文件系统加载NIVIO格式的模型文件,支持包含属性、树形结构和GLB数据的完整模型包。自动识别并处理不同类型的文件(Properties、treeModel、GLB等)。
参数:
file{File} - 本地模型文件onSuccess{function(Model)} - 模型加载成功的回调函数onProgress{function(LoadedInfo)} - 模型加载过程中的进度回调函数onError{function(Error)} - 模型加载失败的错误回调函数
示例:
// 加载本地NIVIOBIM文件
const fileInput = document.getElementById('fileInput');
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
loader.loadLocalModel(
file,
(model) => console.log('本地模型加载完成', model),
(info) => console.log('加载进度:', info.loaded + '/' + info.total),
(error) => console.error('加载失败:', error)
);
});loadGlTF(url, onSuccess, onProgress, onError)
加载GLTF模型并转换为Model对象,从URL加载GLTF格式的3D模型,自动进行实例化和合并优化,然后转换为自定义的Model对象。支持DRACO压缩的几何数据解压。
参数:
url{string} - GLTF模型文件的URL路径onSuccess{function(Model)} - 加载成功时的回调函数onProgress{function(LoadedGltfStatus)} - 加载过程中的进度回调函数onError{function(Error)} - 加载失败后的错误回调函数
示例:
// 加载glTF模型
loader.loadGlTF(
'path/to/model.gltf',
(model) => console.log('GLTF模型加载完成', model),
(status) => console.log('加载状态:', status.status, '进度:', status.value + '%'),
(error) => console.error('加载失败:', error)
);loadGlbAsync(glbFile, onSuccess, onProgress, onError)
异步加载GLB文件,从本地文件系统异步加载GLB格式的3D模型,自动进行实例化和合并优化,然后转换为自定义的Model对象。支持DRACO压缩的几何数据解压。
参数:
glbFile{File} - 需要加载的GLB文件onSuccess{function(Model)} - 加载成功时的回调函数onProgress{function(LoadedGltfStatus)} - 加载过程中的进度回调函数onError{function(Error)} - 加载失败后的错误回调函数
返回值:
- {Promise<Model>} 返回解析并转换后的Model对象
示例:
// 异步加载glb文件
const fileInput = document.getElementById('glbFileInput');
fileInput.addEventListener('change', async (event) => {
const file = event.target.files[0];
try {
const model = await loader.loadGlbAsync(
file,
(model) => console.log('GLB模型加载完成', model),
(status) => console.log('加载状态:', status.status),
(error) => console.error('加载失败:', error)
);
} catch (error) {
console.error('加载过程中发生错误:', error);
}
});类型定义
LoadedInfo
模型加载信息对象
类型:
属性:
total{number} - 数据包的总个数name{string} - 数据包的名称loaded{number} - 当前已加载的对象数量status{NIVIOBIMLoader.STREAM_STATUS} - 流式加载的状态nodeIndex{Object} - 模型的索引结构,用于快速查找节点sceneBVHTree{Object} - 场景的BVH树数据,用于碰撞检测和视锥剔除sceneBoundingBox{Object} - 场景的边界框数据(Box3格式)sceneBoundingSphere{Object} - 场景的边界球数据(Sphere格式)loadType{string} - 加载方式,默认为'STREAM'
LoadedGltfStatus
GLTF模型加载状态对象
类型:
属性:
status{string} - 加载状态,包括: 'loading'(加载中), 'disposing'(处理中), 'end'(完成)三种状态value{number} - 加载进度值,范围0-100
使用场景
流式加载
- 支持大型模型的分批加载
- 提供加载进度监控
本地文件加载
- 支持从本地文件系统加载模型
- 支持拖拽上传功能
- 提供文件格式验证
多格式支持
- 支持NIVIOBIM格式
- 支持glTF/GLB格式
- 提供统一的加载接口
数据解析
- 支持ZIP文件的解析
- 支持JSON数据的提取
- 提供异步数据处理