Forge Viewer:シードファイルのビュー復元

Model Derivative API:メタデータの活用 でもご紹介したとおり、シードファイル(元のデザインファイル)を Forge Viewer で表示するために Model Derivative API で SVF/SVF2 に変換すると、マニフェストにビュー情報が書き出されます。

ビューの視点(カメラ)情報は、マニフェストの “type”: “geometry”, “role”: “3d” 属性を持つスコープ下の “children” 名の配列内、”type”: “view”, “role”: “3d”  属性を持つスコープの “camera” 配列にシードファイルに設定されている視点(カメラ)の詳細値を見ることが出来るはずです。

JSON形式のカメラ設定を示したコードスニペット。視点(カメラ)のeye position、target position、up vectorなどの詳細が記載されている。

マニフェスト JSON をパースして “camera” 配列のみを抽出出来れば、その値を setViewFromArray() に渡して Forge Viewer で視点を変更することが出来ます。

ただし、この方法で再現したビューは、シードファイルが Revit プロジェクト(.rvt)の場合、一部のビューとギャップが存在します。また、シードファイルのビュー設定時に切断ボックスや前方/後方クリップが設定されていると、それらが反映されない問題が起こります。

3Dモデルの2階MEPビューを表示する画面。プロパティパネルとビジュアルスタイルが含まれ、建物の配管や設備が示されています。

つまり、”camera” 配列のみ方法だけでは、視点を再現出来るものの、切断ボックスや前方/後方クリップを Forge Viewer で表現することが出来ません。

3Dモデルの2階MEPビューを表示している画面。屋上には緑の植栽があり、建物の構造が見える。画面下部には操作用のツールバーが配置されている。

この方法では、マニフェストの “camera” 配列に後続する “sectionBox” 配列、”sectionBoxTransform” 配列を用いた setCutPlanes メソッドでの反映が必要になってしまい煩雑です。setCutPlanes メソッドは、Forge Viewer:レベル別の表示 でご紹介しています。

このような状態を考慮した場合、Forge Viewer の初期化時に、表示に使用する viewables の “type”  に “geometry” を指定してビューを直接表示する方法が一般的です。”type”  に “view” を指定すると、上記のマニフェストの view をフェッチすることも出来ます。

function onDocumentLoadSuccess(viewerDocument) {
    var viewables = viewerDocument.getRoot().search({
        'type': 'geometry',
        'role': '3d'
    });
    if (viewables.length == 0) {
        _viewer.uninitialize();
        _viewer = null;
        alert("No view type contained in the model!");
    } else {
        var index = 0;
        $('#cameras').children().remove();
        viewables.forEach(function (value) {
            $('#cameras').append($('').val(index).text(value.data.name));
            index = index + 1;
        });
        _viewerDocument = viewerDocument;
        _viewables = viewables;
        _viewer.loadDocumentNode(viewerDocument, viewables[0]).then(i => {
            _viewer.setTheme("dark-theme");
        });
    }
}
3Dモデルの2階のMEP(機械、電気、配管)レイアウトを表示した画像。内装がカラフルに表示され、周囲にはユーザーインターフェースの操作ボタンが配置されている。

By Toshiaki Isezaki

Discover more from Autodesk Developer Blog

Subscribe now to keep reading and get access to the full archive.

Continue reading