getBulkProperties()挂起和错误输出

时间:2018-01-30 21:42:37

标签: autodesk-forge

我们的应用程序需要从模型中的所有对象中提取一组属性。我们的应用程序将从叶节点连接属性与父节点的属性。

我们使用大约20K节点和大约5个属性调用getBulkProperties()方法。这运行了一段时间,然后我们收到服务器错误,并且永远不会调用回调。

我们应该使用限制吗?我们应该用最多X个节点来分割这些调用吗?

任何帮助都会受到赞赏,因为这会导致我们的应用程序挂起。

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为没有限制,但您可以考虑一次列出特定组的属性,或者只考虑叶子节点。

blog post显示了如何优化搜索性能,以及下面的代码(from this post)如何与 .getBulkProperties 集成:

viewer.search('Steel', 
function(dbIds){
   viewer.model.getBulkProperties(dbIds, ['Mass'],
   function(elements){
     var totalMass = 0;
     for(var i=0; i<elements.length; i++){
       totalMass += elements[i].properties[0].displayValue;
     }
     console.log(totalMass);
   })
}, null, ['Material'])

您还可以考虑在模型上仅使用叶子,如this post及以下所示:

function getAllLeafComponents(viewer, callback) {
    var cbCount = 0; // count pending callbacks
    var components = []; // store the results
    var tree; // the instance tree

    function getLeafComponentsRec(parent) {
        cbCount++;
        if (tree.getChildCount(parent) != 0) {
            tree.enumNodeChildren(parent, function (children) {
                getLeafComponentsRec(children);
            }, false);
        } else {
            components.push(parent);
        }
        if (--cbCount == 0) callback(components);
    }
    viewer.getObjectTree(function (objectTree) {
        tree = objectTree;
        var allLeafComponents = getLeafComponentsRec(tree.getRootId());
    });
}