Model Derivative API:メタデータの活用 でもご紹介したとおり、シードファイル(元のデザインファイル)を Forge Viewer で表示するために Model Derivative API で SVF/SVF2 に変換すると、マニフェストにビュー情報が書き出されます。
ビューの視点(カメラ)情報は、マニフェストの “type”: “geometry”, “role”: “3d” 属性を持つスコープ下の “children” 名の配列内、”type”: “view”, “role”: “3d” 属性を持つスコープの “camera” 配列にシードファイルに設定されている視点(カメラ)の詳細値を見ることが出来るはずです。

マニフェスト JSON をパースして “camera” 配列のみを抽出出来れば、その値を setViewFromArray() に渡して Forge Viewer で視点を変更することが出来ます。
ただし、この方法で再現したビューは、シードファイルが Revit プロジェクト(.rvt)の場合、一部のビューとギャップが存在します。また、シードファイルのビュー設定時に切断ボックスや前方/後方クリップが設定されていると、それらが反映されない問題が起こります。

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

この方法では、マニフェストの “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");
});
}
}

By Toshiaki Isezaki

You must be logged in to post a comment.