计算查看器中对象的所有体积 - Autodesk Forge

Caculate all volume of objects in viewer- Autodesk Forge

我想计算查看器中所有对象的体积,但是这个 returns arrayVolume = [] 和 vol = 0。我哪里出错了?

    $("#kl").click(function(){
viewer.model.getExternalIdMapping(data => kl(data));
function kl(data){
    var arrayVolume = [];
    var vol;
    for(var key in data){
        var dbId = data[key];
        viewer.getProperties(dbId, function(e){
            //console.log('Entire object response ',e);
            //console.log('Properties ',e.properties);
            var propertiesObj = e.properties;
            propertiesObj.forEach(obj => {
                if(obj.displayName === "Volume"){
                    var volume = obj.displayValue;
                    arrayVolume.push(volume);
                }
            });
        });
    }
    vol= arrayVolume.reduce(function(a,b){return a+ b;},0)
    alert('w: '+arrayVolume);
    alert('w: '+vol);
}

注意同步代码和异步代码。 viewer.getProperties 方法是异步的,这意味着您提供的回调可能会在 之后 被调用。在您的代码片段中,两个 alert 调用很可能在 之前被调用 arrayVolumevol 属性填充了您的回调函数。

此外,请注意,当您需要从多个 dbID 检索属性时,有一种更好的方法:https://forge.autodesk.com/en/docs/viewer/v7/reference/Viewing/Model/#getbulkproperties-dbids-options-onsuccesscallback-onerrorcallback.