はじめに
自分用のメモとして書きますが、誰かに見ていただけると嬉しいです。
今回はIFCをJSONに変換していこうと思います。
今回行うこと
- IfcOpenShellのIfcConvertをダウンロード
- ダウンロードしたIfcConvertのパスを環境変数に設定
- IfcConvertを使用して、IFCファイルをXML形式に変換
- Pythonスクリプトを用いて、XMLファイルをJSON形式に変換
の流れで行いたいと思います。
ほかにもやりようはあると思うのですが今回は上記の方法で行いました。
(今後はIFC.jsを使って出来るといいな)
IfcConvertのダウンロード
まずIfcOpenShellのサイトにアクセスします。(GitHubのリポジトリでも可)
次にダウンロードをクリックしてZIPファイルをダウンロードします。
ダウンロードしたファイルの解凍をします。
ダウンロードしたZIPファイルを右クリックし、「すべて展開」を選択します。
(今回僕は「C¥Users¥ユーザ名¥OneDrive¥デスクトップ¥環境変数」のパスに保存しました)
環境変数のパス設定
スタートメニューで「環境変数」と検索し、「システム環境変数の編集」を選択します。
「詳細設定」タブから「環境変数」ボタンをクリックします。
今回はユーザー環境変数(U)の方でPathを指定していく。まず変数の「Path」をクリックし、「新規(N)」を選択し,解凍したIfcConvert.exeが含まれるフォルダーのフルパス(例: C:\IfcOpenShell\)を入力します。
(今回僕はC¥Users¥ユーザ名¥OneDrive¥デスクトップ¥環境変数というパスに展開したので写真のようなパス指定としました)
次に「OK」を選択しパスを追加し変更を保存します。
これで環境変数の設定は完了です!
実際にIfcConvertを使ってみよう
まずコマンドプロンプトを開きます。
「コマンドプロンプト」または「Windows PowerShell」を選択します。
変換したいIFCファイルが保存されているディレクトリに移動します。
今回使うIFCファイルはGitHubの「Ifc4_SampleHouse.ifc」を使用しました。
次に.ifcファイルをJSONファイルに変換したいのですが残念ながらIfcConvertはJSONに対応してないとのこと
対応している形式は以下の通りです。
-
.obj
WaveFront OBJ(マテリアルファイル.mtl
も作成できます) -
.dae
Collada Digital Assets Exchange -
.glb
glTF Binary glTF v2.0 -
.stp
STEP Standard for the Exchange of Product Data -
.igs
IGES Initial Graphics Exchange Specification -
.xml
XML Property definitions and decomposition tree -
.svg
SVG Scalable Vector Graphics (2D floor plan) -
.h5
HDF Hierarchical Data Format storing positions, normals, and indices -
.ifc
IFC-SPF Industry Foundation Classes
そこでまずはXML形式に変換したいと思います!
cmdでまずはIFCファイルを保存したデイレクトリに移動する。
次に以下のコードを書きます。
IfcConvert Ifc4_SampleHouse.ifc example.xml
もしこのコードで実行してもエラーが出る場合は
"C:\Users\ユーザー名\OneDrive\デスクトップ\環境変数\IfcConvert.exe" Ifc4_SampleHouse.ifc example.xmll
で行ってみてください。(ここのディレクトリは自分で設定したパスを指定してください)
これでIFCファイルの構造をxml形式に変換できるはずです!
実際に確認してみましょう。
ちゃんとできてますね!
XML形式をJSON形式に変換する
次にPythonを使用してJSONへ変換しようと思います。
まずテキストエディタであるVisualStudioCodeを開き,Ifc4_SampleHouse.ifcを保存しているフォルダを開き,Terminalを展開します。
次にxmltodictモジュールのインストールを行います。
このモジュールを使うことでXMLデータを読み込み、jsonモジュールを使ってJSON形式に変換することが可能になります。コードは以下の通りです。
pip install xmltodict
追加出来たら.pyファイルを新規作成し,以下のコードを書きます。
import xmltodict
import json
# XMLファイルを読み込む
with open('example.xml', 'r') as xml_file:
xml_content = xml_file.read()
# XMLを辞書に変換
dict_data = xmltodict.parse(xml_content)
# 辞書をJSONに変換し、ファイルに保存
with open('example.json', 'w') as json_file:
json.dump(dict_data, json_file, indent=4)
いよいよ最後です。
Terminalで実行しましょう!
python test.py
無事できてますね!
まとめ
この記事では、IFCファイルをJSON形式に変換するプロセスを紹介しました。
今回は以上で終わりたいと思います。ありがとうございました。