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などを用いて閲覧・検索してみてください。