概要 - ビュー

概要 - ビュー

このセクションでは次の内容について詳細に説明します。

ビューの処理

次の図は、ビューの生成方法を示します。

図 94: ビューの作成処理

各ビューは 2D 投影面に 3D オブジェクトを投影することによって生成されます。投影は次の 2 つの基本的なクラスに分割されます。

  • パース
  • 平行

投影タイプを決定した後、どういう条件で3D モデルが必要とされ、シーンがレンダリングされるのか指定する必要があります。投影の詳細は、「View3D」セクションを参照してください。

ワールド座標には次のものが含まれます。

  • 見る人の目の位置
  • 投影が表示される、表示する面の位置。

Revit は次の 2 つの座標系を使用します。

  • 建物が存在するグローバル空間座標かモデル空間座標
  • 表示する座標系。

表示する座標系は、観察者のビューでモデルがどのように表示されるかを表します。 その基準点は見る人の目の位置になり、モデル空間内のその座標は View.Origin プロパティによって取得します。X、Y、Z 軸は、それぞれ View.RightDirection、View.UpDirection、View.ViewDirection プロパティによって表されます。

  • View.RightDirection は画面の右側に移動します。
  • View.UpDirection は画面の上側に移動します。
  • View.ViewDirection は画面から見る人の方に移動します。

表示する座標系は右利き用のものです。詳細は、「パース投影図」と平行投影図(「View3D」)を参照してください。

表示されない 3D モデル空間の一部(見る人の背後に隠れるものや遠すぎてはっきりと表示されないもの)は、投影面に投影される前に除外されます。この操作にはビューのトリミングが必要になります。トリミングには次の規則が適用されます。

  • トリミング領域の外側にある要素はビューでは使用されません。
  • View.GetCropRegionShapeManager メソッドは ViewCropRegionShapeManager を返します。これは、トリミング領域の境界情報(長方形またはそれ以外)を提供します。

  • View.CropBoxVisible プロパティはトリミング ボックスをビューに表示するかどうかを決定します。
  • View.CropBoxActive プロパティはトリミング ボックスが実際にビューのトリミングに使用されているかどうかを決定します。

トリミング後、モデルが投影面に投影されます。投影には次の規則が適用されます。

  • 投影のコンテンツは表示用に画面のビューポートにマッピングされます。
  • マッピング処理中は、画面に適切に表示されるように投影のコンテンツの縮尺が設定されます。
  • View.Scale プロパティは、実際のモデル サイズとビュー サイズの比率です。
  • 用紙上のビューの境界はトリミング領域となり、投影面上ではトリミング形状の投影となります。
  • トリミング領域のサイズと位置は View.OutLine プロパティによって決まります。

表示設定

ビュー クラスには、表示スタイル設定と詳細レベル設定を取得、設定するためのプロパティがあります。View.DisplayStyle プロパティは DisplayStyle 列挙値を使用し、下の図のように Revit ウィンドウの下部の表示オプションに対応します。

レイトレーシングのためのビューの表示スタイルを設定すると特別な制限モードとなって、機能が制限されるため、この値には表示スタイルを直接割り当てることはできません。

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 でビューのジオメトリを再構築する必要があります。コードが指定されたビューにこのコンストラクタを初めて使用する場合や、コードがこのコンストラクタを表示設定が変更されたビューに使用する場合は、パフォーマンスが大幅に低下することがあります。

ビュー内の要素はカテゴリごとに表示、非表示になります。

  • View.GetVisibility()メソッドは、ビュー内で表示されているか、非表示になっているかを判断するために、カテゴリを照会します。
  • View.SetVisibility()メソッドは特定のカテゴリのすべての要素を表示か非表示に設定します。

ビューに基づいた 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 ビューが削除されます。