※当ブログでは商品・サービスのリンク先にプロモーションを含みます。ご了承ください。

取得する

ElementクラスのParametersとParameterSetの基本

Revitの要素情報を操作するにはElementクラスが基本になります。

Elementが持つ属性情報の多くはParameterという形で格納されています。

この記事では、ElementのParametersプロパティとParameterSetについて解説します。

Parametersプロパティとは

ParametersプロパティはElementが持つすべてのパラメータを参照するための入り口です。

このプロパティを使うことでElementに紐づくパラメータの一覧を取得できます。

例えば、以下のように使用します。

public ParameterSet GetParameters(Element element)
{
    return element.Parameters;
}

このように、ParametersプロパティはParameterSet型を返します。

ParameterSetの概要を理解する

ParameterSetは、Parameterのコレクションです。

つまり、複数のParameterオブジェクトを格納した集合です。

ParameterSetはコレクションですが、通常のListとは異なりインデックスアクセスには対応していません。

反復処理で中身を確認する必要があります。

public void ShowAllParameterNames(Element element)
{
    foreach (Parameter param in element.Parameters)
    {
        TaskDialog.Show("Parameter", param.Definition.Name);
    }
}

このようにforeachでループして確認します。

ParameterSetを取得する方法

インスタンスとタイプ、それぞれのParameterSetを取得する方法を紹介します。

インスタンスのParameterSet

public void Sample1()
{
  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);
  ParameterSet parameterSet = element.Parameters;

  string result = "";
  foreach (Parameter parameter in parameterSet)
  {
    string parameterValue = "";
    switch (parameter.StorageType)
    {
        case StorageType.Integer:
          case StorageType.Double:
          case StorageType.ElementId:
          parameterValue = parameter.AsValueString();
        break;
        case StorageType.String:
          parameterValue = parameter.AsString();
        break;
        case StorageType.None:
        default:
        break;
    }
    
    result += parameter.Definition.Name + " : " + parameterValue + "\n";
  }
  
  TaskDialog.Show("パラメータ名と値", result);
}
※上記コードをThisApplication.csにコピペでそのまま使えます。

 

タイプのParameterSet

public void Sample2()
{
  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;

  string result = "";
  foreach (Parameter parameter in parameterSet)
  {
    string parameterValue = "";
    switch (parameter.StorageType)
    {
        case StorageType.Integer:
          case StorageType.Double:
          case StorageType.ElementId:
          parameterValue = parameter.AsValueString();
        break;
        case StorageType.String:
          parameterValue = parameter.AsString();
        break;
        case StorageType.None:
        default:
        break;
    }
    
    result += parameter.Definition.Name + " : " + parameterValue + "\n";
  }
  
  TaskDialog.Show("パラメータ名と値", result);
}
※上記コードをThisApplication.csにコピペでそのまま使えます。

 

インスタンス、タイプ共に取得したParameterから値を取得するには型に応じたメソッドを使います。

たとえば、文字列の場合はAsString()を使います。

また、AsValueString()は型を問わず表示用の文字列を返してくれるので便利です。

Parameterの値取得とStorageTypeの関係Revit要素のParameter取得にはStorageTypeの理解が不可欠です。型ごとの取得方法や注意点、実用的なコード例を丁寧に解説します。...

BuiltInParameterや名前でParameterを探す方法

特定の名前のパラメータを取得したい場合は、get_Parameter()やLookupParameter()を使います。

以下は名前でパラメータを取得する方法を示します。

public Parameter FindParameterByName(Element element, string paramName)
{
    return element.LookupParameter(paramName);
}

この方法は簡単ですが、大文字小文字の一致やパラメータの重複に注意が必要です。

また、存在しない場合はnullが返るため、nullチェックを忘れないようにします。

特定パラメータ取得の詳しくは下記をご覧ください。

ElementからParameterを取得する方法RevitのElementからParameterを取得する方法について、基本概念から取得手順、コード例を丁寧に解説します。...

まとめ:ParametersとParameterSet

以上がElementクラスのParametersとParameterSetの基本に関する解説です。

この知識を活用すれば、Revitモデルの自動処理やチェックツールの開発がよりスムーズになります。

ぜひコードを試しながら理解を深めてみてください!

RevitAPI独学用教材

最後に教材等を紹介します。

RevitAPIを理解してプログラムを作れるようになるには、C#の知識が必要です。

下記、オススメの参考書です。

プログラムが初心者にオススメのC#教材

イラストでの解説が分かりやすく、初めてのプログラミング学習にピッタリです。

プログラムの基礎知識がある人にオススメのC#教材

少し踏み込んだ内容まで学習でき、C#の知識が深まります。

美しいコードを書きたい人はこちら

個人的には、プログラマーひとり一冊は持っておくべきと思っている名作です^^
スポンサーリンク



Revitアドイン作ります

のんびり学習してる余裕などない!という方にご案内です。

ランサーズにてRevitのアドイン作成を承っております!

スキル、資格等の詳細はプロフィールをご覧ください。

ご質問などもお気軽にメッセージしていただければと思います。

詳しくは下の記事にまとめています。

【開発依頼】あなただけのRevitアドインを真心込めて作ります!RevitAPIを使ったアドイン開発を承ります。1から学習してアドイン作る余裕がない、外注でアドイン作成を依頼したい、という方はご利用をご検討いただければと思います^^...

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

以上です。