RevitAPI

【RevitAPI】StorageTypeプロパティでParameterの型を確認する

【RevitAPI】StorageTypeプロパティでParameterの型を確認する

Parameterが持っている値は、Double、Integer、String、ElementIdの型うちどれかになります。

そして、どの型を持っているかによって値を取得するメソッドが異なります

ひとまずパラメータの型を明確にしないとダメですね。

どの型を持っているのかはParameterクラスのStorageTypeプロパティを使って確認できますよ。

ここではParameter.StorageTypeについて紹介します。

Parameter.StorageTypeのサンプル

サンプルのソースコードはParameterSetの紹介で使ったSample1を使います。

RevitAPI-Element-Parameters-ParameterSet
【RevitAPI】Element.ParametersでParameterSetを取得ElementクラスのParametersメソッドで要素に結びついているパラメータすべてを取得できます。 Element.Para...

Sample1

    public void Sample1()
    {
      UIApplication uiapp = this.ActiveUIDocument.Application;
      UIDocument uidoc = uiapp.ActiveUIDocument;
      Autodesk.Revit.ApplicationServices.Application app =
        uiapp.Application as Autodesk.Revit.ApplicationServices.Application;
      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;
        }
        
        Definition definition = parameter.Definition;
        InternalDefinition internalDefinition = definition as InternalDefinition;
        result += internalDefinition.BuiltInParameter + "■" + parameter.Definition.Name + "■" + parameter.StorageType + "■" + parameterValue + "\n";
      }
      
      TaskDialog.Show("Message", result);
    }

Parameter.StorageTypeの解説

パラメータの取得

Sample1のうちパラメータを取得しているのは下記のコードです。

【パラメータの取得】

      Reference reference = uidoc.Selection.PickObject(ObjectType.Element);
      Element element = doc.GetElement(reference);
      ParameterSet parameterSet = element.Parameters;

Selectionクラスで選択した要素にParametersメソッドを適用し、この戻り値をParameterSetクラスの変数parameterSetに代入しています。

StorageTypeによる仕分け

parameterSetforeach文でループさせる中で、それぞれのParameterが持つ値の型を探っています。

手法としてはswitch文でparameter.StorageTypeによってソートしています。

【StorageTypeによる仕分け】

        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;
        }

Parameter.StorageTypeの戻り値はStorageType列挙型になります。この列挙子には下表のものがあります

StorageTypeの列挙子

列挙子 解説
None 無効なStorageType
Integer StorageTypeが整数型
Double StorageTypeが浮動小数点数型
String StorageTypeが文字列
ElementId StorageTypeがElementId

上記コーディングのように、StorageType.Stringの時はAsStringメソッドで値を取得でき、それ以外はAsValueStringメソッドを使います。

*正しくはAsDoubleAsIntegerAsElementIdそれぞれメソッドがあります。一番簡単な手法を示しました。

Parameter.StorageTypeまとめ

以上、Parameter.StorageTypeでパラメータの型を仕分けた上で、正しく値を取得する手法を示しました。

持っている型によって適用するメソッドが異なるのがややこしいですね。

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

 

C#独学本はこちら
コーディング学習はこちらの本がお勧めです

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください