模型导数 API 对象 ID 与 PropertyDatabase 对象 ID 不匹配

Model Derivative API object ids don't match PropertyDatabase object ids

我开发了一个应用程序,它使用 Forge Model Derivative 端点获取 BIM 360 revit 模型视图的 JSON 对象树,然后下载 SQLite PropertyDatabase 以查询多个对象树实体的属性。到现在为止一切正常。最近,我遇到了一些模型的问题,其中对象树派生对象 ID 与 PropertyDatabase 对象 ID 不匹配。

我看过这个 post Temporary workaround for mapping between SVF1 and SVF2 IDs 但这个方法对我来说无效,因为我的应用程序在服务器端工作,根本不使用查看器 API。

我的问题是:是否有从服务器端使用 APIs 的解决方法,以及是否有计划尽快解决 APIs 之间的这种不一致。

不幸的是,您的方法会出现这种行为。 SVF 和 SVF2 不共享相同的 ID,SVF2 ID 经过优化以更快地处理数据并尝试在不同版本中保持相同。您引用的文章仅适用于查看器的上下文,对于服务器端处理,您需要获取 dbid.idx 文件来映射 ID。这个 utility 有一个命令可以帮助你下载文件。尝试:

./forge.js version-svf2-idmap project_id version_id output_dbid.idx

此文件是 uint32 数组的 gzip 压缩文件。

您确实使用 SVF id 下载了 SVF SQLlite 数据库。但是当使用 MD 端点时,您实际上使用的是 SVF2 id,因为目标格式是 SVF2。如果您确实请求了 SVF 目标格式,则 MD 端点将使用 SVF id。不幸的是,您无法控制 BIM360 目标格式,它可以是 SVF 或 SVF2,具体取决于源文件格式。比如IFC、RVT、NWD、DWG是SVF2,其他的不是。您可以通过读取 outputType 和 overrideOutputType 来确定使用哪种格式。如果 overrideOutputType 显示 'svf2',那么您应该进行映射。

version-svf2-idmap的相关代码是here

另一方面,如果您有 SQLite 数据库,为什么还需要调用 MD 端点,您已经拥有了所需的一切,并且可以从那里更快地提取信息。请参阅我的示例 here。它具有属性提取、and/or 构建层次结构树的功能。