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アドイン作ります
のんびり学習してる余裕などない!という方にご案内です。
スキル、資格等の詳細はプロフィールをご覧ください。
ご質問などもお気軽にメッセージしていただければと思います。
詳しくは下の記事にまとめています。
最後まで読んでいただき、ありがとうございました^^
以上です。






