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

取得する

Parameterの値取得とStorageTypeの関係

Revitの開発を始めると必ず目にするのがParameterです。

Parameterは要素に付与された情報を指します。

たとえば壁の高さや材質などが該当します。

これらの情報は取得や変更が可能です。

その際に関係してくるのがStorageTypeです。

今回はParameterの基本からStorageTypeとの関係、さらに実践的なコード例まで解説します。

初心者の方でも理解できるよう丁寧に進めます!

Parameterとは何か

ParameterはRevitの要素に付属するプロパティです。

名前やタイプ、高さ、材料など多くの情報が含まれます。

RevitAPIではParameterクラスとして扱われます。

Parameterは以下のように取得できます。

Parameter param = element.LookupParameter("高さ");

 

上記のようにLookupParameter()を使用して、名前を指定して取得するのができます。

取得したParameterから値を読み取ることで、要素の情報をプログラムから参照できます。

ElementからParameterを取得する方法RevitのElementから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を使えば目的の単位に変換できます。

これを行わないと正しい値が得られません。

【RevitAPI】UnitUtilsでフィートとミリメートルを変換Revitが内部で持っている長さの単位はフィートです。これをミリメートルに換算するには係数304.8を掛けたり割ったりする必要があります。ここでは係数を使わず簡単に単位換算する手法を解説します。...

よくあるエラーとその原因

よくあるエラーが型の不一致です。

たとえば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);
  }
}
※上記コードをThisApplication.csにコピペでそのまま使えます。

 

このコードは要素の全Parameterの名前と値を表示します。

まとめ:Parameterの値取得とStorageTypeの関係

Parameterの値を正しく取得するにはStorageTypeの理解が欠かせません。

StorageTypeごとの特徴を知って適切なメソッドを使いましょう。

単位の変換やnullチェックも重要なポイントです。

今回の記事がRevit開発の第一歩になれば幸いです。

RevitAPI独学用教材

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

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

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

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

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

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

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

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

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



Revitアドイン作ります

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

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

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

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

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

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

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

以上です。