0

隐藏节点时,如果使用较大的 IFC HVAC 模型(80000 个节点及以上),性能似乎会降低很多。在标准计算机上,这需要将近 10 秒。我有两个模型,想隐藏其中一个。目前这是通过 rootId 完成的。是否需要进行任何修改以使其更快?隐藏所有节点的最快方法是什么?

var vm = new Autodesk.Viewing.Private.VisibilityManager(viewer.impl, viewer.model);
var instanceTree = viewer.model.getData().instanceTree;
var rootId = instanceTree.getRootId();
vm.hide(rootId);
vm.setNodeOff(rootId, true);

当显示同一文件的部分时,有几千个节点,这似乎要快得多。尽管节点是一一显示的。

var totalNodes = nodesToIsolate.length;
for (var i = 0; i < totalNodes; i++) {                          
   vm.show(nodesToIsolate[i]);
   vm.setNodeOff(nodesToIsolate[i], false); // True = hide completely                            
}
4

1 回答 1

1

所以你说第二种方法比第一种方法快得多......在那种情况下,是什么阻止你使用第二种方法而不是第一种方法?您可以从 rootId 遍历模型结构以确定所有节点,然后使用第二种方法,还是我遗漏了什么?

我猜想一种更快的方法是将自定义 ShaderMaterial 影响到模型的每个片段并控制着色器代码的可见性,但是遍历模型以影响材质也需要时间,但该操作可能会在较早的阶段。

您也可以使用viewer.impl.unloadModel(model)完全从场景中卸载模型,显然如果您需要稍后恢复它需要时间。

于 2016-09-09T14:23:20.470 回答