Autodesk forge 如何从revit文件的转换压缩/zip文件中获取链接文件列表?
我已经翻译了一个revit文件和几个链接文件。从查看器中,我可以使用“模型浏览器”默认扩展名浏览根revit模型中的所有图元,包括链接文件中的所有图元。甚至我还创建了一个自定义扩展,从中可以隔离每个对象类型的所有元素 现在,我想创建一个类似“模型浏览器”的扩展名,它将根文件名显示为顶部节点或父节点,所有链接文件名显示为子节点。我还希望,通过单击每个链接文件,该链接文件中的所有元素应在查看器中隔离,通过单击根文件,包括所有链接文件元素在内的所有元素应显示 我的应用程序是在.Net平台上使用C#和JavaScript构建的 谁能告诉我哪种api,我可以试试?如果有人分享我可以得到帮助的例子或url,这也会非常有帮助Autodesk forge 如何从revit文件的转换压缩/zip文件中获取链接文件列表?,autodesk-forge,autodesk-viewer,autodesk-model-derivative,Autodesk Forge,Autodesk Viewer,Autodesk Model Derivative,我已经翻译了一个revit文件和几个链接文件。从查看器中,我可以使用“模型浏览器”默认扩展名浏览根revit模型中的所有图元,包括链接文件中的所有图元。甚至我还创建了一个自定义扩展,从中可以隔离每个对象类型的所有元素 现在,我想创建一个类似“模型浏览器”的扩展名,它将根文件名显示为顶部节点或父节点,所有链接文件名显示为子节点。我还希望,通过单击每个链接文件,该链接文件中的所有元素应在查看器中隔离,通过单击根文件,包括所有链接文件元素在内的所有元素应显示 我的应用程序是在.Net平台上使用C#和J
提前谢谢 您可以利用AecModelData从Forge Viewer中的PropertyDB获取链接模型数据并重建关系 如果对象来自链接的RVT,则可以检查其“外部id”。如果外部id包含斜杠符号,则表示它来自链接的RVT。以下是一个例子:
- 对象外部id:
ffa0b0a8-8aab-48f9-beb5-dba5d9b4968f-0010cfee/e021b7a9-1e57-428c-87db-8e087322cd49-0015a0f6
- AECModelData中linkedDocuments中的实例ID:
ffa0b0a8-8aab-48f9-beb5-dba5d9b4968f-0010cfee
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
函数GetExternaldMappingAsync(模型){
返回新承诺((解决、拒绝)=>{
model.getExternaldMapping(
映射=>解析(映射),
错误=>拒绝(错误)
);
});
}
函数getPropertiesAsync(dbId,查看器){
返回新承诺((解决、拒绝)=>{
viewer.getProperties(
dbId,
结果=>解析(结果),
错误=>拒绝(错误)
);
});
}
//1. 获取外部id映射以将外部id转换为查看器的dbId
让ExternaldMapping=等待GetExternaldMappingAsync(viewer.model);
设dbId=ExternaldMapping['ffa0b0a8-8aab-48f9-beb5-dba5d9b4968f-0010cfee';
//2. 获取链接模型实例的属性
让propResult=等待getPropertiesAsync(dbId,查看器)
//3. 查找其值的类型名称属性
让linkNameProp=propResult.properties.find(prop=>prop.displayName=='Type Name'| | prop.attributeName=='Type Name');
让linkName=linkNameProp.displayValue;//!嗨,康奕迅,谢谢你的详细回答!看来会有用的。让我们努力实施它。我将再次回到这里。你好,伊森·康,我们已经实现了它,它几乎适用于所有型号,除了一个型号,我们正在努力提高性能,因为它有许多链接文件(35+),并且大小非常大(7GB+)。在这个模型中,我按照你的步骤做的扩展非常慢。为了解决这个问题,我们稍微改变了策略。在主模型及其所有链接模型中,我们添加了一个项目级参数,我们在其中填充了模型名称,并通过扩展使用了该参数。我列出了所有这些链接文件,可以打开/关闭模型数据,并获得了很多性能,但是还是没那么多。总之,再次谢谢。嗨,阿哈萨努尔,谢谢你让我知道。要提高性能,可以利用在分离的线程中重建树,或在后端查询AecModelData&properties。下面是一个示例,演示如何在不使用查看器加载模型的情况下查询属性: