FamilySymbol クラスはファミリ内の単一のタイプを表します。
各ファミリは 1 つまたは複数のファミリ記号を持つことができます。各 FamilyInstance は関連付けられた FamilySymbol を持ち、Symbol プロパティからアクセスできます。
ファミリの特定のタイプ(ドア、窓、カーテンウォール パネル)は、下の窓のタイプ プロパティ ウィンドウに示されるように、断熱材プロパティを持ちます。
FamilySymbol の断熱材プロパティは FamilyThermalProperties クラスによって表され、FamilySymbol.GetThermalProperties()メソッドを使用して取得されます。FamilySymbol の FamilyThermalProperties は SetThermalProperties()を使用して設定することができます。FamilyThermalProperties クラスのプロパティ自身は読み込み専用です。
計算された値の単位は下の表のとおりです。
|
プロパティ |
単位 |
|
HeatTransferCoefficient |
ワット/平方メートル ケルビン (W/(m^2*K)) |
|
ThermalResistance |
平方メートル ケルビン/ワット ((m^2*K)/Watt) |
AnalyticConstructionTypeId プロパティは、建設 gbXML タイプであり、Constructions.xml の constructionType ノードの「ID」プロパティに対応する値を返します。静的 FamilyThermalProperties.Find()メソッドは、Constructions.xml の constructionType ノードの「ID」プロパティで FamilyThermalProperties を検索します。
FamilySymbol のパラメータのいくつかは FamilyType パラメータです。これらのパラメータでは、Family.GetFamilyTypeParameterValues()メソッドを使用することで、パラメータに適用できる値をすべて取得できます。返される値はすべてのファミリ タイプの ElementIds であり、パラメータの設定で指定されているカテゴリに一致します。この要素はクラス ElementType または NestedFamilyTypeReference のいずれかになります。2 番目のバリアントはファミリにネストされたタイプのものであるため、それ以外の方法ではアクセスできません。NestedFamilyTypeReference 要素はネストされた FamilyType に関する基本的な情報(Type の名前、Family の名前、Category など)のみを格納します。これらの要素は非常に低いレベルのものであるため、標準的な要素フィルタでは無視されてしまいます。したがって、これらの要素を取得するには、主に Family.GetFamilyTypeParameterValues()メソッドを使用します。
次の例は、FamilySymbol の FamilyType パラメータのすべてのファミリ タイプ パラメータ値を取得する方法を示します。その後、パラメータの値が別の値に変更されます。この変更はロードした FamilySymbol を使用するすべての FamilyInstances に影響します。
|
コード領域: ネストされた FamilyTypes を取得 |
public void GetNestedFamilyTypes(FamilyInstance instance)
{
// find one FamilyType parameter and all values applicable to it
Parameter aTypeParam = null;
ISet<ElementId> values = null;
Family family = instance.Symbol.Family;
foreach (Parameter param in instance.Symbol.Parameters)
{
if (param.Definition.ParameterType == ParameterType.FamilyType)
{
aTypeParam = param;
values = family.GetFamilyTypeParameterValues(param.Id);
break;
}
}
if (aTypeParam == null)
{
TaskDialog.Show("Warning", "The selected family has no FamilyType parameter defined.");
}
else if (values == null)
{
TaskDialog.Show("Error", "A FamilyType parameter does not have any applicable values!?");
}
else
{
ElementId newValue = values.Last<ElementId>();
if (newValue != aTypeParam.AsElementId())
{
using (Transaction trans = new Transaction(instance.Document, "Setting parameter value"))
{
trans.Start();
aTypeParam.Set(newValue);
trans.Commit();
}
}
}
}
|