第3回 IFC.jsをまとめるー選択したオブジェクトをハイライトし、オブジェクトIDを取得する

皆様
こんにちは
AMDlabの秋山です。

第3回目は、①選択したオブジェクトのオブジェクトIDを取得する。②選択したオブジェクトをハイライトする。方法をそれぞれ解説します。
前回は、IFCモデルを読み込むだけのビューアー作成でしたが、今回からオブジェクトを操作していきましょう。
まずはじめに、選択したオブジェクトのIDを取得します。

①選択したオブジェクトのオブジェクトIDを取得する

詳しくは公式ドキュメントをご覧ください。

手順は以下の7ステップです。

  1. ライブラリのインポート
  2. IFCモデルの保存場所を指定する
  3. Raycasterを使用する
  4. マウスの位置ベクトルを作成する
  5. 選択したオブジェクトのIDを取得する
  6. バンドル済みファイルの作成
  7. コマンドプロンプト上でlocalhostを立ち上げる or VScode上でライブサーバーを実行する

1.ライブラリのインポート

three.jsから下記のライブラリをインポートします。

  • Raycaster
  • Vector2

つづいて、 npm i three-mesh-bvh をコマンドプロンプト上で打ち込み、three-mesh-bvh libraryをインポートします。
重たいオブジェクトを読み込む場合にこのライブラリをインポートすることでオブジェクトの読み込みが早くなります。

 

2.IFCモデルの保存場所を指定する

wasmデータとシーン内のモデルの保存場所を任意で入力します。
今回使用するデータはRevitのサンプルデータ:rac_advanced_sample_project.ifcになります。

3.Raycasterを使用する

Raycasterクラスのインスタンスを作成します。
Raycasterは画面内のオブジェクトを取得するのに使用されます。

 

4.マウスの位置ベクトルを作成する

Vector2クラスのインスタンスを作成します。
Vector2は2Dの位置ベクトルを作成します。

5.選択したオブジェクトのオブジェクトIDを取得する

マウスでダブルクリックすると、選択したオブジェクトのIDを取得するイベントを作成します。

 

6.バンドル済みファイルの作成

rollup.jsを使用して、app.jsに紐付くモジュールをバンドルさせるため、コマンドプロンプト上で rollup -c と打ち込みます。フォルダ内にbundle.jsファイルが作成されたことを確認してください。

7.コマンドプロンプト上でlocalhostを立ち上げる or VScode上でライブサーバーを実行する

前回の記事で2通りの確認方法があると伝えました。この記事以降では、コマンドプロンプト上でlocalhosotを立ち上げる方法で確認していきます。
■コマンドプロンプト上でlocalhostを立ち上げる
まず初めにコマンドプロンプト上でhttpサーバーをインストールします。
npm install -g http-server と入力してください。
インストール後、動かしたいサイトのあるディレクトリ上で npx http-server と入力し取得した番号をサイト上に入力します。

無事選択したオブジェクトのIDを取得できました。

次に、選択したオブジェクトをハイライトさせる方法を解説します。

②選択したオブジェクトをハイライトする

ほとんどの3DやBIMビューアー上では、マウスを移動させたり、オブジェクトを選択すると、オブジェクトがハイライトされたり何らかの表現がされています。
IFC.js上でも実装してみましょう。

先ほど、選択したオブジェクトのIDを取得したので、IDからサブセット※1を取得します。

※1モデル内オブジェクトの任意のグループ

手順は以下の5ステップです。

  1. ライブラリのインストール
  2. ハイライトの表現作成
  3. シングルサブセットの作成
  4. マルチサブセットの作成
  5. ジオメトリの抽出

1.ライブラリのインストール

オブジェクトをハイライトさせるために、Three.jsのライブラリMeshLambertmaterialをインポートします。

 

2.ハイライトの表現作成

ハイライトのマテリアル表現を設定することができます。今回は2種類作成します。

■1つ目はマウスをホイールしたときのハイライト

↑のハイライトはこんな感じの表現です。

■2つめはマウスをダブルクリックしたときのハイライト

↑のハイライトはこんな感じの表現です。

3.シングルサブセットの作成の場合

マウスをホバーしたときに、オブジェクトがハイライトされます。

 

4.マルチサブセットの作成

マウスをダブルクリックしたときに、オブジェクトがハイライトされます。

 

5.ジオメトリの抽出

読み込んだIFCモデルを透明にし、マウスをホバーしたときに、オブジェクトがハイライトされます。

このときのハイライトは、ハイライトマテリアルは設定せず元のオブジェクトのマテリアルを設定します。

以上になります。
お疲れ様でした。

BIM
IFC
Tech
Javascript
ARTICLES