如何将 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 中的 objectid
s 和查看器中的 dbid
s(来自 SVF 文件格式)应该始终匹配。唯一的例外是新的 SVF2 格式(只有 entered public beta),其中 dbid
s 以不同的方式计算,以便“稳定”,如“在同一设计的不同版本之间保持一致”。
为了安全起见,您可以使用保证一致的“外部 ID”将设计元素与元数据相关联。在客户端,您可以使用viewer.model.getExternalIdMapping(onSuccessCallback, onErrorCallback)
方法获取从外部ID 到dbid
s 的字典映射。
【讨论】:
嗨 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 衍生子项中找不到“图形”角色
Autodesk Forge 设计自动化/模型衍生 API - 查看器缓存 svf 文件
如何在 Javascript AutoDesk 中获取模型对象元数据属性