删除不必要的模型

时间:2016-08-17 10:57:55

标签: autodesk-forge autodesk-viewer

我有多个模型(最多20个模型),我想从中只加载两个模型。有没有办法在加载新模型之前清除查看器或删除已加载的模型。

目前我首先隐藏所有模型。

function hideAllModels() {
  for (var i = 0; i < loadedModels.length; i++) {
    var instanceTree = loadedModels[i].getData().instanceTree;
    var rootId = instanceTree.getRootId();
    var vm = new Autodesk.Viewing.Private.VisibilityManager(viewer.impl, loadedModels[i]);
    vm.hide(rootId);
    vm.setNodeOff(rootId, true);
  }
}

然后展示我想要的那些。

var vm = new Autodesk.Viewing.Private.VisibilityManager(viewer.impl, viewer.model);
vm.setNodeOff(rootId, false);
vm.show(rootId);

这种隐藏和显示非常慢,有多个模型。此外,搜索加载的模型中的单个对象非常慢。在加载/显示两个模型之前,唯一的方法是始终初始化整个查看器吗?我尝试使用getState()和restoreState(),但这只保存了视图。它不会从观众中清除模型。

1 个答案:

答案 0 :(得分:1)

aggregate sample实现此功能,您可以在this githubdirect link)找到源代码,但我正在下面复制:

deleteModel (model, fireEvent = true) {
 delete this.modelCollection[model.modelId]
 if(Object.keys(this.modelCollection).length === 0){
   this.firstModelLoaded = null
 }
 if(fireEvent) {
   this.emit('model.delete', model)
 }
 this._viewer.impl.unloadModel(model)
}