20.

Revit のグループ機能 - モデルグループ / 詳細グループ / Revit API による作成・解除・削除コード例

編集
この記事の要点
  • Revit のグループは、複数の要素を 1 つにまとめて同期管理する機能
  • モデルグループ(壁・ドア・家具など 3D 要素)と詳細グループ(寸法・注釈・詳細線)の2 種類がある
  • グループ化したインスタンスのいずれかを変更すると同名のすべてのインスタンスに反映される
  • Revit API では Document.Create.NewGroup(ICollection<ElementId>) で作成、Group.UngroupMembers() で解除
  • グループ削除は内部要素も同時削除される点に注意(解除 → 削除の順が安全)

Revit のグループとは

Revit のグループは、複数の要素を1 つの単位にまとめて管理する機能です。グループ化することで、同じセットの要素をワンクリックで繰り返し配置でき、どのインスタンスを編集してもすべての複製に同期反映されます。

たとえばホテルの客室レイアウトをグループ化しておけば、設計変更が入ったときに 1 つだけ修正するだけで全フロアの客室に反映され、修正漏れを根絶できます。

グループの種類

種類対象要素用途例
モデルグループ(Model Group)壁 / 床 / ドア / 窓 / 家具など 3D 要素客室 / オフィスブース / トイレユニットの繰り返し
詳細グループ(Detail Group)寸法 / 注釈 / 詳細線 / 文字標準詳細図 / 凡例 / 注記セット
付属詳細グループ(Attached Detail)モデルグループに紐付く注釈群モデルグループに対応する寸法・注釈

グループの作成(手動)

  1. グループ化したい要素を複数選択
  2. リボンの 修正タブ > グループを作成 をクリック
  3. グループ名を入力(例:客室タイプA
  4. プロジェクトブラウザの グループ ノード配下に登録される

Revit API でのグループ作成

using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Collections.Generic;

public Group CreateGroup(Document doc, ICollection<ElementId> elementIds)
{
    Group newGroup = null;
    using (Transaction trans = new Transaction(doc, "Create Group"))
    {
        trans.Start();
        newGroup = doc.Create.NewGroup(elementIds);
        // 任意:名前を付ける
        newGroup.GroupType.Name = "客室タイプA";
        trans.Commit();
    }
    return newGroup;
}

グループの編集

グループ内の要素を変更するには、グループを選択 → グループを編集 モードに入ります。変更内容はすべての同名インスタンスに反映されるため、一部だけ変えたい場合は事前に独立化(後述)してください。

グループの解除(Ungroup)

グループを解除すると、含まれていた要素は独立した個別要素に戻ります。要素自体は残ります。

public void UngroupGroup(Document doc, Group group)
{
    using (Transaction trans = new Transaction(doc, "Ungroup Elements"))
    {
        trans.Start();
        group.UngroupMembers();  // 要素は残り、グループだけ消える
        trans.Commit();
    }
}

グループの削除(要注意)

グループを Delete すると内部の要素も同時に削除されます。要素を残したい場合は先に UngroupMembers() で解除してから削除する流れが安全です。

public void DeleteGroup(Document doc, Group group)
{
    using (Transaction trans = new Transaction(doc, "Delete Group"))
    {
        trans.Start();
        doc.Delete(group.Id);  // ← 内部要素も削除される
        trans.Commit();
    }
}

すべてのグループを取得

using Autodesk.Revit.DB;
using System.Collections.Generic;
using System.Linq;

public List<Group> GetAllGroups(Document doc)
{
    return new FilteredElementCollector(doc)
        .OfClass(typeof(Group))
        .Cast<Group>()
        .ToList();
}

Revit API メソッド一覧

操作API メソッド備考
グループ作成doc.Create.NewGroup(elementIds)要素 ID コレクションを渡す
グループ解除group.UngroupMembers()要素は残る
グループ削除doc.Delete(group.Id)内部要素も同時削除
メンバー取得group.GetMemberIds()ElementId のリスト
全グループ取得FilteredElementCollector.OfClass(typeof(Group))クラスフィルタ
グループ複製ElementTransformUtils.CopyElement(doc, group.Id, translation)位置をずらして配置

グループ vs ファミリの違い

観点グループファミリ
定義場所プロジェクト内外部 RFA ファイル
使い回し同プロジェクト内のみ複数プロジェクトで共有
パラメータなし(要素そのものをコピー)タイプパラメータ / インスタンスパラメータ
柔軟性レイアウト固定サイズ・色を可変
用途客室・部屋セットドア・家具・什器

同じ物を繰り返し配置するときに「パラメータで変えたい」ならファミリ、「そっくりそのまま複製したい」ならグループが適しています。

つまずきやすいポイント

  • グループ削除 = 内部要素も削除。要素を残したい場合は先に UngroupMembers()
  • グループ内の要素を編集するとき、1 つだけ違うインスタンスにしたい場合は事前に「独立化」が必要
  • モデルグループにレベル参照のある要素を含めると、別レベルに配置できない
  • ホスト要素(壁にホストされたドアなど)とホスト先の壁は同じグループに入れる
  • 大きすぎるグループはパフォーマンス低下の原因。室単位など適切な粒度に分ける

まとめ

  1. グループ化で繰り返しレイアウトの一括管理ができる
  2. モデルグループ / 詳細グループの2 系統を使い分ける
  3. Revit API では NewGroup / UngroupMembers / Delete の 3 つを押さえる
  4. 削除前に解除するクセを付けて要素消失事故を防ぐ

関連

  • Revit API — Revit の .NET API 全般
  • FilteredElementCollector — 要素検索
  • Transaction — 編集トランザクション
  • ElementTransformUtils — 要素の複製・移動
  • ファミリ — グループとは別系統の再利用ユニット
編集
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. 「グループ」について

最近更新/作成されたページ