如何将 Autodesk 模型衍生 API 元数据中的 objectids 与 Forge Viewer 模型 dbids 匹配?

Posted

技术标签:

【中文标题】如何将 Autodesk 模型衍生 API 元数据中的 objectids 与 Forge Viewer 模型 dbids 匹配?【英文标题】:How to match objectids from Autodesk Model Derivative API metadata with Forge Viewer model dbids? 【发布时间】:2021-02-05 17:50:24 【问题描述】:

我正在围绕 Autodesk Forge Viewer 构建一个应用程序,根据客户数据,我使用 Viewer 的基本功能(着色、隔离等)添加额外的功能。

此应用程序还允许您上传新模型。在上传和转换过程之后,使用这个 Model Derivative API https://forge.autodesk.com/en/docs/model-derivative/v2/reference/http/urn-metadata-guid-GET/ 从模型中提取元数据,它基本上返回对象树及其 ID/名称。

在查看器方面,setThemingColor、show、hide、isolate 等所有基本交互功能都需要 dbIds 作为参数。为了避免多次搜索请求找出一个项目的 dbId,这将导致模型大小高于平均水平而导致巨大的性能问题,dbIds 从 BE 端的元数据中检索并提供给 FE 以进行着色或类似操作只需要执行 dbid 的操作。

但是,最近我发现模型衍生 API 元数据中的 objectid 和查看器函数中所需的 dbId 不匹配。这两个领域如何相互关联,它们是否应该相同?如果没有,有没有办法将一个转换成另一个?

我找不到任何关于此的官方/非官方文档,感谢任何帮助。

【问题讨论】:

【参考方案1】:

模型衍生 API 中的 objectids 和查看器中的 dbids(来自 SVF 文件格式)应该始终匹配。唯一的例外是新的 SVF2 格式(只有 entered public beta),其中 dbids 以​​不同的方式计算,以便“稳定”,如“在同一设计的不同版本之间保持一致”。

为了安全起见,您可以使用保证一致的“外部 ID”将设计元素与元数据相关联。在客户端,您可以使用viewer.model.getExternalIdMapping(onSuccessCallback, onErrorCallback) 方法获取从外部ID 到dbids 的字典映射。

【讨论】:

嗨 Petr,感谢您的快速响应,我想我们将继续使用第二种方法,因为我们使用的是 svf2。有没有办法只从模型派生 API 中检索 externalIds?我试过 GET :urn/metadata/:guid/properties 请求,但它也添加了属性信息,这增加了文件大小,我找不到任何查询参数或类似的东西来避免这种情况,谢谢。 恐怕 MD API 不支持任何类型的过滤。但是请注意,有不同的方法可以在没有查看器的情况下获取元数据,而不仅仅是使用 MD 端点。请参阅我的博文:forge.autodesk.com/blog/…。

以上是关于如何将 Autodesk 模型衍生 API 元数据中的 objectids 与 Forge Viewer 模型 dbids 匹配?的主要内容,如果未能解决你的问题,请参考以下文章

Autodesk forge 模型衍生测试 API

Autodesk Forge 模型衍生 API:在 Autodesk Forge 衍生子项中找不到“图形”角色

Autodesk Forge 设计自动化/模型衍生 API - 查看器缓存 svf 文件

如何在 Javascript AutoDesk 中获取模型对象元数据属性

如何使用 Autodesk Forge API 将上传的 AutoCAD 文件中的元数据提取到 Web 应用程序中?

Autodesk 模型衍生翻译作业导致“TranslationWorker-InternalFailure”响应?