ParameterElements は特定のユーザ設定パラメータに関する情報をドキュメント内に格納します
ユーザ設定パラメータはドキュメントに格納され、ParameterElement クラスによって表されます。サブクラス 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;
}
}
}
|