【发布时间】:2021-03-15 05:56:57
【问题描述】:
我正在获取对象的 dbid 并使用 dbid 我认为我会从定义为 Layer 的属性中获取对象的级别,但不幸的是,我的对象中很少有没有定义图层,所以有没有其他方法可以解决我可以识别物体所在的楼层吗??
【问题讨论】:
标签: autodesk-forge autodesk-viewer autodesk
我正在获取对象的 dbid 并使用 dbid 我认为我会从定义为 Layer 的属性中获取对象的级别,但不幸的是,我的对象中很少有没有定义图层,所以有没有其他方法可以解决我可以识别物体所在的楼层吗??
【问题讨论】:
标签: autodesk-forge autodesk-viewer autodesk
如果您的模型是由 Revit 2018 及更高版本生成的 RVT,您可以通过阅读AecModelData 获取关卡遮挡器(例如地板、天花板)的关卡数据和dbIds。加载 AecModelData 后,您可以利用 Autodesk.AEC.LevelsExtension 获取每个级别的 z 范围。
const floorData viewer.getExtension('Autodesk.Aec.LevelsExtension').floorSelector.floorData;
const currentLevel = floorData[0];
const currentLevelZmin = currentLevel.zMin;
const currentLevelZmax = currentLevel.zMax;
然后,将您想要的对象的 z 值与关卡范围进行比较,以检查它是否在关卡内。
const minZ = currentLevel.zMin;
const maxZ = currentLevel.zMax;
let nodeBox = new Float32Array(6);
instanceTree.getNodeBox(dbId, nodeBox);
const nodeBoxMinZ = nodeBox[2];
const nodeBoxMaxZ = nodeBox[5];
let insideLevel = false;
if ((nodeBoxMinZ >= minZ && nodeBoxMinZ <= maxZ) ||
(nodeBoxMaxZ >= minZ && nodeBoxMaxZ <= maxZ) ||
(nodeBoxMinZ <= minZ && nodeBoxMaxZ >= maxZ)) {
insideLevel = true;
}
if( insideLevel ) {
// Do someting
}
顺便说一句,如果您使用ifcLevelsEnabled: true 加载Autodesk.AEC.LevelsExtension,那么此扩展也适用于 IFC 模型。它将即时为 IFC 模型重建楼层数据。
viewer.loadExtension('Autodesk.AEC.LevelsExtension', {ifcLevelsEnabled: true});
【讨论】: