微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从revit文件的已压缩压缩/压缩文件中获取链接文件列表?

如何解决如何从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匹配。

enter image description here

要获取链接的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

这是我的测试快照:

enter image description here

希望有帮助〜

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。