その他の分類

その他の分類

要素は次のように分類することもできます。

分類間には何らかの関係があります。次に例を示します。

カテゴリ

Element.Category プロパティは要素が属するカテゴリまたはサブカテゴリを表します。これは、要素のタイプを識別するために使用されます。たとえば、壁に配置されているものはすべてカテゴリは壁であるとみなされます。他のカテゴリにはドアや部屋が含まれます。

カテゴリが、最も一般的なクラスです。Document.Settings.Categories プロパティは、ドキュメント内のすべてのカテゴリ オブジェクトが含まれるマップであり、次のように再分類されます。

  • モデル カテゴリ - モデル カテゴリには梁、柱、ドア、窓、壁などが含まれます。
  • 注釈カテゴリ。注釈カテゴリには寸法、グリッド、レベル、文字注記などがあります。

図 20: カテゴリ

注: カテゴリには次のガイドラインが適用されます。
  • 一般的には、カテゴリには次の規則が適用されます。
    • 各ファミリ オブジェクトはカテゴリに属します
    • マテリアルやビューなどの非ファミリ オブジェクトはカテゴリに属しません
    • ProjectInfo のような例外もあります。ProjectInfo はプロジェクト情報カテゴリに属します。
  • 要素とその対応する記号は、通常、同じカテゴリになります。たとえば、標準壁とその壁タイプ Generic - 8" はすべて壁カテゴリになります。
  • 同じタイプの要素が異なるカテゴリになる場合もあります。たとえば、SpotDimensions は SpotDimensionType ですが、2 つの異なるカテゴリ(指定点高さと指定点座標)に属することができます。
  • 類似性や建築上の理由から、異なる要素を同じカテゴリにすることもできます。ModelLine と DetailLine は線分カテゴリです。

ドキュメントの Setting クラスのカテゴリへのアクセスを取得するには(たとえば、新しいカテゴリ セットを挿入するため)、次のいずれかの方法を使用します。

  • ドキュメント プロパティからカテゴリを取得します。
  • BuiltInCategory 列挙型を使用して、カテゴリ マップから特定のカテゴリを簡単に取得します。

コード領域 5-1: ドキュメント設定からカテゴリを取得

// Get settings of current document
Settings documentSettings = document.Settings;

// Get all categories of current document
Categories groups = documentSettings.Categories;

// Show the number of all the categories to the user
String prompt = "Number of all categories in current Revit document:" + groups.Size; 

// get Floor category according to OST_Floors and show its name
Category floorCategory = groups.get_Item(BuiltInCategory.OST_Floors);
prompt += floorCategory.Name;

// Give the user some information
MessageBox.Show(prompt, "Revit", MessageBoxButtons.OK);

カテゴリは次のように使用されます。

  • カテゴリは要素を分類するために使用されます。要素カテゴリは特定の動作を定義します。たとえば、同じカテゴリのすべての要素は同じ集計表に含めることができます。
  • 要素にはそのカテゴリに基づくパラメータがあります。
  • カテゴリは Revit での表示やグラフィックスの外観をコントロールするためにも使用されます。

図 21: カテゴリによる表示

要素のカテゴリはカテゴリ ID によって決定されます。

  • カテゴリ ID は ElementId クラスによって表されます。
  • 読み込まれたカテゴリ ID はドキュメント内の要素に対応します。
  • ほとんどのカテゴリは組み込みであり、その ID は ElementIds に格納される定数になります。
  • 各組み込みカテゴリ ID は BuiltInCategory 列挙値に対応する値を持ちます。これらは、対応する BuiltInCategory 列挙型に変換することができます。
  • カテゴリが組み込まれていない場合、ID は null 値に変換されます。

コード領域 5-2: 要素のカテゴリを取得

Element selectedElement = null;
foreach (ElementId id in uidoc.Selection.GetElementIds())
{
    selectedElement = document.GetElement(id);
    break;  // just get one selected element
}

// Get the category instance from the Category property
Category category = selectedElement.Category;

BuiltInCategory enumCategory = (BuiltInCategory)category.Id.IntegerValue;
注: Category.Name を使用する際のグローバリゼーションの問題を回避するために、BuiltInCategory を使用することをお勧めします。Category.Name は言語によって異なる場合があります。

ファミリ

ファミリとは、カテゴリ内の要素のクラスです。ファミリは、次の基準により要素をグループ化することができます。

  • パラメータ(プロパティ)の共通のセット。
  • 同じ用途。
  • 同様のグラフィックス表現。

ほとんどのファミリは、コンポーネント ファミリ ファイルです。つまり、それらをプロジェクトにロードしたり、ファミリ テンプレートから作成できます。プロパティ セットとファミリのグラフィックス表現を指定します。

もう 1 つのファミリ タイプはシステム ファミリです。システム ファミリはロードや作成には使用できません。Revit にはシステム ファミリ プロパティやグラフィックス表現が事前に定義されています。これには、壁、寸法、屋根、床(またはスラブ)、レベルが含まれます。

図 22: ファミリ

Element クラスとしての機能に加えて、ファミリはファミリに属する新しいアイテムを作成するためのテンプレートとしても使用できます。

Revit プラットフォーム API におけるファミリ

Revit プラットフォーム API では、Family クラスと FamilyInstance の両方がコンポーネント ファミリに属します。その他の要素にはシステム ファミリが含まれます。

Revit プラットフォーム API におけるファミリは次の 3 つのオブジェクトによって表されます。

  • ファミリ
  • FamilySymbol
  • FamilyInstance

各オブジェクトは、ファミリ構造で重要な役割を果たします。

Family オブジェクトには次の特性があります。

  • 梁などのファミリ全体を表します。
  • ディスク上のファミリ ファイル全体を表します。
  • FamilySymbol を多数含みます。

FamilySymbol オブジェクトはファミリ内の特定のファミリ設定セット(タイプ「コンクリート-長方形梁: 16×32」など)を表します。

FamilyInstance オブジェクトは、Revit プロジェクト内の 1 つのインスタンスを表す FamilySymbol インスタンスです。たとえば、FamilyInstance はプロジェクト内の 16 x 32 コンクリート-長方形梁の 1 つのインスタンスである場合があります。

注: FamilyInstance は FamilyInstance 要素、データム要素、注釈要素に存在している点に注意してください。

したがって、次の規則が適用されます。

  • 各 FamilyInstance には FamilySymbol が 1 つあります。
  • 各ファミリには 1 つまたは複数の FamilySymbols が含まれます。
  • 各ファミリには 1 つまたは複数の FamilySymbols が含まれます。

詳細は、「ファミリ インスタンス」を参照してください。

ElementType

Revit プラットフォーム API では、通常、記号はインスタンスを定義するために使用される非表示の要素になります。シンボルはユーザ インタフェースではタイプと呼ばれます。

  • タイプは、ファミリで 1730 × 2032 ドアや 8×4×1/2 角度といった特定のサイズにすることができます。
  • タイプは、寸法の既定の長さ、既定の角度スタイルなどのように、スタイルとなる場合もあります。

記号は、一連の同様の要素の共有データを含む要素を表します。場合によっては、記号は倉庫から取得できる建築コンポーネント(ドアや窓)を表し、同じ建物内に何度も配置することができます。また、記号がホスト オブジェクト パラメータやその他の要素を含む場合もあります。たとえば、WallType 記号は特定の壁タイプの厚さ、レイヤの数、各レイヤのマテリアル、その他のプロパティを含みます。

FamilySymbol は API 内の記号です。Revit ユーザ インタフェースではファミリ タイプとも呼ばれます。FamilySymbol はファミリ内の要素のクラスであり、すべてのプロパティがまったく同じ値を持ちます。たとえば、32×78 の 6 枚式パネル ドアはすべて 1 つのタイプに属し、24×80 の 6 枚式パネル ドアはすべて別のタイプに属します。ファミリと同じように、FamilySymbol もテンプレートになります。FamilySymbol オブジェクトは ElementType オブジェクトと Element オブジェクトから派生したものです。

Instance

インスタンスは、建築(モデル インスタンス)の中や図面シート(注釈インスタンス)上に特定の位置を持つアイテムです。インスタンスは、ElementType の同一コピーの変換されたものを表します。たとえば、建物に特定のタイプの窓が 20 ある場合、1 つの ElementType が 20 のインスタンスを持ちます。ユーザ インタフェースではインスタンスはコンポーネントと呼ばれます。

注: FamilyInstance では、GetTypeId()メソッドの代わりに Symbol 記号プロパティを使用することで、対応する FamilySymbol を取得することができます。タイプを変換する必要がないため、この方が簡単で安全です。