Revitの開発を始めると必ず目にするのがParameterです。
Parameterは要素に付与された情報を指します。
たとえば壁の高さや材質などが該当します。
これらの情報は取得や変更が可能です。
その際に関係してくるのがStorageTypeです。
今回はParameterの基本からStorageTypeとの関係、さらに実践的なコード例まで解説します。
初心者の方でも理解できるよう丁寧に進めます!
Revitアドイン開発をLancersにて承っております。
詳しくは下の記事にまとめています。

Parameterとは何か
ParameterはRevitの要素に付属するプロパティです。
名前やタイプ、高さ、材料など多くの情報が含まれます。
RevitAPIではParameterクラスとして扱われます。
Parameterは以下のように取得できます。
Parameter param = element.LookupParameter("高さ");
上記のようにLookupParameter()を使用して、名前を指定して取得するのができます。
取得したParameterから値を読み取ることで、要素の情報をプログラムから参照できます。

StorageTypeの基本概要
StorageTypeはParameterのデータ型を示すプロパティです。
Parameterの値の型に応じて異なるStorageTypeが設定されます。
StorageTypeは次の4種類があります。
- Double(数値)
- Integer(整数)
- String(文字列)
- ElementId(要素ID)
Parameterの型を確認するには以下のように記述します。
StorageType type = param.StorageType;
型ごとに取得方法が異なるためStorageTypeの確認は重要です。
各StorageTypeの特徴と例
それぞれのStorageTypeには特徴があります。
以下に詳しく見ていきましょう。
Double型
長さや面積など小数を扱います。
double value = param.AsDouble();
Integer型
整数値やブール値(0か1)を表します。
int value = param.AsInteger();
String型
テキスト情報を扱います。
string value = param.AsString();
ElementId型
他の要素との関連情報に使われます。
ElementId id = param.AsElementId();
値取得の基本的なコード例
Parameterから値を取得する基本形は以下の通りです。
Parameter param = element.LookupParameter("幅"); if (param != null) { switch (param.StorageType) { case StorageType.Double: double d = param.AsDouble(); break; case StorageType.Integer: int i = param.AsInteger(); break; case StorageType.String: string s = param.AsString(); break; case StorageType.ElementId: ElementId id = param.AsElementId(); break; } }
StorageTypeごとに適切なメソッドで取得するのがポイントです。
StorageTypeごとの取得方法
StorageTypeによって呼び出すメソッドが異なります。
それぞれに対応したコードを見ていきましょう。
Double型の取得
double GetDouble(Parameter param) { return param.AsDouble(); }
Integer型の取得
int GetInteger(Parameter param) { return param.AsInteger(); }
String型の取得
string GetString(Parameter param) { return param.AsString(); }
ElementId型の取得
ElementId GetElementId(Parameter param) { return param.AsElementId(); }
型を間違えて取得すると例外が発生するため注意が必要です。
型変換の注意点と対処法
たとえばDouble型の値はRevit内部単位で返されます。
長さであればフィート単位であることが多いです。
そのため必要に応じて変換する必要があります。
double lengthFeet = param.AsDouble(); double lengthMm = UnitUtils.Convert(feet, UnitTypeId.Feet, UnitTypeId.Millimeters);
UnitUtilsを使えば目的の単位に変換できます。
これを行わないと正しい値が得られません。

よくあるエラーとその原因
よくあるエラーが型の不一致です。
たとえばString型のParameterに対してAsDoubleを使うとエラーになります。
// 誤りの例 double d = param.AsDouble(); // paramはString型
正しい方法はStorageTypeを確認してから取得することです。
if (param.StorageType == StorageType.String) { string value = param.AsString(); }
実践的なサンプルコード紹介
以下に要素のParameter値をすべて取得するサンプルを示します。
public void Sample() { Autodesk.Revit.UI.UIDocument uidoc = this.ActiveUIDocument; Autodesk.Revit.DB.Document doc = uidoc.Document; Reference reference = uidoc.Selection.PickObject(ObjectType.Element, "要素をクリック選択してください"); Element element = (doc.GetElement(reference) as FamilyInstance).Symbol; ParameterSet parameterSet = element.Parameters; foreach (Parameter param in element.Parameters) { string paramName = param.Definition.Name; string paramValue = ""; switch (param.StorageType) { case StorageType.Double: paramValue = param.AsDouble().ToString(); break; case StorageType.Integer: paramValue = param.AsInteger().ToString(); break; case StorageType.String: paramValue = param.AsString(); break; case StorageType.ElementId: paramValue = param.AsElementId().IntegerValue.ToString(); break; } TaskDialog.Show(paramName, paramValue); } }
このコードは要素の全Parameterの名前と値を表示します。
まとめ:Parameterの値取得とStorageTypeの関係
Parameterの値を正しく取得するにはStorageTypeの理解が欠かせません。
StorageTypeごとの特徴を知って適切なメソッドを使いましょう。
単位の変換やnullチェックも重要なポイントです。
今回の記事がRevit開発の第一歩になれば幸いです。
RevitAPI独学用教材
最後に教材等を紹介します。
RevitAPIを理解してプログラムを作れるようになるには、C#の知識が必要です。
下記、オススメの参考書です。
プログラムが初心者にオススメのC#教材
プログラムの基礎知識がある人にオススメのC#教材
美しいコードを書きたい人はこちら
Revitアドイン作ります
のんびり学習してる余裕などない!という方にご案内です。
スキル、資格等の詳細はプロフィールをご覧ください。
ご質問などもお気軽にメッセージしていただければと思います。
詳しくは下の記事にまとめています。

最後まで読んでいただき、ありがとうございました^^
以上です。