Revit の FamilyInstance オブジェクトのカテゴリの例としては、梁、ブレース、柱、家具、マスなどがあります。FamilyInstance オブジェクトには詳細なプロパティが用意されており、プロジェクトのファミリ インスタンスのタイプや外観を変更できます。
位置に関するプロパティは、方向、回転、位置など、FamilyInstance オブジェクトの物理とジオメトリの特性を表します。
一部の FamilyInstance オブジェクトでは面の方向や手の方向を変更することができます。たとえば、ドアを部屋や壁の外側または内側に向けたり、取っ手を左側または右側に配置することができます。次の表は、ドア、窓、机ファミリ インスタンスの比較です。
表 29: ファミリ インスタンスを比較
ブール値プロパティ |
ドア |
窓(Fixed: 36"w × 72"h) |
机 |
CanFlipFacing |
True |
True |
False |
CanFlipHand |
True |
False |
False |
CanFlipFacing または CanFlipHand が True に設定されていると、それぞれ flipFacing()メソッドまたは flipHand()メソッドを呼び出すことができます。これらのメソッドでは、それぞれ向きまたは手の方向を変更できます。True に設定されていない場合は、メソッドは何も実行せずに False を返します。
方向を変更する場合は、Casement 3x3 with Trim ファミリなどの一部の窓のタイプは手の方向と向きの両方を変更できます。
ドアの向きと手の方向には、4 つの異なる組み合わせがあります。組み合わせについては次の図を、対応するブール値については次の表を参照してください。
図 44: 向きと手の方向が異なるドア
表 30: 同じタイプの異なるインスタンス
ブール値プロパティ |
ドア 1 |
ドア 2 |
ドア 3 |
ドア 4 |
FacingFlipped |
False |
True |
False |
True |
HandFlipped |
False |
True |
True |
False |
Mirrored プロパティは FamilyInstance オブジェクトが鏡像化されているかどうかを表します。
表 31: ドアの Mirrored プロパティ
ブール値プロパティ |
ドア 1 |
ドア 2 |
ドア 3 |
ドア 4 |
Mirrored |
False |
False |
True |
True |
前のドアの例では、ドア 1 とドア 2 の Mirrored プロパティが False、ドア 3 とドア 4 が True になっています。これは、Revit プロジェクトでドアを作成する場合に、既定の結果がドア 1 またはドア 2 になるためです。ドア 3 またはドア 4 のようなドアを作成するには、ドア 1 とドア 2 の手の方向をそれぞれ反転する必要があります。反転操作は鏡像化変換と同様の操作であり、そのためにドア 3 とドア 4 の Mirrored プロパティが True になります。
Revit での Mirror()メソッドの使用方法は、「要素を編集する」の章を参照してください。
ファミリ インスタンスのブール値 CanRotate プロパティを使用すると、ファミリ インスタンスを 180 度回転できるかどうかをテストできます。これは、インスタンスが属するファミリによって異なります。たとえば、次の図では窓 1 (Casement 3×3 with Trim: 36"×72")とドア 1 (Double-Glass 2: 72"×82")の CanRotate プロパティが True、窓 2 (Fixed: 36"w × 72"h)が False になっています。
図 45: rotate()後の変更
CanRotate が True の場合は、ファミリ インスタンスの rotate()メソッドを呼び出すことができます。このメソッドはファミリ インスタンスを 180 度反転させます。それ以外の場合は、このメソッドは何も行わず False を返します。前の図には、rotate()メソッドを実行した後の窓 1 とドア 1 の状態も表示されています。
このドキュメントの最初にあった「要素を回転する」セクションにあったように、ファミリ インスタンス(とその他の要素)は ElementTransformUtils.RotateElement()と ElementTransformUtils.RotateElements()を使用してユーザが指定した角度だけ回転させることができます。
Location プロパティは、プロジェクト内のインスタンスの物理的な場所を決めます。インスタンスは、点の場所や線分の場所を指定することができます。
次の特性が場所に適用されます。
点の場所は LocationPoint クラス オブジェクトであり、基礎、ドア、テーブルに点の場所を設定できます。
線分の場所は LocationCurve クラス オブジェクトであり、梁が線の場所を持ちます。
これらはともに Location クラスのサブクラスです。
Location の詳細については、「要素を編集する」を参照してください。
Host と HostFace はともに FamilyInstance プロパティです。
FamilyInstance オブジェクトには、そのホスト要素を返す Host 要素があります。
テーブルやその他の家具などの一部の FamilyInstance オブジェクトはホスト要素を持ちません。そのため、ホスト要素は作成されず、Host プロパティは何も返しません。ただし、ドアや窓などのその他のオブジェクトにはホスト要素が必要です。この場合、Host プロパティは窓やドアが配置されている壁要素を返します。次の図を参照してください。
図 46: 壁にホストされるドアと窓
HostFace
FamilyInstance.GetSubComponentIds()メソッドは、ファミリにロードされているファミリ インスタンスの ElementIds を返します。「Table-Dining Round w Chairs.rfa」のインスタンスをプロジェクトに配置すると、GetSubComponentIds()メソッドが椅子のセットの ElementIds を返します。
SuperComponent プロパティは、ファミリ インスタンスの親コンポーネントを返します。「Table-Dining Round w Chairs.rfa」では、ネストされた各椅子のファミリ インスタンスの Supercomponent は「Table-Dining Round w Chairs.rfa」のインスタンスになります。
コード領域 12-1: FamilyInstance から SubComponents と SuperComponent を取得 |
public void GetSubAndSuperComponents(FamilyInstance familyInstance) { ICollection<ElementId> subElemSet = familyInstance.GetSubComponentIds(); if (subElemSet != null) { string subElems = ""; foreach (Autodesk.Revit.DB.ElementId ee in subElemSet) { FamilyInstance f = familyInstance.Document.GetElement(ee) as FamilyInstance; subElems = subElems + f.Name + "\n"; } TaskDialog.Show("Revit","Subcomponent count = " + subElemSet.Count + "\n" + subElems); } FamilyInstance super = familyInstance.SuperComponent as FamilyInstance; if (super != null) { TaskDialog.Show("Revit","SUPER component: " + super.Name); } } |
このセクションのプロパティは Revit Architecture と Revit Structure に固有のものです。これらはそれぞれの章で詳細に取り扱います。
FamilyInstance プロパティには Room、FromRoom、ToRoom があります。Room の詳細は、「Revit Architecture」を参照してください。
FamilyInstance には、MEP のインスタンスを保持するスペースを特定するための Space プロパティがあります。
GetAnalyticalModel()メソッドはファミリ インスタンスの構造解析モデルを取得します。
AnalyticalModel の詳細は、「Revit Structure」を参照してください。
通常、FamilyInstance オブジェクトは、NewFamilyInstance()と呼ばれる Autodesk.Revit.Creation.Document の 12 のオーバーロード メソッドの 1 つを使用して作成します。使用するオーバーロードは、インスタンスのカテゴリだけでなく、ホストされるかどうか、参照レベルを基準にして配置されるかどうか、特定の面に直接配置するかどうかといった、配置のその他の特性によっても異なります。詳細については、下の「表 32 - NewFamilyInstance()を使用してインスタンスを作成するためのオプション」を参照してください。
一部の FamilyInstance オブジェクトでは複数の場所を作成する必要があります。このような場合、このオブジェクトが提供する、より詳細な作成メソッドを使用することをお勧めします(下の「表 33 - その他のメソッドを使用してインスタンスを作成するためのオプション」を参照してください)。インスタンスが作成されない場合、例外が発生します。メソッドを呼び出す前に、使用されるタイプ/記号をプロジェクトにロードする必要があります。
表 32 - NewFamilyInstance()を使用してインスタンスを作成するためのオプション
カテゴリ | NewFamilyInstance()パラメータ | コメント |
---|---|---|
エア ターミナル 境界条件 収納設備 通信装置 データ装置 電気設備 電気器具 周辺環境 火災報知装置 家具 家具システム 一般モデル 照明装置 照明器具 マス 機械設備 ナース コール装置 駐車場 植栽 衛生器具 警備装置 外構 特殊設備 スプリンクラ 構造接合 構造基礎 構造スチフナ 電話装置 |
XYZ, FamilySymbol, StructuralType | レベルやホスト要素への参照なしに、任意の場所にインスタンスを作成します。 |
XYZ, FamilySymbol, Element, StructuralType | 壁、床、天井にホストされる場合 | |
XYZ, FamilySymbol, XYZ, Element, StructuralType | 壁、床、天井にホストされ、既定以外の方向に設定する必要がある場合 | |
XYZ, FamilySymbol, Element, Level, StructuralType | 壁、床、天井にホストされ、参照レベルに関連付けられている場合 | |
XYZ, FamilySymbol, Level, StructuralType | 参照レベルに関連付けられている場合 | |
Face, XYZ, XYZ, FamilySymbol | 面ベースであり、既定以外の方向に設定する必要がある場合 | |
Reference, XYZ, XYZ, FamilySymbol | 面ベースであり、既定以外の方向に設定する必要があり、面ではなく面への参照を受け入れる場合 | |
Face, Line, FamilySymbol | 面ベースであり、直線である場合 | |
Reference, Line, FamilySymbol | 面ベースであり、直線であるが、面ではなく面への参照を受け入れる場合 | |
柱 構造柱 |
XYZ, FamilySymbol, Level, StructuralType | 基部が参照レベルに配置されるように柱を作成します。柱はモデル内の次に使用可能なレベルまで延長するか、参照レベルの上に適したレベルがない場合は既定の柱の高さまで延長します。 |
ドア 窓 |
XYZ, FamilySymbol, Element, StructuralType | ドアと窓は壁でホストする必要があります。既定の方向に配置できる場合にこのメソッドを使用します。 |
XYZ, FamilySymbol, XYZ, Element, StructuralType | 作成したインスタンスを既定以外の方向に設定する必要がある場合 | |
XYZ, FamilySymbol, Element, Level, StructuralType | インスタンスを参照レベルに関連付ける必要がある場合 | |
構造フレーム(梁、ブレース) | Curve, FamilySymbol, Level, StructuralType | 曲線を指定してレベル ベースのブレースや梁を作成。これは、梁やブレースの作成に推奨されるメソッドです。 |
XYZ, FamilySymbol, StructuralType | 任意の場所にインスタンスを作成1 | |
XYZ, FamilySymbol, Element, Level, StructuralType | 要素(床など)にホストされ、参照レベルに関連付けられる場合1 | |
XYZ, FamilySymbol, Level, StructuralType | 参照レベルに関連付けられる場合1 | |
XYZ, FamilySymbol, Element, StructuralType | 要素(床など)にホストされる場合1 | |
詳細コンポーネント | Line, FamilySymbol, View | 2D ファミリ線分ベースの詳細記号にのみ適用 |
一般注釈 | XYZ, FamilySymbol, View | 2D ファミリ記号にのみ適用 |
1 作成後、構造インスタンスの長さは 0 になります。LocationCurve.Curve プロパティを使用して曲線(LocationCurve として FamilyInstance.Location)を設定することで拡張します。
Document.NewFamilyInstances()を使用して一度に複数のファミリ インスタンスを作成することで、コードを簡略化してパフォーマンスを向上させることができます。このメソッドは単一のパラメータを持ち、そのパラメータは作成するファミリ インスタンスを記述する FamilyInstanceCreationData オブジェクトのリストになります。
コード領域 12-2: ファミリ インスタンスを一括作成 |
ICollection<ElementId> BatchCreateColumns(Autodesk.Revit.DB.Document document, Level level) { List<FamilyInstanceCreationData> fiCreationDatas = new List<FamilyInstanceCreationData>(); ICollection<ElementId> elementSet = null; //Try to get a FamilySymbol FamilySymbol familySymbol = null; FilteredElementCollector collector = new FilteredElementCollector(document); ICollection<Element> collection = collector.OfClass(typeof(FamilySymbol)).ToElements(); foreach (Element e in collection) { familySymbol = e as FamilySymbol; if (null != familySymbol.Category) { if ("Structural Columns" == familySymbol.Category.Name) { break; } } } if (null != familySymbol) { //Create 10 FamilyInstanceCreationData items for batch creation for (int i = 1; i < 11; i++) { XYZ location = new XYZ(i * 10, 100, 0); FamilyInstanceCreationData fiCreationData = new FamilyInstanceCreationData(location, familySymbol, level, StructuralType.Column); if (null != fiCreationData) { fiCreationDatas.Add(fiCreationData); } } if (fiCreationDatas.Count > 0) { // Create Columns elementSet = document.Create.NewFamilyInstances2(fiCreationDatas); } else { throw new Exception("Batch creation failed."); } } else { throw new Exception("No column types found."); } return elementSet; } |
一部のファミリ タイプのインスタンスの作成には、Autodesk.Revit.Creation.Document.NewFamilyInstance()以外のメソッドが適しています。次の表にはそれらのメソッドが一覧表示されています。
表 33 - その他のメソッドを使用してインスタンスを作成するためのオプション
カテゴリ |
作成メソッド |
コメント |
エア ターミナル タグ 面荷重タグ エリア タグ 収納設備タグ 天井タグ 通信装置タグ カーテン パネル タグ データ装置タグ 詳細項目タグ ドア タグ ダクト付属品タグ ダクト継手タグ ダクト タグ 電気設備タグ 電気器具タグ 火災報知装置タグ フレキシブル ダクト タグ フレキシブル配管タグ 床タグ 家具システム タグ 家具タグ 一般モデル タグ 内部面荷重タグ 内部線荷重タグ 内部点荷重タグ キーノート タグ 照明装置タグ 照明器具タグ 線荷重タグ マス床タグ マス タグ 機械設備タグ ナース コール装置タグ 駐車場タグ 配管付属品タグ 配管継手タグ 配管タグ 植栽タグ 衛生器具タグ 点荷重タグ 敷地境界線セグメント タグ プロパティ タグ 手すりタグ 改訂雲マーク タグ 屋根タグ 部屋タグ 警備装置タグ 外構タグ スペース タグ 特殊設備タグ スプリンクラ タグ 階段タグ 構造壁/床配筋タグ 構造梁システム タグ 構造柱タグ 構造接合部タグ 構造基礎タグ 構造フレーム タグ 構造パス配筋タグ 構造鉄筋タグ 構造スチフナ タグ 構造トラス タグ 電話装置タグ 壁タグ 窓タグ 配線タグ ゾーン タグ |
NewTag(View, Element, Boolean, TagMode, TagOrientation, XYZ) |
TagMode を TM_ADDBY_CATEGORY にして、タグを作成しようとするときには関連するタグ ファミリがロードされている必要があります。それ以外の場合、例外が発生します |
マテリアル タグ |
NewTag(View, Element, Boolean, TagMode, TagOrientation, XYZ) |
TagMode を TM_ADDBY_MATERIAL にして、マテリアル タグ ファミリがロードされている必要があります。それ以外の場合、例外が発生します |
マルチカテゴリ タグ |
NewTag(View, Element, Boolean, TagMode, TagOrientation, XYZ) |
TagMode を TM_ADDBY_MULTICATEGORY にして、マルチカテゴリ タグ ファミリがロードされている必要があります。それ以外の場合、例外が発生します |
図面枠 |
ViewSheet.Create(Document, ElementId) |
新しく作成されたシートに図面枠が追加されます。 |
ファミリとファミリ記号は、Document.LoadFamily()と Document.LoadFamilySymbol()メソッドを使用してロードされます。梁などの一部のファミリは複数の端点を持ち、単一の点インスタンスと同じ方法で挿入されます。線ファミリ インスタンスを挿入すると、その端点は Element.Location プロパティを使用して変更することができます。詳細は、「コード サンプル」を参照してください。