GlobalParameter の基本

GlobalParameter クラスは、プロジェクト ドキュメント内のグローバル パラメータを表しており、グローバル パラメータの作成と修正に使用されます。

グローバル パラメータを作成する

グローバル パラメータは、プロジェクト ドキュメント内でのみ作成できます。ファミリ内で作成することはできません。グローバル パラメータは、静的な Create() メソッドを使用することで、任意の名前と ParameterType を指定して任意のドキュメント内に作成できます。それぞれの新しいパラメータには、静的な GlobalParametersManager.IsUniqueName() メソッドを使用して、ドキュメント内でユニークな名前を指定する必要があります。グローバル パラメータの作成にはほとんどのデータ タイプを使用できますが、ElementId タイプなどの一部のタイプは現在サポートされていません。特定のデータ タイプがグローバル パラメータに適しているかどうかを検証するには、静的な GlobalParameter.IsValidDataType() メソッドを使用します。

パラメータは、最初は非レポート パラメータとして作成されます。ただし、グローバル パラメータのタイプがレポート パラメータに適合している場合は、作成後に IsReporting プロパティを使用して変更することができます。詳細については、「レポート パラメータと非レポート パラメータ」のページを参照してください。

コード領域: 新しいグローバル パラメータを作成

/// <summary>
/// Creates a new Global Parameter of type Length, assigns it an initial value,
/// and uses it to label a set of input dimension elements.
/// </summary>
/// <param name="document">Revit project document in which to create the parameter.</param>
/// <param name="name">Name of the global parameter to create.</param>
/// <param name="value">A value the new global parameter is to have.</param>
/// <param name="dimensionsToLabel">A set of dimension to labe by the new global parameter.</param>
/// <returns>ElementId of the new GlobalParameter</returns>
public ElementId CreateNewGlobalParameter(Document document, String name, double value, ISet<ElementId> dimensionsToLabel)
{
    if (!GlobalParametersManager.AreGlobalParametersAllowed(document))
        throw new System.InvalidOperationException("Global parameters are not permitted in the given document");

    if (!GlobalParametersManager.IsUniqueName(document, name))
        throw new System.ArgumentException("Global parameter with such name already exists in the document", "name");

    ElementId gpid = ElementId.InvalidElementId;

    // creation of any element must be in a transaction
    using (Transaction trans = new Transaction(document, "Create Global Parameter"))
    {
        trans.Start();

        // create a GP with the given name and type Length
        GlobalParameter gp = GlobalParameter.Create(document, name, ParameterType.Length);
        if (gp != null)
        {
            // if created successfully, assign it a value
            // note: parameters of type Length accept Double values
            gp.SetValue(new DoubleParameterValue(value));

            // if a collection of dimensions was given, label them with this new parameter
            foreach (ElementId elemid in dimensionsToLabel)
            {
                // not just any dimension is allowed to be labeled
                // check first to avoid exceptions
                if (gp.CanLabelDimension(elemid))
                {
                    gp.LabelDimension(elemid);
                }
            }

            gpid = gp.Id;
        }
        trans.Commit();
    }

    return gpid;
}

グローバル パラメータの値を取得、設定する

すべてのグローバル パラメータは、計算式駆動型、寸法駆動型、独立型のいずれであるかを問わず、必ず値を持っています。値を取得するには GetValue() メソッドを呼び出します。このメソッドで返されるオブジェクトは、ParameterValue の派生クラスの 1 つに属するインスタンスです。

すべての派生クラスにはプロパティが 1 つだけ用意されています。これは Value プロパティで、値を対応するタイプとして取得または設定します。

実際のインスタンスは、作成時に指定したグローバル パラメータのタイプによって決定されます。計算式型パラメータでも寸法駆動型パラメータ(レポート パラメータ)でもないパラメータには、値を割り当てることができます。使用するメソッドは SetValue() です。これには、GetValue() で返されるのと同じ ParameterValue のタイプを使用することができます。ただし、使用される値のタイプは簡単に推測できます。Text パラメータに使用できるのは StringParameterValue に限られており、 Integer パラメータと YesNo パラメータに使用できるのは IntegerParameterValue に限られます。 そして他のすべてのパラメータに使用できるのは DoubleParameterValue に限られています。

グローバル パラメータから影響を受ける要素

グローバル パラメータを、他のグローバル パラメータや通常のファミリ インスタンス パラメータと関連づけることができます(後者は、グローバル パラメータを指定の式によって自らの値としてレポートすることができます)。パラメータ間の関係を特定するのに使用できるメソッドは 2 つあります。すなわち、GlobalParameter.GetAffectedGlobalParameters() と GlobalParameter.GetAffectedElements() です。前者は、それぞれの式で特定のグローバル パラメータを参照する他のすべてのグローバル パラメータを返します。後者のメソッドは、一部のパラメータがグローバル パラメータによって制御されているすべての要素のセットを返します。これら 2 つのメソッドを GlobalParameter.GetLabeledDimensions() と組み合わせて使用すると、モデル要素がグローバル パラメータを通じて相互にどのような関係にあるかを特定するのに役立ちます。

要素プロパティとグローバル パラメータ間の関係を調整するためのメソッドは、Parameter クラス内に存在します。