如何在 Autodesk Forge 查看器中定位对象的级别或地板

How to locale the level or floor of the object in autodesk forge viewer

我正在获取对象的 dbid 并使用 dbid 我想我会从定义为 Layer 的属性中获取对象的级别但不幸的是我的对象中很少有没有定义层所以有没有其他方法在我可以识别物体所在的楼层或楼层的地方 ??

如果你的模型是Revit 2018及以后生成的RVT,你可以通过读取AecModelData. Once you have AecModelData loaded, then you can take advantage of Autodesk.AEC.LevelsExtension获取z范围来获取关卡数据和关卡遮挡物(例如地板、天花板)的dbIds每个级别。

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});