【问题标题】:Loading multiple models with loadModel promise使用 loadModel 承诺加载多个模型
【发布时间】:2020-01-23 06:27:41
【问题描述】:

我想使用 loadModel 承诺和 loadAsHidden 选项加载模型数组。然后,一旦加载了所有模型,就立即将它们全部显示出来。在我运行 loadModel 命令后,似乎每个承诺都立即得到解决。所以 showHiddenModels 函数在模型完全加载之前运行。 Storeys 数组包含文件的 svf 地址。

function loadAllModels() {
    let options =
    {
        loadAsHidden: true,
        globalOffset: { x: 0, y: 0, z: 0 }            
    };

    let promises = [];
    let length = storeys.length;
    let counter = 0;

    for (let storey of storeys) {
        let modelPromise = viewer.loadModel(storey.Svf, options);
        modelPromise.then((result) => {                
            counter++;
            console.log('counter: ' + counter);

            if (counter == length) {
                showHiddenModels();
            }
        });

        promises.push(modelPromise);
    }
}

function showHiddenModels() {
    let models = viewer.impl.modelQueue().getHiddenModels();

    for (let model of models) {
         viewer.showModel(model);
    }

    let extension = viewer.getExtension('Autodesk.ViewCubeUi');
    extension.setViewCube('[top/front]');     
}

这是它在控制台中的外观。所以首先调用 promise.then,然后开始加载文件。

【问题讨论】:

    标签: autodesk-forge autodesk-viewer


    【解决方案1】:

    LoadModel 会在模型种子文件加载后立即履行其承诺,而不是其完整的几何/纹理等...

    对于模型完成加载的生命周期事件订阅Autodesk.Viewing.GEOMETRY_LOADED_EVENT

    viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, event=>{
      //event {type:string, model:object, target:object}
    })
    

    在多个模型场景中,当每个模型完成加载时,此事件会触发多次 - 使用 model 对象的 id 来判断最后一个模型何时完全加载。

    【讨论】:

      猜你喜欢
      • 2021-05-06
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-17
      • 1970-01-01
      相关资源
      最近更新 更多