ファミリ ドキュメントについて

ファミリ ドキュメントについて

ファミリ

ファミリ オブジェクトは Revit ファミリ全体を表します。ファミリ ドキュメントは Revit プロジェクトではなく、ファミリを表すドキュメントです。

Revit API のファミリ作成機能を使用すると、ファミリやそのタイプを作成、編集できます。この機能は、外部システムに利用可能な既存のデータがあり、それを Revit ファミリ ライブラリに変換する場合に特に便利です。

システム ファミリの編集には API アクセスできません。

カテゴリ

前のセクションで説明したように、Family.FamilyCategory プロパティは、柱、家具、構造フレーム、窓などのファミリのカテゴリを表します。

次のコードを使用すると、開いている Revit ファミリ ドキュメント内のファミリのカテゴリを特定することができます。

コード領域 13-1: 開いている Revit ファミリ ドキュメントのカテゴリ

string categoryName = familyDoc.OwnerFamily.FamilyCategory.Name;
FamilyCategory も設定でき、編集対象のファミリのカテゴリを変更することができます。

パラメータ

次の例に示すように、ファミリ ドキュメントの OwnerFamily プロパティからファミリ パラメータにアクセスできます。

コード領域 13-2: 開いている Revit ファミリ ドキュメントのカテゴリ

// get the owner family of the family document.
Family family = familyDoc.OwnerFamily; 
Parameter param = family.get_Parameter(BuiltInParameter.FAMILY_WORK_PLANE_BASED);
// this param is a Yes/No parameter in UI, but an integer value in API
// 1 for true and 0 for false
int isTrue = param.AsInteger(); 
// param.Set(1); // set value to true.

ファミリ ドキュメントを作成する

IsFamilyDocument プロパティに定義されているように、ドキュメントがファミリ ドキュメントの場合、Revit ファミリ ドキュメントを修正する機能やファミリ タイプとパラメータにアクセスする機能は、Document クラスから使用できます。プロジェクト ドキュメントでの作業中に既存のファミリを編集するには、Document クラスから使用できる EditFamily()関数を使用します。その後、編集が終わったら LoadFamily()を使用してオーナ ドキュメントにファミリを再ロードします。新しいファミリ ドキュメントを作成するには、次のように Application.NewFamilyDocument()を使用します。

コード領域 13-3: 新しいファミリ ドキュメントを作成

// create a new family document using Generic Model.rft template
string templateFileName = @"C:\Documents and Settings\All Users\Application Data\Autodesk\RST 2011\Imperial Templates\Generic Model.rft";

Document familyDocument = application.NewFamilyDocument(templateFileName);
if (null == familyDocument)
{
        throw new Exception("Cannot open family document");
}

ネストされたファミリ シンボル

ファミリ ドキュメントを FamilySymbols でフィルタすると、ファミリにロードされているすべての FamilySymbols を取得することができます。このコード サンプルでは、指定された FamilyInstance のファミリ内にネストされたすべての FamilySymbols を一覧表示します。

コード領域 13-4: ファミリ内にネストされたファミリ シンボルを取得

public void GetLoadedSymbols(Autodesk.Revit.DB.Document document, FamilyInstance familyInstance)
{
        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 && familyDoc.IsFamilyDocument == true)
                {
                        String loadedFamilies = "FamilySymbols in " + family.Name + ":\n";
                        FilteredElementCollector collector = new FilteredElementCollector(document);
                        ICollection<Element> collection = 
                                collector.OfClass(typeof(FamilySymbol)).ToElements();
                        foreach (Element e in collection)
                        {
                                FamilySymbol fs = e as FamilySymbol;
                                loadedFamilies += "\t" + fs.Name + "\n";
                        }

                        TaskDialog.Show("Revit",loadedFamilies);
                }
        }
}