autodesk-forge - 使用 loadModel 承诺加载多个模型
问题描述
我想使用 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,然后它开始加载文件。
解决方案
LoadModel
加载模型种子文件而不是其完整的几何/纹理等后立即履行其承诺...
对于模型完成加载的生命周期事件,请订阅Autodesk.Viewing.GEOMETRY_LOADED_EVENT
:
viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, event=>{
//event {type:string, model:object, target:object}
})
在多个模型场景中,当每个模型完成加载时,此事件将多次触发 - 使用model
对象的 id 来判断最后一个模型何时完全加载。
推荐阅读
- gatling - 在 Gatling 中通过 alt 查找图像 src
- r - 将列动态添加到 R 中的数据框
- java - Vscode:跨越多行 System.out.print()
- wagtail - 删除页面后如何自动删除链接到页面的图像?
- google-sheets - 查找条件总和以确定库存表中剩余的已售单位数
- flutter - 在 Dart 中使用过渡在屏幕之间导航
- groovy - Groovy Builder 转换真的有效吗?
- python - 使用来自另一个 python 脚本的输入运行 python 脚本
- apache-spark - Spark Executors 如何相互交谈?获取失败
- reactjs - 我正在使用 react-adal 进行 Azure AD 单点登录。它的令牌在 1 小时后过期。有什么方法可以刷新会话或延长会话到期时间