8.

Revit API の BuiltInCategory 完全リファレンス — Wall / Doors / MEP まで網羅

編集
この記事の要点
  • BuiltInCategory は Revit の標準カテゴリを列挙した列挙型 enum
  • 主要な命名規則: OST_(Object Style)プレフィックス + 英語カテゴリ名(例: OST_Walls
  • FilteredElementCollector と組み合わせてOfCategory() でカテゴリ別取得
  • カテゴリ判定は element.Category.Id.IntegerValue == (int)BuiltInCategory.OST_Walls
  • 建築・構造・MEP(設備)系で 200+ カテゴリ、よく使うのは 30 個程度を覚えておけば実務で十分

BuiltInCategory とは

BuiltInCategory は Revit API(Autodesk.Revit.DB 名前空間)で定義された列挙型で、Revit のすべての標準カテゴリ(壁・ドア・窓・床・配管等)を表します。FilteredElementCollector で要素を絞り込む際の必須キーです。

基本的な使い方

using Autodesk.Revit.DB;

// すべての壁を取得
var walls = new FilteredElementCollector(doc)
    .OfCategory(BuiltInCategory.OST_Walls)
    .WhereElementIsNotElementType()
    .ToElements();

Console.WriteLine($"壁の数: {walls.Count}");

// 複数カテゴリを一度に取得
var categories = new List {
    BuiltInCategory.OST_Doors,
    BuiltInCategory.OST_Windows
};
var filter = new ElementMulticategoryFilter(categories);
var openings = new FilteredElementCollector(doc)
    .WherePasses(filter)
    .WhereElementIsNotElementType()
    .ToElements();

建築カテゴリ(よく使う 15 個)

BuiltInCategory意味備考
OST_Wallsもっとも使用頻度高
OST_Doorsドア壁にホスト
OST_Windows壁にホスト
OST_Floors床(スラブ)水平要素
OST_Roofs屋根
OST_Ceilings天井
OST_Stairs階段
OST_StairsRailing手すり
OST_Rampsスロープ
OST_Columns建築柱意匠柱
OST_Furniture家具
OST_FurnitureSystemsシステム家具
OST_Casework什器キッチン・収納
OST_GenericModel汎用モデルその他
OST_Rooms部屋面積拾い

構造カテゴリ(よく使う 8 個)

BuiltInCategory意味
OST_StructuralColumns構造柱
OST_StructuralFraming構造フレーム(梁・トラス)
OST_StructuralFoundation基礎
OST_StructuralStiffenerスチフナ
OST_StructuralTrussトラス
OST_Rebar鉄筋
OST_StructuralConnections接合部
OST_StructuralFramingSystem構造フレームシステム

MEP(設備)カテゴリ

BuiltInCategory意味分野
OST_PipeCurves配管衛生 / 空調
OST_PipeFitting配管継手衛生
OST_PipeAccessory配管付属品(バルブ等)衛生
OST_DuctCurvesダクト空調
OST_DuctFittingダクト継手空調
OST_DuctAccessoryダクト付属品空調
OST_MechanicalEquipment機械設備空調機等
OST_PlumbingFixtures衛生器具便器・洗面台
OST_LightingFixtures照明器具電気
OST_ElectricalEquipment電気設備分電盤等
OST_ElectricalFixtures電気器具コンセント等
OST_Conduit電線管電気
OST_CableTrayケーブルラック電気

注釈・ビュー系カテゴリ

BuiltInCategory意味
OST_Grids通り芯
OST_Levelsレベル(階)
OST_Dimensions寸法
OST_TextNotes文字注釈
OST_Tagsタグ
OST_Sheetsシート
OST_Viewsビュー
OST_Viewportsビューポート
OST_TitleBlocksタイトルブロック

カテゴリ判定の書き方

// パターン1: integer 値で比較
if (element.Category != null &&
    element.Category.Id.IntegerValue == (int)BuiltInCategory.OST_Walls)
{
    Console.WriteLine("これは壁");
}

// パターン2: BuiltInCategory に変換して比較
var bic = (BuiltInCategory)element.Category.Id.IntegerValue;
switch (bic)
{
    case BuiltInCategory.OST_Walls:
        Console.WriteLine("壁");
        break;
    case BuiltInCategory.OST_Doors:
        Console.WriteLine("ドア");
        break;
    case BuiltInCategory.OST_Windows:
        Console.WriteLine("窓");
        break;
    default:
        Console.WriteLine($"その他: {element.Category.Name}");
        break;
}

// パターン3: Category.BuiltInCategory プロパティ (Revit 2023+)
// if (element.Category.BuiltInCategory == BuiltInCategory.OST_Walls) ...

FilteredElementCollector との応用

// すべての建築要素を一度に取得
var archCategories = new List {
    BuiltInCategory.OST_Walls,
    BuiltInCategory.OST_Floors,
    BuiltInCategory.OST_Roofs,
    BuiltInCategory.OST_Ceilings,
    BuiltInCategory.OST_Doors,
    BuiltInCategory.OST_Windows,
    BuiltInCategory.OST_Columns,
    BuiltInCategory.OST_Stairs
};

var multiFilter = new ElementMulticategoryFilter(archCategories);
var archElements = new FilteredElementCollector(doc)
    .WherePasses(multiFilter)
    .WhereElementIsNotElementType()
    .ToElements();

// レベルごとに壁を集計
var levels = new FilteredElementCollector(doc)
    .OfCategory(BuiltInCategory.OST_Levels)
    .Cast();

foreach (var level in levels)
{
    var levelFilter = new ElementLevelFilter(level.Id);
    var wallsOnLevel = new FilteredElementCollector(doc)
        .OfCategory(BuiltInCategory.OST_Walls)
        .WherePasses(levelFilter)
        .WhereElementIsNotElementType()
        .Count();

    Console.WriteLine($"{level.Name}: {wallsOnLevel} walls");
}

カテゴリ一覧を動的に取得する

// プロジェクトの全カテゴリを列挙
foreach (Category cat in doc.Settings.Categories)
{
    int id = cat.Id.IntegerValue;
    string bicName = "";
    if (Enum.IsDefined(typeof(BuiltInCategory), id))
        bicName = ((BuiltInCategory)id).ToString();

    Console.WriteLine($"{cat.Name} | {id} | {bicName}");
}

FAQ

Q: BuiltInCategory 一覧を全て見たい
A: Revit API ドキュメント、または Enum.GetValues(typeof(BuiltInCategory)) で列挙できます。約 1300 個あります。

Q: カスタムカテゴリは作れる?
A: BuiltInCategory には追加できませんが、サブカテゴリは作成可能(ファミリエディタ内)。

Q: タイプ要素もまとめて取得するには?
A: WhereElementIsElementType() または WhereElementIsNotElementType() を省略すれば両方取れます。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. RevitAPI.dll と RevitAPIUI.dll の参照
  2. マニフェストファイルの書き方
  3. アドインの追加/設置方法
  4. アドインの作成サンプル(外部ツール編)
  5. アドインの作成サンプル(外部アプリケーション編)
  6. 要素の取得と情報の表示
  7. 要素のカテゴリとマテリアルの取得と表示
  8. よく使うBuiltInCategoryの一覧
  9. 外部ツールでAutodesk.Revit.Documentを取得する方法
  10. エラーメッセージの設定方法
  11. 「はい」、「いいえ」、「キャンセル」ボタンの設置と処理分岐
  12. 要素(カテゴリ、ファミリ、タイプ)とは
  13. ElementIdとUniqueIdの違い
  14. 要素フィルターの使い方
  15. 要素のパラメータ一覧の取得
  16. pyRevitの導入と簡単なアプリケーションの作成
  17. Revit SDKのサンプルの場所とビルド方法
  18. FamilySymbol(タイプ)の取得とパラメータの変更
  19. 相対パスでdllにアイコン画像を埋め込む方法
  20. 「グループ」について