ParameterElement

ParameterElements は特定のユーザ設定パラメータに関する情報をドキュメント内に格納します

ユーザ設定パラメータはドキュメントに格納され、ParameterElement クラスによって表されます。サブクラス SharedParameterElement はドキュメントにロードされた共有パラメータを表します。

SharedParameterElement

共有パラメータがドキュメントにロードされたら、SharedParameterElement クラスを使用して関連情報を取得できます。SharedParameterElement は親クラスの ParameterElement から GetDefinition()メソッドを継承します。GetDefinition()は、ドキュメント内のパラメータの設定を表す InternalDefinition を返しますが、これに対して、ExternalDefinition は、共有パラメータ ファイルに格納されている共有パラメータの設定を表します。 さらに、SharedParameterElement では GuidValue プロパティを使用することで、共有パラメータを特定する GUID を取得できます。

このクラスの静的 Create()メソッドを使用すると、ExternalDefinition からドキュメント内に新しい SharedParameterElement を作成できます。

静的 Lookup()メソッドでは特定の GUID から SharedParameterElement を取得できます。

次の例では、集計表に共有パラメータの値を表すフィールドが含まれています。共有パラメータの設定は SharedParameterElement から取得されます。

コード領域: 共有パラメータの設定を取得

// Check if a given shared parameter in a schedule can vary across groups
public bool CanParamVaryAcrossGroups(ViewSchedule schedule, string sharedParamName)
{
    bool variesAcrossGroups = false;

    int numFields =  schedule.Definition.GetFieldCount();
    // Find the field with the given name
    for (int i = 0; i < numFields; i++)
	   {
		      ScheduleField field = schedule.Definition.GetField(i);
        if (field.GetName().Contains(sharedParamName))
        {
            // Get the SharedParameterElement from the field's parameter id
            SharedParameterElement spe = schedule.Document.GetElement(field.ParameterId) as SharedParameterElement;
            if (spe != null)
            {
                InternalDefinition definition = spe.GetDefinition();
                variesAcrossGroups = definition.VariesAcrossGroups;
            }
        }
	   }

    return variesAcrossGroups;
}

RebarContainers で作業する場合は、SharedParameterElements が大変便利です。共有パラメータは、RebarContainer のパラメータ マネージャに優先設定として追加できます。優先設定として追加する場合は、共有パラメータをカテゴリにバインドする必要はありません。次の例では、特定の共有パラメータを優先設定として RebarContainer に追加しています。

コード領域: SharedParameterElement を RebarContainer の優先設定として使用

// Find the named shared parameter and add it as an override to the parameter manger for the given RebarContainer
void AddSharedParameterOverride(RebarContainer container, string sharedParamName)
{
    // find the shared parameter guid
    FilteredElementCollector collector = new FilteredElementCollector(container.Document);
    collector.OfClass(typeof(SharedParameterElement));
    IEnumerable<SharedParameterElement> paramCollector = collector.Cast<SharedParameterElement>();

    foreach (SharedParameterElement spe in paramCollector)
    {
        if (spe.Name.CompareTo(sharedParamName) == 0)
        {
            RebarContainerParameterManager paramManager = container.GetParametersManager();
            paramManager.AddSharedParameterAsOverride(spe.Id);
            break;
        }
    }
}