このセクションでは次の内容について詳細に説明します。
次の図は、ビューの生成方法を示します。
図 94: ビューの作成処理
各ビューは 2D 投影面に 3D オブジェクトを投影することによって生成されます。投影は次の 2 つの基本的なクラスに分割されます。
投影タイプを決定した後、どういう条件で3D モデルが必要とされ、シーンがレンダリングされるのか指定する必要があります。投影の詳細は、「View3D」セクションを参照してください。
ワールド座標には次のものが含まれます。
Revit は次の 2 つの座標系を使用します。
表示する座標系は、観察者のビューでモデルがどのように表示されるかを表します。 その基準点は見る人の目の位置になり、モデル空間内のその座標は View.Origin プロパティによって取得します。X、Y、Z 軸は、それぞれ View.RightDirection、View.UpDirection、View.ViewDirection プロパティによって表されます。
表示する座標系は右利き用のものです。詳細は、「パース投影図」と平行投影図(「View3D」)を参照してください。
表示されない 3D モデル空間の一部(見る人の背後に隠れるものや遠すぎてはっきりと表示されないもの)は、投影面に投影される前に除外されます。この操作にはビューのトリミングが必要になります。トリミングには次の規則が適用されます。
View.GetCropRegionShapeManager メソッドは ViewCropRegionShapeManager を返します。これは、トリミング領域の境界情報(長方形またはそれ以外)を提供します。
トリミング後、モデルが投影面に投影されます。投影には次の規則が適用されます。
レイトレーシングのためのビューの表示スタイルを設定すると特別な制限モードとなって、機能が制限されるため、この値には表示スタイルを直接割り当てることはできません。
View.DetailLevel プロパティは ViewDetailLevel 列挙値を使用し、下の図のように Revit ウィンドウの下部の詳細レベル オプションに対応します。
ViewDetailLevel 列挙値には、指定されたビューが詳細レベルを使用しない場合、Undefined が含まれます。
View クラスでは一時表示モードをコントロールすることができます。View.EnableRevealHiddenMode()メソッドは、ビューの非表示要素のリビール モードをオンにします。View.EnableTemporaryAnalyticalDisplayMode()は解析モデル カテゴリのみの一時表示を有効にします。また、View.DisableTemporaryViewMode()は指定された一時表示モードを無効にします。DisableTemporaryViewMode()メソッドは TemporaryViewMode 列挙値を取ります。使用可能なオプションは次のとおりです。
メンバー名 |
説明 |
RevealHiddenElements |
非表示要素のリビール モード |
TemporaryHideIsolate |
一時的な非表示/選択表示モード |
WorksharingDisplay |
ワークシェアリング表示モードのいずれか |
AnalyticalModel |
解析モデルを選択表示するモード |
Rayrace |
インタラクティブ レイトレーシングでモデルを表示するモード |
View.IsInTemporaryViewMode メソッドを使用すると、ビューが現在指定された TemporaryViewMode であるかどうかを判別します。
ビューは表示要素の追跡を続けます。ビューに表示されるすべてのグラフィックス要素は、ドキュメントとビューの ID で構成される FilteredElementCollector を使用して取得することができます。ただし、セット内の一部の要素は非表示になったり、他の要素によって覆われる場合があります。ビューを回転したり、覆っている要素を削除すると表示することができます。表示されているこれらの要素にアクセスするには、Revit でビューのジオメトリを再構築する必要があります。コードが指定されたビューにこのコンストラクタを初めて使用する場合や、コードがこのコンストラクタを表示設定が変更されたビューに使用する場合は、パフォーマンスが大幅に低下することがあります。
ビュー内の要素はカテゴリごとに表示、非表示になります。
ビューに基づいた FilteredElementCollector には、現在のビューで表示されている要素のみが含まれます。グラフィックスでない要素や非表示になっている要素は取得することができません。ドキュメントに基づいた FilteredElementCollector は、非表示の要素や非グラフィックスの要素を含む、ドキュメント内のすべての要素を取得します。たとえば、空のプロジェクトに既定の 3D ビューを作成する場合、ビューには要素がありませんが、ドキュメントには多数の要素(すべて非表示)が含まれる場合があります。
次のコード サンプルは、アクティブなドキュメントとアクティブなビューの壁カテゴリの要素の数をカウントします。ドキュメントには非グラフィックスの壁カテゴリ要素が含まれるため、アクティブなビュー内の要素の数とドキュメント内の要素の数は異なります。
コードの領域: アクティブ ビューの要素をカウント |
private void CountElements(UIDocument uiDoc) { StringBuilder message = new StringBuilder(); FilteredElementCollector viewCollector = new FilteredElementCollector(uiDoc.Document, uiDoc.ActiveView.Id); viewCollector.OfCategory(BuiltInCategory.OST_Walls); message.AppendLine("Wall category elements within active View: " + viewCollector.ToElementIds().Count); FilteredElementCollector docCollector = new FilteredElementCollector(uiDoc.Document); docCollector.OfCategory(BuiltInCategory.OST_Walls); message.AppendLine("Wall category elements within document: " + docCollector.ToElementIds().Count); TaskDialog.Show("Revit", message.ToString()); } |
一時表示モードは要素の表示に影響を与えることがあります。View.IsInTemporaryViewMode()メソッドを使用すると、ビューが一時表示モードになっているかどうかを判断できます。メソッド View.IsElementVisibleInTemporaryViewMode()は、指定した表示モードで要素が表示されるかどうかを識別します。これは、TemporaryHideIsolate と AnalyticalModel 表示モードにのみ適用されます。その他のモードの場合は例外が発生します。
Revit プラットフォーム API には、Autodesk.Revit.DB.View クラスから派生した対応するビュー要素を作成するための、メソッドが数多く用意されています。ほとんどのビュー タイプは、派生した表示クラスの静的メソッドを使用して作成されます。ビューが正常に作成されている場合、これらのメソッドはビューに参照を返し、正常に作成されていない場合は null を返します。メソッドについては後述の各ビュー クラスのセクションで説明します。
ビューは View.Duplicate()メソッドを使用して作成することもできます。従属させるか、詳細を持たせるかといった新しいビュー用のオプションを使用して、既存のビューから新しいビューを作成できます。
Document.Delete メソッドとビュー ID を使用してビューを削除します。また、ビューに関連付けられている要素を削除することもできます。たとえば、レベル要素を削除すると対応する平面図ビューが削除され、カメラ要素を削除すると対応する 3D ビューが削除されます。