如何在Forge Viewer中区分中心文件与链接文件的元素?
区分BIM 360中中心文件与链接文件元素的可行方法
通过模型实例标识区分
Forge Viewer加载中心文件后,链接模型会以子模型形式存在。可以通过以下方式判断:- 调用
viewer.impl.modelQueue().getModels()获取所有加载的模型实例,遍历每个模型 - 检查模型的
documentNode.isExternal属性,值为true的即为链接模型 - 对于元素,调用
viewer.getProperties(dbId)获取属性,若包含Link Name、Link Instance这类标识字段,说明该元素属于链接文件
- 调用
自定义着色直观区分
给链接模型的所有元素设置专属颜色,快速识别:// 获取所有模型 const models = viewer.impl.modelQueue().getModels(); models.forEach(model => { // 判断是否为链接模型 if (model.documentNode.isExternal) { // 获取模型所有元素的dbId const fragList = model.getFragmentList(); const fragIds = fragList.getFragments(); fragIds.forEach(fragId => { const dbId = fragList.getDbId(fragId); // 设置红色主题色 viewer.setThemingColor(dbId, new THREE.Color(0xff0000), model); }); } });分析元素外部ID
链接模型中元素的外部ID(externalId)会包含链接文件的唯一标识。通过viewer.model.getExternalIdMapping()获取映射关系后,可分析ID结构判断元素所属模型:model.getExternalIdMapping().then(mapping => { Object.keys(mapping).forEach(externalId => { const dbId = mapping[externalId]; // 链接文件的externalId通常带有特定前缀或包含链接文件ID if (externalId.includes('LINK_') || externalId.includes(model.documentNode.guid)) { // 该元素属于链接模型 } }); });
内容的提问来源于stack exchange,提问作者Jihai
相关产品推荐
相关产品推荐

