Parameter クラスには指定されたパラメータの値が含まれます。
Parameter は Autdoesk Revit 内のすべての Elements に備わっており、セットとして取得することも個別に取得することもできます。BuiltInParameter 列挙、Definition オブジェクト、Shared Parameter GUID のいずれかを使用すると、どんな Element からでも個別のパラメータ オブジェクトを取得することができます。
パラメータに含まれるデータは、Double、Integer、String、ElementId のいずれかになります。パラメータの StorageType プロパティで確認できます。値のタイプについては、パラメータの値に使用される表示単位を DisplayUnitType プロパティで確認することができます。Parameter オブジェクトには、パラメータのデータ タイプ、名前、その他の詳細を示す Definition オブジェクトも含まれています。
StorageType は、内部に格納されたパラメータ値のタイプについて説明します。
プロパティ値に基づいて、対応する get メソッドおよび set メソッドを使用して、パラメータ データ値を取得、設定します。
StorageType はRevit によってサポートされるすべての内部パラメータのデータ ストレージのタイプを一覧表示する列挙型です。
|
メンバー名 |
説明 |
|
String |
内部データは文字列として格納されます。 |
|
ElementId |
データ タイプは要素を表し、要素 ID として格納されます。 |
|
Double |
データは、8 バイトの浮動小数点数として内部に格納されます。 |
|
Integer |
内部データは、符号付きの 32 ビットの整数として格納されます。 |
|
None |
None は無効なストレージのタイプを表します。内部での使用目的のみ。 |
ほとんどの場合、ElementId 値は正の数です。ただし、負の数になる場合もあります。ElementId 値が負である場合、要素を表しませんが、別の意味があります。たとえば、梁の[垂直投影]のストレージのタイプ パラメータは ElementId です。パラメータ値がレベル 1 またはレベル 2 である場合、ElementId 値は正の値であり、そのレベルの ElementId に対応しています。ただし、パラメータ値が[自動検出]、[梁の中心]または[梁上部]に設定されている場合は、ElementId は負の値です。
次のコード サンプルでは、StorageType に基づいてパラメータの値が Double 値に設定できるかどうかを確認する方法を示します。
|
コード領域: パラメータの StorageType を確認 |
public bool SetParameter(Parameter parameter, double value)
{
bool result = false;
//if the parameter is readonly, you can't change the value of it
if (null != parameter && !parameter.IsReadOnly)
{
StorageType parameterType = parameter.StorageType;
if (StorageType.Double != parameterType)
{
throw new Exception("The storagetypes of value and parameter are different!");
}
//If successful, the result is true
result = parameter.Set(value);
}
return result;
}
|
Set()メソッドの戻り値は、Parameter 値が変更されたことを示しています。Set()メソッドは、Parameter 値が変更された場合は true を、そうでない場合は false を返します。
すべての Parameter が書き出し可能なわけではありません。Parameter が読み取り専用の場合は例外がスローされます。
これらの 2 つの Parameter クラス メソッドは、値タイプのパラメータ(計測された数量を表す倍精度パラメータか整数パラメータ)にのみ適用されます。
パラメータ値を計測単位の付いた文字列として取得するには、AsValueString()メソッドを使用します。たとえば、ベース オフセット値、壁パラメータは倍精度値です。通常、[要素プロパティ]では値は -20'0" のような文字列として表示されます。AsValueString()メソッドを使用すると、文字列値 -20'0" を直接取得します。AsDouble()メソッドを使用すると、-20 などの倍精度値を計測単位なしで取得します。
値タイプ パラメータの値を変更するには、Set()メソッドの代わりにSetValueString()メソッドを使用します。次のコード例は、SetValueString()メソッドを使用してパラメータ値を変更する方法を説明しています。
|
コード領域: Parameter.SetValueString() を使用 |
public bool SetWithValueString(Parameter foundParameter)
{
bool result = false;
if (!foundParameter.IsReadOnly)
{
//If successful, the result is true
result = foundParameter.SetValueString("-22\'3\"");
}
return result;
}
|
Parameter クラス内には、要素パラメータとグローバル パラメータ間の関係を調整するメソッドがいくつか存在します。GetAssociatedGlobalParameter() メソッドは、パラメータに関連付けられているグローバル パラメータが現在存在する場合、そのグローバル パラメータの ElementId を返します。パラメータがどのグローバル パラメータにも関連付けられていない場合、InvalidElementId が返されます。また、グローバル パラメータに関連付けることができないパラメータ(パラメータ化できないパラメータや、式をともなうパラメータ)が呼び出された場合も、InvalidElementId が返されます。
パラメータをグローバル パラメータに関連付けることができるかどうかを判断する方法は 2 つあります。Parameter.CanBeAssociatedWithGlobalParameters() は、パラメータを任意のグローバル パラメータに関連付けることができるかどうかを検証します。グローバル パラメータと関連付けることができるプロパティは、パラメータ化できるように定義されたプロパティに限られます。これには読み取り専用パラメータ、計算式型パラメータ、および Revit によって他の明示的制限または暗示的制限を課されているパラメータは含まれません。特定のパラメータに特定のグローバル パラメータを関連付けることができるかどうかを検証するには、Parameter.CanBeAssociatedWithGlobalParameter() を使用します。なお、パラメータの値のタイプは、関連付けるグローバル パラメータの値のタイプと一致する必要があることに留意してください。
グローバル パラメータと関連付けることができるパラメータは、AssociateWithGlobalParameter() を使用して関連付けを行います。関連付けを行った後にそのパラメータの関連付けを解除するには、DissociateFromGlobalParameter() メソッドを呼び出します。