2026年5月16日土曜日

IFC ~ USERDEFINED

クラスとPredefinedTypeの関係

 IFCは、現実世界の建材をコンピュータが理解できるように分類しています。しかし、一つのクラスだけでは範囲が広すぎます。例えば

  • IfcCovering(クラス):何かを覆うもの
    • これだけだと、それが「天井」なのか「床」なのか「幅木」なのか区別がつきません。
  • PredefinedType(小分けラベル):その中身を特定する役割
    • CEILING(天井)
    • FLOORING(床仕上げ)
    • SKIRTINGBOARD(幅木)
このように、「クラス + PredefinedType」がセットになることで、初めてその部材が何であるかが確定する仕組みになっています。
このPredefinedTypeのなかにUSERDEFINEDがあります。

USERDEFINEDの役割

IFCを作っている国際組織(buildingSMART)は、世の中にある全ての建材に名前を付けようとしていますが、技術の進歩や地域特有の部材など、どうしてもリストに載らないものが出てきます。
そこで、「リストにはないけれど、このクラス(IfcCoveringなど)に属する何かです」と言いたい時に使うのが USERDEFINED です。例えば・・・・

  • PredefinedType = SKIRTINGBOARD
    • 「世界標準のリストにある『幅木』です」という意味。
  • PredefinedType = USERDEFINED
    • 「リストにはない特殊なものですが、仕上げ材の一種です。具体的な名前は ObjectType を見てください」という意味。

IFCのルールでは、PredefinedType(定義済みの種類)を USERDEFINED にした場合、「じゃあ、具体的に何なの?」という情報を ObjectType という属性に書き込むことが義務付けられています。

RevitでObjectTypeを指定する

RevitでObjectTypeを指定するには、パラメータIfcSpatialContainer同様、隠しパラメータIfcObjectTypeが用意されています。

IfcObjectTypeパラメータは、次のいずれかの方法で作成できます。

  1. 共有パラメータで自作する
  2. プロジェクトパラメータとして自作する
  3. Autodesk公式の共有パラメータを使用する

1や3の共有パラメータであれば、ファミリにあらかじめ仕込んでおくこともできます。

3の場合は、Revitの拡張機能からIFC v26.4.1 for Revit 2026などをインストールすると、次の共有パラメータファイルの中にあります。(各バージョン有ります)

"C:\ProgramData\Autodesk\ApplicationPlugins\IFC 2026.bundle\Contents\2026\IFC Shared Parameters-RevitIFCBuiltIn_ALL.txt"

例えば次のような簡単な下足入れを造作工事カテゴリでインプレイスファミリとして作成しました。これをObjectType=SHOERACKと指定してみます。

造作工事カテゴリで作成した下足入れ

何も設定せずIFCに出力すると・・・・

BIMvisionでの表示

IfcEntityはRevit標準のマッピングでIfcFurnitureになっていますが、PredefinedTypeはNOTDEFINEDですから、「具体的に何なのか?」がわかりませんね。

そこでまず、プロジェクトパラメータとしてIfcObjectTypeを目的のカテゴリ(今回は造作工事)にインスタンス(場合によってはタイプ)パラメータとして追加します。

  • パラメータを自作する場合は、データタイプを文字にしてください。
    データタイプは文字

  • Autodeskの標準共有パラメータを使用する場合は、パラメータグループRevit IFC Exporter ParametersグループにあるIfcObjectTypeを利用してください。
    IFC Shared Parameters-RevitIFCBuiltIn_ALL.txt

目的のファミリを選択し、インスタンスパラメータ定義済み書き出しIFCクラス、IFCタイプ、IfcObjectTypeを次のように設定します。

  • 書き出しIFCクラス:IfcFurniuture
  • 定義済みIFCタイプ:USERDEFINED
  • IfcObjectType:SHOERACK
    IFC関連パラメータを設定

この状態で書き出してみます。

ObjectType=SHOERACKと出力されました

これでユーザー定義のオブジェクトタイプを書き出すことができ、この要素がなんであるかを伝えることができるIFCデータになります。