ファミリ オブジェクトは 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);
}
}
}
|