RevitAPIを扱う際に必ず登場するのがElementクラスです。
このクラスには多くの情報が含まれており、効率的なRevitAPI開発のカギを握ります。
本記事ではElementクラスの基本から、各プロパティの活用方法までを丁寧に解説します。
RevitAPI初心者の方でも理解しやすいように、コード例も交えて説明していきます。
Revitアドイン開発をLancersにて承っております。
詳しくは下の記事にまとめています。
Elementクラスとは何か
ElementクラスはRevit内のすべての要素の基底クラスです。
壁やドア、窓などの実体もElementを継承しています。
このクラスを通じて要素の情報にアクセスできます。
以下のように要素を取得してElementとして扱います。
public Element GetElementById(Document doc, int id)
{
ElementId elementId = new ElementId(id);
Element element = doc.GetElement(elementId);
return element;
}
このコードは、指定IDの要素を取得するメソッドです。
すべての要素はこのElementクラスを基にしています。
プロパティの基本構造
Elementクラスには複数のプロパティがあります。
これらは要素の情報を取得するのに使います。
代表的なプロパティはId、Name、Category、Parametersなどです。
いずれも読み取り専用か、編集可能な場合があります。
IdとUniqueIdの違い
Idプロパティは数値型でプロジェクト内の要素を識別します。
一方、UniqueIdは文字列型でグローバルに一意なIDです。
Revitのセッションをまたいでも識別できます。
以下に両者を取得する例を示します。
public void ShowElementIds(Element element)
{
TaskDialog.Show("ID情報",
"Id: " + element.Id.IntegerValue +
"\nUniqueId: " + element.UniqueId);
}
Idは変更される可能性がありますが、UniqueIdは不変です。
データ連携などではUniqueIdの使用が推奨されます。
Categoryとその役割
Categoryプロパティは要素が属するカテゴリを表します。
「壁」「ドア」「家具」などがCategoryに該当します。
以下のコードは要素のカテゴリ名を取得します。
public string GetCategoryName(Element element)
{
Category category = element.Category;
return category != null ? category.Name : "カテゴリなし";
}
カテゴリはフィルタリングや分類に役立ちます。
Nameプロパティの活用法
Nameプロパティは要素の名称を取得するのに使います。
ただし、すべての要素で値が入っているわけではありません。
次のコードはNameを取得するシンプルな例です。
public string GetElementName(Element element)
{
return element.Name;
}
Parametersの取得方法
Parametersは要素が持つ詳細情報の集合です。
長さや高さ、材料などもParametersに含まれます。
すべてのパラメータを取得して一覧表示する例です。
public void ShowAllParameters(Element element)
{
string result = "";
foreach (Parameter param in element.Parameters)
{
result += param.Definition.Name + ": " + GetParameterValue(param) + "\n";
}
TaskDialog.Show("パラメータ一覧", result);
}
private string GetParameterValue(Parameter param)
{
switch (param.StorageType)
{
case StorageType.Double:
return param.AsValueString();
case StorageType.Integer:
return param.AsInteger().ToString();
case StorageType.String:
return param.AsString();
case StorageType.ElementId:
return param.AsElementId().IntegerValue.ToString();
default:
return "不明";
}
}
このように、パラメータの取得にはStorageTypeの確認が必要です。
プロパティの編集可否
プロパティの中には書き換え可能なものもあります。
たとえば、パラメータの値は変更できます。
次の例では指定パラメータの値を設定します。
public void SetParameterValue(Element element, string paramName, string newValue)
{
foreach (Parameter param in element.Parameters)
{
if (param.Definition.Name == paramName && !param.IsReadOnly)
{
param.Set(newValue);
break;
}
}
}
読み取り専用プロパティは変更できないため注意が必要です。
プロパティの活用例
プロパティを活用することで、要素の自動チェックやレポート作成が可能です。
以下はカテゴリごとの要素名を一覧化する例です。
public void Sample()
{
Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument;
Autodesk.Revit.DB.Document doc = uidoc.Document;
FilteredElementCollector collector = new FilteredElementCollector(doc);
IList<Element> elements = collector.WhereElementIsNotElementType().ToElements();
Dictionary<string, List<string>> categoryMap = new Dictionary<string, List<string>>();
foreach (Element element in elements)
{
if (element.Category != null)
{
string category = element.Category.Name;
string name = element.Name;
if (!categoryMap.ContainsKey(category))
{
categoryMap[category] = new List<string>();
}
categoryMap[category].Add(name);
}
}
string result = "";
foreach (var pair in categoryMap)
{
result += "[" + pair.Key + "]\n";
foreach (string name in pair.Value)
{
result += " - " + name + "\n";
}
}
TaskDialog.Show("カテゴリ別要素一覧", result);
}
このようにプロパティを組み合わせることで、多様な処理が可能になります。
注意すべきプロパティ項目
一部のプロパティは、条件によって取得できないことがあります。
たとえば、nullのCategoryや空文字のNameなどです。
コード中でのnullチェックを忘れずに行いましょう。
if (element.Category != null)
{
string categoryName = element.Category.Name;
}
また、パラメータの存在確認も重要です。
Parameter param = element.LookupParameter("高さ");
if (param != null)
{
string height = param.AsValueString();
}
これにより、予期せぬエラーを防ぐことができます。
まとめと今後の応用
ElementクラスはRevitAPIの中心的な存在です。
基本的なプロパティの理解はAPI開発の第一歩となります。
本記事で紹介した内容を踏まえて、さらに応用的な開発に挑戦してみましょう!
RevitAPI独学用教材
最後に教材等を紹介します。
RevitAPIを理解してプログラムを作れるようになるには、C#の知識が必要です。
下記、オススメの参考書です。
プログラムが初心者にオススメのC#教材
プログラムの基礎知識がある人にオススメのC#教材
美しいコードを書きたい人はこちら
Revitアドイン作ります
のんびり学習してる余裕などない!という方にご案内です。
スキル、資格等の詳細はプロフィールをご覧ください。
ご質問などもお気軽にメッセージしていただければと思います。
詳しくは下の記事にまとめています。
最後まで読んでいただき、ありがとうございました^^
以上です。






