Revit モデルを利用する建築プロジェクトでは、よくモデル内の要素をレベル別に表示したいことがあります。今日は、そのような用途で利用出来るいくつかの方法をご紹介しておきます。
Forge Viewer では、カンバス上に表示されるオブジェクトを一意な識別子で認識しているので、対象の要素が持つ識別子がわかれば、それらを使って表示に反映させることが出来ます。Forge Viewer では、この識別子を ObjectId、ないしは、dbId と呼んでいます。
最も容易に dbid を取得する方法には、Viewer3D.Seaech メソッドで、表示制御したいカテゴリ名やタイプ名を検索する方法があげられます。"消火栓 3FL" のような検索も可能性です。
例)検索オブジェクトを isolate(選択表示)
function onSearchResult(idArray) { _viewer.isolate(idArray); } $(document).on("click", "[id^='search']", function () { var keyword = document.getElementById('keyword').value; _viewer.search(keyword, onSearchResult); });
ただ、"3FL" として検索してしまうと、基準レベルのプロパティだけではく、他のプロパティに設定されている "3FL" もヒットしてしまうので、少し目的とは異なってしまう可能性もあるかと思います。
属性に応じて、より dbid を詳細に把握するには、Model Derivative API の持つ endpoint で JSON を取得してパースする方法もあります。この方法は、Extract Metadata From a Source File で紹介されています。JSON の取得など、過去のブログ記事 VS Code Forge Extension を使った Viewer ワークフローの確認 でもご案内した Autodesk Forge Tools エクステンションをお使いいただくと、開発・調査の目的で、Postman より簡単に目的の JSON を取得することが出来ます。
Viewer3D.setCutPlanes メソッドで断面解析ツールの機能を内部的に使い、視覚的に特定フロアを表示することが可能です。レベルや境界などに合わせて切断面を指定する必要があります。切断面の指定には、Forge Viewer JavaScript ライブラリのベースになっている three.js ライブラリの Vector4 クラス インスタンスを利用します。
例)BOX 状の 6 面を指定
var planes = [ new THREE.Vector4(1, 0, 0, -250), new THREE.Vector4(0, 1, 0, -110), new THREE.Vector4(0, 0, 1, -2.5), new THREE.Vector4(-1, 0, 0, -130), new THREE.Vector4(0, -1, 0, -106), new THREE.Vector4(0, 0, -1, -5.8) ] _viewer.setCutPlanes(planes);
Forge Viewer 上で切断解析ツールを使って切断面を手動で作成しておき、Viewer3D.getCutPlanes メソッドで切断面を構成する値を得るようなことも出来ます。また、State API と併用することで、フロア毎に表示状況を記憶させて利用することも出来るかと思います。
BIM 360 Docs 上のレベル ツールを実装する Autodesk.AEC.LevelsExtension をロードして、カンバス内に表示されるパネルからレベル毎に要素を表示させることが出来ます。内部的に切断面を得る目的で、AEC Model Data(AECModelData.json)と呼ばれる JSON を得る必要がある点に注意してください。
function onDocumentLoadSuccess3(viewerDocument) { var viewables = viewerDocument.getRoot().search({ 'type': 'geometry', 'role': '3d' }); var defaultModel = viewerDocument.getRoot().getDefaultGeometry(); _viewer.loadDocumentNode(viewerDocument, defaultModel).then(i => { viewerDocument.downloadAecModelData(); }); _viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, onViewerGeometryLoaded); } : function onViewerGeometryLoaded(event) { _viewer3d_3.loadExtension('Autodesk.AEC.LevelsExtension'); }
AEC Model Data は、Revit 2018 以降の RVT ファイルで使用することが出来るデータです。また、BIM 360 Viewer と Forge Viewer の違い でご紹介した意図的な視覚表現の抑制もあるため、Viewer の Extension ドキュメントには記載されていません。参考としてご確認ください。
上記でご紹介した内容は、https://forge-viewer-3d-levels.herokuapp.com/ でご確認いただけます。
By Toshiaki Isezaki
コメント