ファミリ オブジェクトは Revit ファミリ全体を表します。ファミリ ドキュメントは Revit プロジェクトではなく、ファミリを表すドキュメントです。
Revit API のファミリ作成機能を使用すると、ファミリやそのタイプを作成、編集できます。この機能は、外部システムに利用可能な既存のデータがあり、それを Revit ファミリ ライブラリに変換する場合に特に便利です。
システム ファミリの編集には API アクセスできません。
前のセクションで説明したように、Family.FamilyCategory プロパティは、柱、家具、構造フレーム、窓などのファミリのカテゴリを表します。
次のコードを使用すると、開いている Revit ファミリ ドキュメント内のファミリのカテゴリを特定することができます。
コード領域 13-1: 開いている Revit ファミリ ドキュメントのカテゴリ |
string categoryName = familyDoc.OwnerFamily.FamilyCategory.Name; |
次の例に示すように、ファミリ ドキュメントの 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); } } } |