SVF2 の正式サポートにあたって、メタデータ(プロパティ)へのアクセスを支援する機能が追加されています。まずは、SVF と SVF2 のメタデータの違いについてご案内します。
SVF2(Streaming Vector Format 2)形式では、個々のインスタンスを持つ代わりに、同等形状のジオメトリを共有参照して使用メモリの低減を図っています。SVF や SVF2 に関わらず、内包する個々のオブジェクトは dbId(objectId)を使用して識別することで、メタデータを取得、作業することができます。
Model Derivative API:メタデータの活用 のブログ記事でもご紹介したとおり、このとき、externalId は Model Derivative API が変換したシード ファイル(ソースとなったデザイン ファイル)の形式が持つ不変、かつ、一意な ID である点に変わりはありません。例えば、Revit では要素のUniqueID プロパティ、また、AutoCAD ではハンドル番号が該当します。
ただし、Inventor のデザイン ファイル形式など、すべてのシード ファイルが externalId の元になる不変なオブジェクト識別子を持っているとは限りません。
このため、一部、オブジェクトと外部データをリンクするような場合、 dbId(objectId)を使用するケースが存在します。(Model Derivative API での変換を繰り返さなければ、Forge Viewer で表示する際の dbid は、同じジオメトリに対して同じになります。)
SVF2 のベータ版が登場した際、SVF の dbId とメタデータを提供していましたが、SVF2 とのコンセプト上の違いから、SVF と SVF2 運用時の dbId の不一致が指摘され、仕様の変更を検討することになりました。特に、BIM 360 を利用して SVF が持つ dbId を利用していた場合、ワークフローが期待した動作にならない問題が報告されました。
そこで、SVF と SVF2 形式の間で、開発者が選択することが出来る管理オプションが追加されることになった経緯があります。
Model Derivative API の観点では、それぞれの形式が相互に排他的なものと考えるコンセプトを提供しています。
- 変換時に SVF 形式を指定した場合、メタデータ API の endpoint は "SVF データ " と dbId を提供します。
- 変換時に SVF2 出力を指定した場合、メタデータ API の endpoint は "SVF2 データ " と dbId を提供します。
Forge Viewer が SVF2 をロードした場合、Forge Viewer API 内部でメタデータを参照する際には SVF2 の dbId を使用します。一方、 Forge Viewer が SVF をフォールバックした場合(SVF2 をロードしようとして失敗し、代わりに、SVF をロードした場合)、内部でメタデータを参照する際には SVF の dbid を使用します。Forge Viewer はメタデータを取得するために、メタデータ API endpoint そのものは使用しないため、識別子上の競合は発生することはありません。
BIM 360 Docs の観点から見ると、もう少し複雑になります。
外部データ接続の観点から、開発者が externalId を使用していた場合、 externalId は常に正確であるため問題は起こりません。しかし、SVF の dbId を使って外部データと接続している場合、後のBIM 360 の変換処理で SVF2 を生成した場合、初回の SVF 変換の結果とミスマッチが発生してしまいます。
そこで、必要に応じて SVF メタデータの生成を支援するために、一部の endpoint にオプションの追加パラメータを公開しました。変更された endpoint の詳細は、こちらの Changelog を参照してください。
ここで登場する 2 つの主な endpoint は、BIM 360 の ドキュメント URN を使用して呼び出されるメタデータの endpoint です。変換出力は SVF2 になっている状態でも、SVF の dbId 指向のメタデータにアクセスする必要がある場合、これらの endpoint を使用して、"x-ads-derivative-format" というヘッダーパラメータに新しい "fallback "値を設定することで、endpoint に SVF 形式のメタデータを返させることが出来るようになります。
なお、これは利便性のために提供されているものであり、最終的には SVF2 メタデータに移行することが望ましいでしょう。(また、可能な限りデータのリンクに externalId を使用することが理想的です。)
Forge Viewer v7.46 を題材に、SVF と SVF2 間の dbId のマッピング方法を紹介するブログ記事 Temporary workaround for mapping between SVF1 and SVF2 IDs、Forge Viewer v7.46 の Changelog でも併せて確認してみてください。
By Toshiaki Isezaki
コメント