IFCをJSONに変換してみよう（IfcConvert）

# はじめに
自分用のメモとして書きますが、誰かに見ていただけると嬉しいです。
今回はIFCをJSONに変換していこうと思います。


## 今回行うこと
- IfcOpenShellのIfcConvertをダウンロード
- ダウンロードしたIfcConvertのパスを環境変数に設定
- IfcConvertを使用して、IFCファイルをXML形式に変換
- Pythonスクリプトを用いて、XMLファイルをJSON形式に変換


の流れで行いたいと思います。

## IfcConvertのダウンロード
まずIfcOpenShellの[サイト](http://ifcopenshell.org)にアクセスします。（GitHubの[リポジトリ](https://github.com/IfcOpenShell/IfcOpenShell)でも可）

次にダウンロードをクリックしてZIPファイルをダウンロードします。
![スクリーンショット 2024-03-06 203400.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3720022/ab523a4d-700f-28b3-09ce-1f811e7d610c.png)

ダウンロードしたファイルの解凍をします。
ダウンロードしたZIPファイルを右クリックし、「すべて展開」を選択します。
（今回僕は「C¥Users¥ユーザ名¥OneDrive¥デスクトップ¥環境変数」のパスに保存しました）
![スクリーンショット 2024-03-06 204019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3720022/7c23dfef-e796-c4b8-2b77-a495f63acfcc.png)

## 環境変数のパス設定
スタートメニューで「環境変数」と検索し、「システム環境変数の編集」を選択します。
「詳細設定」タブから「環境変数」ボタンをクリックします。
今回はユーザー環境変数(U)の方でPathを指定していく。まず変数の「Path」をクリックし、「新規（N）」を選択し,解凍したIfcConvert.exeが含まれるフォルダーのフルパス（例: C:\IfcOpenShell\）を入力します。

（今回僕はC¥Users¥ユーザ名¥OneDrive¥デスクトップ¥環境変数というパスに展開したので写真のようなパス指定としました）
![スクリーンショット 2024-03-06 204347.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3720022/b089b707-2aac-bfb4-924b-b00fd77d98ab.png)
次に「OK」を選択しパスを追加し変更を保存します。

これで環境変数の設定は完了です！

## 実際にIfcConvertを使ってみよう
まずコマンドプロンプトを開きます。
「コマンドプロンプト」または「Windows PowerShell」を選択します。


変換したいIFCファイルが保存されているディレクトリに移動します。
今回使うIFCファイルは[GitHub](URL "https://github.com/youshengCode/IfcSampleFiles")の「Ifc4_SampleHouse.ifc」を使用しました。

次に.ifcファイルをJSONファイルに変換したいのですが残念ながらIfcConvertはJSONに対応してないとのこと:sob:
対応している形式は以下の通りです。
- `.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ファイルを保存したデイレクトリに移動する。

次に以下のコードを書きます。
```python:
IfcConvert Ifc4_SampleHouse.ifc example.xml
```
もしこのコードで実行してもエラーが出る場合は
```:
"C:\Users\ユーザー名\OneDrive\デスクトップ\環境変数\IfcConvert.exe" Ifc4_SampleHouse.ifc example.xmll
```
で行ってみてください。（ここのディレクトリは自分で設定したパスを指定してください）

これでIFCファイルの構造をxml形式に変換できるはずです！
実際に確認してみましょう。![スクリーンショット 2024-03-06 212057.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3720022/4c5c12ff-1907-5b2d-fde9-550cef281f68.png)
ちゃんとできてますね！:raised_hands:

## XML形式をJSON形式に変換する

次にPythonを使用してJSONへ変換しようと思います。
まずテキストエディタであるVisualStudioCodeを開き,Ifc4_SampleHouse.ifcを保存しているフォルダを開き,Terminalを展開します。

次にxmltodictモジュールのインストールを行います。
このモジュールを使うことでXMLデータを読み込み、jsonモジュールを使ってJSON形式に変換することが可能になります。コードは以下の通りです。
```python:
pip install xmltodict
```
追加出来たら.pyファイルを新規作成し,以下のコードを書きます。
```python:test.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:
python test.py
```

できたでしょうか？早速確認してみましょう。
![スクリーンショット 2024-03-06 213151.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3720022/1546981b-e76e-dfbd-a973-d16e23468379.png)

無事できてますね！:raised_hands:

## まとめ
この記事では、IFCファイルをJSON形式に変換するプロセスを紹介しました。

今回は以上で終わりたいと思います。ありがとうございました。