如何解决如何从revit文件的已压缩压缩/压缩文件中获取链接文件列表?
我翻译了带有几个链接文件的revit文件。从查看器中,我可以使用“模型浏览器”默认扩展名浏览根revit模型中的所有元素,包括链接文件中的所有元素。甚至我还创建了一个自定义扩展名,从中可以隔离每种对象类型的所有元素。
现在,我想创建一个像'Model browser'这样的扩展名,它将把根文件名显示为顶部或父节点,并将所有链接文件的名称显示为子节点。我还希望通过单击每个链接文件,将所有元素从该链接文件应在查看器中隔离,然后单击“根文件”,所有元素(包括所有链接文件元素)均应显示。
有关信息,我的应用程序是使用.Net平台中的C#和JavaScript构建的。
有人可以建议我尝试哪种API吗?如果有人分享可以帮助我的示例或网址,这也将非常有帮助。
谢谢!
解决方法
您可以利用AecModelData来获取链接的模型数据并从Forge Viewer内部的PropertyDB中重建关系。
如果对象来自链接的RVT,则可以检查其外部ID。如果外部标识包含斜杠符号,则表示它来自链接的RVT。这是一个示例:
- 对象外部ID:
ffa0b0a8-8aab-48f9-beb5-dba5d9b4968f-0010cfee/e021b7a9-1e57-428c-87db-8e087322cd49-0015a0f6
- 来自AECModelData中的linkedDocuments的instanceId:
ffa0b0a8-8aab-48f9-beb5-dba5d9b4968f-0010cfee
您可以在斜杠符号的左侧看到GUID与上面提到的实例ID匹配。
要获取链接的RVT模型名称,我们可以重用AECModelData的linkedDocuments中的instanceId来再次获取所需的信息。这是适合您的代码段,并假定实例ID为ffa0b0a8-8aab-48f9-beb5-dba5d9b4968f-0010cfee
:
function getExternalIdMappingAsync( model ) {
return new Promise( ( resolve,reject ) => {
model.getExternalIdMapping(
map => resolve( map ),error => reject( error )
);
});
}
function getPropertiesAsync( dbId,viewer ) {
return new Promise( ( resolve,reject ) => {
viewer.getProperties(
dbId,result => resolve( result ),error => reject( error )
);
});
}
//1. Get external id mapping for converting external id to Viewer's dbId
let externalIdMapping = await getExternalIdMappingAsync( viewer.model );
let dbId = externalIdMapping['ffa0b0a8-8aab-48f9-beb5-dba5d9b4968f-0010cfee'];
//2. Get properties of the linked model instance
let propResult = await getPropertiesAsync( dbId,viewer )
//3. Find the type name property for its value
let linkNameProp = propResult.properties.find( prop => prop.displayName == 'Type Name' || prop.attributeName == 'Type Name' );
let linkName = linkNameProp.displayValue; //!<<< This is linked RVT name
这是我的测试快照:
希望有帮助〜
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。