ifcJSONの使い方

本記事ではifcJSONについての使い方を解説しています。

概要

  • github
  • ifcファイルをjson形式に変換する
  • ifcを保守運用しているBuildingSMARTが作成している
  • pythonで書かれている
  • ifcの対応バージョンはifc2x3, ifc4.0, ifc4.3
  • このコンバータの目的や開発戦略についての解説はこちらから

実行環境・事前準備

本記事の内容はDockerを用いて環境構築を行いました。
Dockerのインストールについてはこちらから

使い方

ダウンロード

まずは、手元のpcにgithubのリポジトリからダウンロードしましょう。

1git clone https://github.com/ktaroabobon/ifcJSON.git

構成は以下のようになっています

 1.
 2├── Documentation
 3│   └── README.md
 4├── LICENSE
 5├── README.md
 6├── Samples
 7├── Schema
 8├── file_converters
 9│   ├── README.md
10│   ├── dataset
11│   │   ├── input
12│   │   └── output
13│   ├── ifc2json.py
14│   ├── ifcjson
15│   ├── json2ifc.py
16│   └── samples.py
17└── schema_converters

それぞれのディレクトリの内容は以下の通りです。

  • Documentation: ifcJSONについてのドキュメント
  • LICENSE: ライセンスについて
  • README.md: README
  • Samples: jsonに変換したサンプルデータ等が格納されている
  • Schema: ifcJSONのスキーマについて書かれている
  • file_converters: 変換する際の実行ファイルが格納されている
  • schema_converters: スキーマを変換する実行ファイル

今回主に使用するのはfile_converters内のファイルです。

環境構築

本記事ではDockerを用いて環境構築を行います。
実行ファイルはfile_converters内のものを用いて行うため、Dockerfile等のファイルをfile_converters内で作成します。

はじめに、依存パッケージの管理を行います。今回はpoetryを用いて行っています。 詳しい方法は公式ドキュメント等を参照してください。

また、使用するパッケージとしては以下の通りです。実行においてifcopenshellが必要であるためそのパッケージを追加するのを忘れないようにしてください。

pandas
python-ifcopenshell

poetryを実行後のファイル構成

 1.
 2├── ⚫️poetry.lock
 3├── ⚫️pyproject.toml
 4├── README.md
 5├── dataset
 6│   ├── input
 7│   └── output
 8├── ifc2json.py
 9├── ifcjson
10│   ├── __init__.py
11│   ├── common.py
12│   ├── ifc2json4.py
13│   ├── ifc2json5a.py
14│   ├── mesh.py
15│   ├── reader.py
16│   └── to_ifcopenshell.py
17├── json2ifc.py
18└── samples.py

続いて、file_converters内にDockerfileとdocker-compose.ymlファイルを作成します。

 1.
 2├── ⚫️Dockerfile
 3├── ⚫️docker-compose.yml
 4├── poetry.lock
 5├── pyproject.toml├── README.md
 6├── dataset
 7│   ├── input
 8│   └── output
 9├── ifc2json.py
10├── ifcjson
11│   ├── __init__.py
12│   ├── common.py
13│   ├── ifc2json4.py
14│   ├── ifc2json5a.py
15│   ├── mesh.py
16│   ├── reader.py
17│   └── to_ifcopenshell.py
18├── json2ifc.py
19└── samples.py

docker-compose.ymlには以下の内容を記述します。

 1version: '3.8'
 2services:
 3  ifcjson:
 4    container_name: ifcjson
 5    build:
 6      context: ..
 7      dockerfile: ./Dockerfile
 8    ports:
 9      - "8000:8000"
10    tty: true
11    volumes:
12      - .:/code/
13      - ${PIP_CACHE_DIR_DETECTION:-cache-detection}:/root/.cache
14
15volumes:
16  cache-detection:

Dockerfileには以下の内容を記述します。

 1FROM python:3.9
 2
 3ENV APP_PATH=/code \
 4    PYTHONPATH=.
 5# 開発物のソースコードはcodeデイレクトリ下に配置する
 6
 7WORKDIR $APP_PATH
 8
 9RUN apt-get update && \
10    apt-get upgrade -y && \
11    pip install poetry
12# コンテナのセットアップ
13
14COPY . .
15
16RUN poetry install
17# 必要なパッケージ等をインストールする
18
19EXPOSE 8000

全て完了したら、環境構築をしていきます。

1cd file_converters
2
3docker-compose up -d

これで、Dockerを用いた環境構築は終了です。

実行

先ほど立ち上げた環境内でifcファイルを変換していきます。 手元にifcのサンプルファイルがない方は、こちら等からサンプルモデルをダンロードして使用してみましょう。

まず、file_converters/dataset/inputにifcファイルを格納します。

続いて、Docker環境においてifc2json.pyファイルを実行します。下記の実行コマンド内のパラメータは環境に合わせたを設定してください。

1docker exec ifcjson poetry run python ifc2json.py -i dataset/input/test.ifc -o dataset/output/test.json --compact

ifc2json

-h, --help: このパッケージのヘルプを表示します。 -i, I: inputファイルのパスを指定します。
-o, O: outputファイルのパスを指定します。
-v, V: ifcJSONのバージョンを指定します。デフォルトでは4が指定されています。
-c, --compact: jsonに変換される際にインデントをなくし、type情報を格納せずに出力する。
-n, --no_inverse: オブジェクトの逆参照を記載します。デフォルトではオンです。
-e, --empty_properties: 値がない属性情報も書き出します。デフォルトではオフです。
-w, --no_ownerhistory:
ifcJSONのバージョン4を指定している際IfcOwnerHistoryの情報を消去します。デフォルトではオフです。【警告】この設定をオンにするとIFC Schemaに則った変換ではなくなります。
-g GEOMETRY, --geometry GEOMETRY:
ジオメトリの書き出し設定を"none", "tessellate", "unchanged" から指定できます。デフォルトではunchangedが指定されています。【警告】この設定をnoneにするとIFC Schemaに則った変換ではなくなる可能性があります。

json2ifc

-i, I: inputファイルのパスを指定します。
-o, O: outputファイルのパスを指定します。

実行が成功すると指定した場所にjsonファイルが格納され、処理時間が出力されます。

1Conversion took  65.31001250000008  seconds

その他

その他の詳細な内容等については、公式ドキュメント 及び公式githubでのpull requestなどを用いて閲覧・検索してみてください。

Posts in this Series