2016-08-17 3 views
0

Ich habe mehrere Modelle (bis zu 20 Modelle), von denen ich nur zwei auf den Betrachter laden möchte. Gibt es eine Möglichkeit, den Viewer zu löschen oder geladene Modelle zu entfernen, bevor neue Modelle geladen werden?Entfernen unnötiger Modelle

Momentan verberge ich zuerst alle Modelle.

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); 
    } 
} 

Dann zeigen Sie diejenigen, die ich will.

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

Dieses Verbergen und Anzeigen ist sehr langsam mit mehreren Modellen. Auch das Durchsuchen der geladenen Modelle nach einzelnen Objekten ist sehr langsam. Ist der einzige Weg, den ganzen Betrachter immer zu initialisieren, bevor die beiden Modelle geladen/gezeigt werden? Ich habe versucht, auch getState() und restoreState() zu verwenden, aber das speichert nur die Ansicht. Es löscht die Modelle nicht vom Betrachter.

Antwort

1

Diese aggregate sample implementiert diese Funktion können Sie den Quellcode auf this github (direct link) finden, aber ich bin Kopieren unter:

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) 
} 
Verwandte Themen