プログマのプログラマ日記

技術メモや自社サービスに関する記事を書いていく予定です。

FMEでifcを読み込んだときに謎のIFMEBoxが作られる現象に対処した話

ifcからglTFに変換したかった。

とある案件で、FMEを使ってifcからglTFに変換できるかを検証していたときに遭遇した現象と対処方法についての覚書です。

環境

テストデータ

以下のサイトのFZK HausとOffice Buildingを利用。

www.ifcwiki.org

FKZViewerで表示するとこんな感じ。

FKZ Haus

Office Building

現象

FMEのIfcReader(Industory Foundation Class STEP/XML Files(IFC)を利用してテストデータを読み込んだ時に、元形状には存在していない形状が作られてしまう。

FMEワークフロー

変換結果のglTF(IFC Haus)

変換結果のglTF(Office Building)

バウンディングボックス(?)みたいなのがでちゃってますね。。

対処方法(初めに結論)

IfcReaderのReader Parameterで「Read all Geometric Representations」を「No」に設定することで回避できます。

途中経過

以下は結論に至るまでの話です。興味のある方お読みください。

この余分な形状はなんなのか。

試しにinspectorでIFC Hausの屋根にくっついているバウンディングボックスを選択してみました。

IfcSlabの属性

IFMEBoxがなんとなく怪しいです。

対処案1:IFMBoxをフィルタリング

まずは、単純に怪しいやつを除外ということでIFMEBoxをより分けてみました。
IFMEAggregateのままだと除外できない(と、思う)のでDeaggregatorを間にかませてからTesterでIFMEBoxとそうじゃないものをより分けます。

ワークフロー

結果は以下の通り。

IFMEBoxを除外したもの

IFMEBoxのみを出力したもの

やっぱしIFMEBoxはバウンディングボックスっぽいですね。

対処案2(結論):「Read all Geometric Representations」を「No」に設定する

でも、いちいちDeaggregatorしてFilterするのは面倒くさいです。もっと簡単な方法はないのでしょうか。
IfcReaderのReader Parameterを調べてみたら「Read all Geometric Representations」と「Representations to Read」というパラメータがありました。怪しいです!

とりあえず、Read all Geometric Representationsを「No」に設定してみます。

ReaderParameters設定画面

すると「Representation to Read」が設定できるようになります。
設定ダイアログを開いてみたらデフォルトで「Box」は無視されるようになっていたので、このまま「OK」を選びます。
(Annotationの引き出し線とか要らない人は、ここで「Annotation」のチェックも外すとよいですね)

Representation to Readの設定

変換してみましょう。どきどき。。

IFC Haus

Office Building

やったぜ!

気になっている点

この方法、テストデータではうまくいっているけど、本当にBox形状を全部除外しちゃっても問題無いのだろうか。
(もっとセマンティックな基準でより分けられない?)

FME "Read all Geometric Representations"」で検索してみたら同じ問題で悩んでいた人の記事を見つけました。
(こういう検索語って解決した後じゃないと思い浮かばないですよね。)

community.safe.com

ここでFMEの中の人が

'Read all Geometric Representations' (eg. = No), and then leave the 'Representations to Read' as default:

と回答しているので問題ないのでしょうかね。

FME最高と叫びなさい

今回FMEを初めて触ってみましたが、便利ですね。
DFDがそのまま動き出すような感覚が見ていて楽しいです。

お値段もお高いですが。。