2016-08-17 4 views
0

У меня есть несколько моделей (до 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

Этот aggregate sample реализует эту функцию, вы можете найти исходный код на this github (direct 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) 
}