ドキュメントとファイル管理により、ドキュメントの作成と検索が簡単になります。
Application クラスはすべてのドキュメントを保持します。前述のとおり、セッション内では、複数のドキュメントを開くことができます。アクティブなドキュメントは、UIApplication クラス プロパティである ActiveUIDocument を使用して取得します。
Application クラス Documents プロパティを使用しアクティブなドキュメントを含むすべての開いているドキュメントを取得します。このプロパティは、Revit セッションで開いているすべてのドキュメントを含むセットを返します。
Document クラスには、対応する各ファイルに PathName と Title の 2 つのプロパティがあります。
Application クラスは、既存のプロジェクト ファイルを開くためのオーバーロードされたメソッドを備えています。
表 3: API でドキュメントを開く
メソッド |
イベント |
Document OpenDocumentFile(string filename ) Document OpenDocumentFile(ModelPath modelPath, OpenOptions openOptions) |
DocumentOpened |
完全修飾ファイル パスで文字列を指定すると、Revit はファイルを開いて Document インスタンスを作成します。ファイルの汎用命名規則(UNC)の名前をこのメソッドに割り当てることで、このメソッドを使用して他のコンピュータのファイルを開きます。
対象となるファイルは、拡張子 .rvt の付いたプロジェクト ファイル、拡張子 .rfa の付いたファミリ ファイル、拡張子 .rte の付いたテンプレート ファイルです。
2 番目のオーバーロードはモデルへのパスを文字列ではなく ModelPath として取得し、OpenOptions パラメータにはファイルを開くためのオプション(中央から開いたドキュメントのアタッチを解除するなど)や、ワークシェアリングに関するオプションがあります。ワークシェアリングされたドキュメントを開く方法については、「ワークシェアリングされているドキュメントを開く」を参照してください。
これらのメソッドはエラーの発生時に特定のドキュメント化された例外をスローします。例外は主に次の 4 つのカテゴリに分類されます。
表 4: スローされる例外のタイプ
タイプ |
例 |
ディスク エラー | ファイルが存在しないか、バージョンが無効 |
リソース エラー | ファイルを開くためのメモリまたはディスク スペース不足 |
中央モデル ファイルのエラー | ファイルがロックされているか壊れている |
中央モデル/サーバ エラー | サーバとのネットワーク通信エラー |
ドキュメントを正常に開くと、DocumentOpened イベントが発生します。
次の表では、Application メソッドを使用して新しいドキュメントを作成します。
表 5: API でドキュメントを作成
メソッド |
イベント |
Document NewProjectDocument(string templateFileName); |
DocumentCreated |
Document NewFamilyDocument(string templateFileName); |
DocumentCreated |
Document NewProjectTemplateDocument(string templateFilename); |
DocumentCreated |
それぞれのメソッドには、パラメータとしてテンプレート ファイル名が必要です。テンプレート ファイルに基づいて、作成されたドキュメントが返されます。
Document クラスにはインスタンスを保存、閉じるメソッドが用意されています。
表 6: API でドキュメントを保存して閉じる
メソッド |
イベント |
Save() | DocumentSaved |
SaveAs() | DocumentSavedAs |
Close() | DocumentClosed |
Save()には 2 つのオーバーロードがあり(1 つは引数なし、もう 1 つは SaveOptions 引数とともに使用)、ディスク上のファイルから無効なデータをすべて削除するよう OS に強制するかどうかを指定できます。ファイルがまだ保存されていない場合は、代わりに SaveAs()を呼び出す必要があります。
SaveAs()には 3 つのオーバーロードがあります。1 つのオーバーロードはファイル名のみを引数として使用し、特定のファイル名を持つ別のファイルがある場合は、例外が発生します。他の 2 つのオーバーロードはファイル名を引数として使用する他(この場合は ModelPath の形式で)、2 番目の SaveAsOptions として使用し、既存のファイルがある場合に上書きするかどうかを指定します。また、SaveAsOptions を使用すると、ファイルに関連するディスク上の無効なデータを削除するかどうかといった他の関連オプションやワークシェアリング オプションを指定することができます。
Save()や SaveAs()は、ドキュメントを開くときと同じ 4 つのカテゴリでドキュメント化された例外をスローします(上記の表 4 に記載)。
Close()には 2 つのオーバーロードがあります。1 つは、閉じる前にファイルを保存するかどうかを示すブール値の引数を取ります。2 番目のオーバーロードは引数を取らず、ドキュメントが変更された場合、閉じる前にファイルを保存するかどうかをユーザに尋ねます。ドキュメントのパス名がまだ設定されていない場合、または保存するファイルが読み取り専用の場合、このメソッドは例外をスローします。
UIDocument クラスにもインスタンスを保存して閉じるメソッドがあります。
表 7: API で UIDocument を保存して閉じる
メソッド |
イベント |
SaveAndClose() | DocumentSaved、DocumentClosed |
SaveAs() | DocumentSavedAs |
SaveAndClose()は保存後にドキュメントを閉じます。ドキュメントのパス名を設定していない場合、名前と場所を設定するよう、[名前を付けて保存]ダイアログが Revit ユーザに表示されます。
SaveAs()メソッドは、Revit ユーザが[名前を付けて保存]ダイアログから入力したファイル名とパスにドキュメントを保存します。
DocumentPreviewSettings クラス はドキュメントから取得でき、特定のドキュメントのプレビュー イメージの保存に関連する設定を含みます。
コード領域: ドキュメントのプレビュー |
public void SaveActiveViewWithPreview(UIApplication application) { // Get the handle of current document. Autodesk.Revit.DB.Document document = application.ActiveUIDocument.Document; // Get the document's preview settings DocumentPreviewSettings settings = document.GetDocumentPreviewSettings(); // Find a candidate 3D view FilteredElementCollector collector = new FilteredElementCollector(document); collector.OfClass(typeof(View3D)); Func<View3D, bool> isValidForPreview = v => settings.IsViewIdValidForPreview(v.Id); View3D viewForPreview = collector.OfType<View3D>().First<View3D>(isValidForPreview); // Set the preview settings using (Transaction setTransaction = new Transaction(document, "Set preview view id")) { setTransaction.Start(); settings.PreviewViewId = viewForPreview.Id; setTransaction.Commit(); } // Save the document document.Save(); } |
Document クラスには、ファミリ全体とそのすべての記号をプロジェクトにロードする機能があります。ファミリ全体のロードには時間がかかり、大量のメモリを必要とするため、Document クラスには特定の記号のみをロードする LoadFamilySymbol()という同様のメソッドも用意されています。
詳細は、「ファミリをロードする」を参照してください。