如何在Forge Viewer中隐藏参照模型并获取关联模型的dbId?
Forge Viewer外部参照模型的dbId获取与显示控制方案
一、从AEC数据映射关联模型的dbId集合
你通过NOP_VIEWER.model.getDocumentNode().getAECdata()拿到的documentId和traverseId,可以用Viewer内置方法直接映射到对应参照模型的dbId范围:
- 第一步先获取完整的AEC数据:
const aecData = NOP_VIEWER.model.getDocumentNode().getAECdata(); - 找到目标外部参照的条目,调用
getExternalReferenceDbIds获取所有关联dbId:// 替换targetDocId为你要定位的参照documentId const targetRef = aecData.externalReferences.find(ref => ref.documentId === targetDocId); if (targetRef) { const refDbIds = NOP_VIEWER.model.getExternalReferenceDbIds(targetRef.traverseId); // refDbIds就是该外部参照模型的全部元素dbId }
二、控制参照模型的显示状态
拿到dbId集合后,用Viewer的显示API就能实现隐藏或单独显示:
1. 隐藏整个参照模型
NOP_VIEWER.hide(refDbIds);
2. 仅显示选中的关联模型
如果需要单独展示目标参照,先隐藏所有可见元素,再显示目标dbId:
// 隐藏当前所有可见元素 NOP_VIEWER.hide(NOP_VIEWER.model.getVisibleDbIds()); // 显示目标参照模型的元素 NOP_VIEWER.show(refDbIds);
三、获取标高的dbId
标高可以通过类别搜索或AEC楼层数据两种方式获取:
方式1:按类别搜索
// 搜索Revit中"Levels"类别的元素 NOP_VIEWER.search('Levels', (dbIds) => { // dbIds即为所有标高的dbId集合 }, ['Category']);
方式2:通过AEC楼层数据映射
const levels = aecData.levels; levels.forEach(level => { const levelDbIds = NOP_VIEWER.model.getExternalReferenceDbIds(level.traverseId); // 对标高dbId进行操作 });
内容的提问来源于stack exchange,提问作者Pratik Singh
相关产品推荐
相关产品推荐

