タイトル: カテゴリ・タイプ・インスタンス
SEOタイトル: Revitのデータ構造 — カテゴリ→ファミリ→タイプ→インスタンスの4層とタイプ/インスタンスパラメータ
カテゴリ・タイプ・インスタンス — 4 層のデータ構造
Revit の要素は「カテゴリ → ファミリ → タイプ → インスタンス」という 4 層で整理されます。この骨格と、タイプ/インスタンスという 2 種類のパラメータが、Revit を扱ううえでの共通言語です。
この記事の要点
- Revit の要素は カテゴリ → ファミリ → タイプ → インスタンスという 4 層構造で整理される
- カテゴリ(Walls / Doors / Windows など)は最上位の大分類。表示制御・集計・フィルタの基準になる
- タイプパラメータは同じタイプの全インスタンスで共有、インスタンスパラメータは 1 個ごとに個別設定
- この 4 層と 2 種類のパラメータが、API・IFC・連携のオブジェクト構造の基礎
14 層構造の全体像
Revit のすべての要素は、上位から順に カテゴリ → ファミリ → タイプ → インスタンスの 4 層で整理されています。この階層は Revit のデータ構造そのものであり、フィルタ・IFC への変換・外部連携のすべてがこの構造を土台にしています。
| 層 | 意味 | 具体例 |
|---|---|---|
| カテゴリ(Category) | 要素の用途・種類の大分類 | Doors(ドア) |
| ファミリ(Family) | 振る舞い・共通パラメータのまとまり | 片開きドア |
| タイプ(Type) | ファミリ内の規格バリエーション | 片開きドア 900×2100 |
| インスタンス(Instance) | モデルに配置された 1 個の要素 | 1F 会議室の入口に付いた、その特定のドア |
2カテゴリ(Category)
カテゴリは要素の最上位の分類で、Walls(壁)、Floors(床)、Doors(ドア)、Windows(窓)、Structural Columns(構造柱)、Furniture(家具)といった、あらかじめ定義された用途の区分です。利用者が自由に増やせるものではなく、Revit が持つ固定のリストから選ばれます。
カテゴリは次のような場面で基準として使われます。
ビューごとに「ドアを表示/非表示」のようにカテゴリ単位で制御する(ビュー設定 VG)。
集計表はカテゴリを指定して作成する(例:ドア集計表)。
要素を取得するとき、組込み列挙 BuiltInCategory(例 OST_Doors)でフィルタするのが基本。
Revit カテゴリは IFC のエンティティ(IfcDoor 等)へ対応づけられる。
3タイプとインスタンスの違い
4 層のうち、実務で最も誤解されやすいのがタイプとインスタンスの関係です。
「片開きドア 900×2100」というタイプは 1 つで、モデル内に同じ仕様のドアが何枚あっても参照するタイプは共通。
1F 会議室の入口にあるドア、2F 廊下にあるドア…それぞれが別々のインスタンスで、位置や向きの個別情報を持つ。
プログラム的に言えば、タイプはクラス(あるいはプロトタイプ)、インスタンスはそのクラスから生成された個々のオブジェクトに近い関係です。Revit API では、タイプは ElementType(およびその派生 FamilySymbol 等)、インスタンスは FamilyInstance など、別の要素として扱われます。あるインスタンスから、それが参照しているタイプをたどることもできます(タイプ ID を取得して解決する)。この「インスタンス → タイプ → ファミリ → カテゴリ」とたどれる関係が、要素の正体を特定する手がかりになります。
この区別を誤ると、たとえば「タイプの寸法を変えるつもりが、本当はインスタンス固有の値を変えていた(あるいはその逆)」といった事故につながります。値を書き込むときは、書き込み先がタイプとインスタンスのどちらのスコープなのかを必ず確認することが重要です。
4タイプパラメータとインスタンスパラメータ
4 層構造と表裏一体なのが、パラメータの 2 つのスコープです。これは取り違えると数量や属性がずれる、極めて重要なポイントです。
| 種類 | スコープ | 変更の影響 | 例 |
|---|---|---|---|
| タイプパラメータ | タイプ単位(同タイプの全インスタンスで共有) | 変えるとそのタイプの全インスタンスに一斉反映 | ドアの幅・高さ、壁の構成・厚さ、材質 |
| インスタンスパラメータ | インスタンス単位(1 個ごと) | その 1 個だけに反映 | 配置レベル、敷居高さ、コメント、個別マーク番号 |
たとえば「片開きドア 900×2100」のタイプパラメータである幅を 900 → 1000 に変更すると、そのタイプを使うすべてのドアが一斉に 1000 幅になります。一方、特定のドアだけ取り付けレベルを変えたいときは、そのインスタンスのインスタンスパラメータを編集します。「全体で揃えたいものはタイプ、個別に持たせたいものはインスタンス」と覚えると間違えにくくなります。
5API・IFC・連携との関係
この 4 層 + 2 スコープの構造は、外部連携でそのまま現れます。表現の名前は違っても、構造が共通しているからこそツール間でデータを行き来させられます。
要素取得はカテゴリ(BuiltInCategory)でフィルタするのが定石。各要素からタイプ(GetTypeId)とインスタンスを区別し、パラメータを読む。
Revit のカテゴリ/タイプ/インスタンスは、IfcDoor などのエンティティと、IfcTypeObject(型)/プロパティセットに対応づけられる。
要素をオブジェクトに変換し、カテゴリ・ファミリ・タイプ・各パラメータをプロパティとして保持。受信側はこの構造を頼りに要素を再構成する。
つまり、ここで押さえた 4 層構造は連携実装の共通言語です。Revit・IFC・各種連携ツールはいずれも「大分類(カテゴリ/エンティティ)」「型(タイプ)」「実体(インスタンス)」「属性(パラメータ/プロパティ)」という同じ発想で要素を表現します。パラメータの詳しい種類(共有パラメータ・組込みパラメータなど)は次の パラメータ(プロジェクト/共有/グローバル/ファミリ) で扱います。