计算查看器中对象的所有体积 - 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
调用很可能在 之前被调用 arrayVolume
和 vol
属性填充了您的回调函数。
此外,请注意,当您需要从多个 dbID 检索属性时,有一种更好的方法:https://forge.autodesk.com/en/docs/viewer/v7/reference/Viewing/Model/#getbulkproperties-dbids-options-onsuccesscallback-onerrorcallback.
我想计算查看器中所有对象的体积,但是这个 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
调用很可能在 之前被调用 arrayVolume
和 vol
属性填充了您的回调函数。
此外,请注意,当您需要从多个 dbID 检索属性时,有一种更好的方法:https://forge.autodesk.com/en/docs/viewer/v7/reference/Viewing/Model/#getbulkproperties-dbids-options-onsuccesscallback-onerrorcallback.