ファミリ タイプとパラメータを管理する

ファミリ タイプとパラメータを管理する

ファミリ ドキュメントからは FamilyManager プロパティにアクセスできます。FamilyManager クラスからはファミリ タイプとパラメータにアクセスできます。このクラスを使用すると、タイプの追加と削除、ファミリと共有パラメータの追加と削除、異なるファミリ タイプのパラメータ値の設定、パラメータ値を決定するための式の定義といった操作が可能になります。

ファミリ内のタイプを取得する

次の例に示すように、FamilyManager を使用するとファミリ内のタイプに繰り返し処理を行うことができます。

コード領域 13-11: ファミリ内のタイプを取得

public void GetFamilyTypesInFamily(Document familyDoc)
{
        if (familyDoc.IsFamilyDocument == true)
        {
                FamilyManager familyManager = familyDoc.FamilyManager;

                // get types in family
                string types = "Family Types: ";
                FamilyTypeSet familyTypes = familyManager.Types;
                FamilyTypeSetIterator familyTypesItor = familyTypes.ForwardIterator();
                familyTypesItor.Reset();
                while (familyTypesItor.MoveNext())
                {
                        FamilyType familyType = familyTypesItor.Current as FamilyType;
                        types += "\n" + familyType.Name;
                }
                MessageBox.Show(types, "Revit");
        }
}

図 53: コンクリート-長方形-柱ファミリのファミリ タイプ

FamilyTypes を編集する

FamilyManager には、ファミリ内の既存のタイプに繰り返し処理を行い、タイプとそのパラメータを追加、修正する機能があります。

次の例は、新しいタイプを追加し、パラメータを設定して、FamilyInstance に新しいタイプを追加する方法を表しています。タイプの編集は Set()関数を使用して現在のタイプに対して実行します。現在のタイプは CurrentType プロパティから判断できます。CurrentType プロパティを使用して編集前に現在のタイプを設定することもできますし、NewType()関数を使用して新しいタイプを作成し、編集用に現在のタイプとして設定することもできます。

新しいタイプを作成して修正した後、新しいタイプを使用可能にするために、Document.LoadFamily()を使用してファミリを Revit プロジェクトにロードして戻します。

コード領域 13-12: ファミリ タイプを編集

public void EditFamilyTypes(Document document, FamilyInstance familyInstance)
{
        // example works best when familyInstance is a rectangular concrete element
        if (null != familyInstance.Symbol)
        {
                // Get family associated with this
                Family family = familyInstance.Symbol.Family;
                
                // Get Family document for family
                Document familyDoc = document.EditFamily(family);
                if (null != familyDoc)
                {
                        FamilyManager familyManager = familyDoc.FamilyManager;

                        // add a new type and edit its parameters
                        FamilyType newFamilyType = familyManager.NewType("2X2");
                        // look for 'b' and 'h' parameters and set them to 2 feet
                        FamilyParameter familyParam = familyManager.get_Parameter("b");
                        if (null != familyParam)
                        {
                        familyManager.Set(familyParam, 2.0);
                        }       
                        familyParam = familyManager.get_Parameter("h");
                        if (null != familyParam)
                        {
                                familyManager.Set(familyParam, 2.0);
                        } 

                        // now update the Revit project with Family which has a new type
                        family = familyDoc.LoadFamily(document);
                        // find the new type and assign it to FamilyInstance
                        FamilySymbolSetIterator symbolsItor = family.Symbols.ForwardIterator();
                        symbolsItor.Reset();
                        while (symbolsItor.MoveNext())
                        {
                                FamilySymbol familySymbol = symbolsItor.Current as FamilySymbol;
                                if (familySymbol.Name == "2X2")
                                {
                                familyInstance.Symbol = familySymbol;
                                break;
                                }
                        }
                }       
        }
}