Skip to content

NIVIOBIMLoader

NIVIOBIM数据加载器类,用于加载NIVIOBIM格式3D模型数据的核心类。支持多种加载方式:流式加载、本地文件加载。支持自主研发的nivio、GLTF/GLB格式加载。

类定义

javascript
class NIVIOBIMLoader

静态属性

STREAM_STATUS

流式加载状态枚举,定义了模型流式加载过程中的各种状态。

类型: {Object}
静态: true
只读: true

属性:

  • INITIALIZED {string} - 已初始化状态
  • START {string} - 开始加载状态
  • LOADING {string} - 加载中状态
  • END {string} - 流式加载结束状态
  • CLOSE {string} - 加载关闭状态
  • NONE {string} - 无状态

示例:

javascript
// 检查加载状态
if (loadedInfo.status === NIVIOBIMLoader.STREAM_STATUS.LOADING) {
    console.log('正在加载中...');
}

属性

fileLoader

获取文件加载器实例,用于加载各种文件。

类型: {FileLoader}
只读: true

示例:

javascript
// 获取文件加载器
const fileLoader = loader.fileLoader;

gltfLoader

获取GLTF加载器实例,用于加载GLTF/GLB格式的模型。

类型: {GLTFLoader}
只读: true

示例:

javascript
// 获取GLTF加载器
const gltfLoader = loader.gltfLoader;

方法

decompressAsync(file)

异步解压ZIP文件,使用Archive模块解压ZIP文件,支持加密文件的密码验证。

参数:

  • file {File} - 要解压的ZIP文件

返回值:

  • {Promise<Object>} 返回解压后的文件对象

示例:

javascript
// 解压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)} - 处理完成后的回调函数

示例:

javascript
// 递归解压文件
loader.traverseCompress(compressedFile, (extractedFile) => {
    console.log('解压出文件:', extractedFile.name);
});

decompressing(url, fileName)

加载压缩文件并解压,从URL下载压缩文件,然后递归解压并返回最终的文件对象。

参数:

  • url {string} - 压缩文件的URL地址
  • fileName {string} - 文件名,包含扩展名

返回值:

  • {Promise<File>} 返回解压后的文件对象

示例:

javascript
// 下载并解压文件
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对象

示例:

javascript
// 解析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)} - 模型加载失败的错误回调函数

示例:

javascript
// 流式加载模型
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)} - 模型加载失败的错误回调函数

示例:

javascript
// 加载本地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)} - 加载失败后的错误回调函数

示例:

javascript
// 加载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对象

示例:

javascript
// 异步加载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数据的提取
  • 提供异步数据处理

相关链接

文档内容为北京逆维悦动科技有限公司版权所有,禁止未授权转载