シートにはビューとタイトル ブロックが含まれます。ViewSheet.Create()メソッドを使用してシートビューを作成する場合は、タイトル ブロック ファミリ記号 ID はメソッドに必要なパラメータです。タイトル ブロック ファミリ記号は、FilteredElementCollector を使用して検索することができます。
コード領域: ViewSheet.Create() |
public static ViewSheet ViewSheet.Create(Document document, ElementId titleBlockTypeId); |
新しく作成されたシートにはビューがありません。Viewport.Create()メソッドを使用してビューを追加します。Viewport クラスを使用して、ビュー シートに通常のビュー、つまり平面図ビュー、立面図ビュー、3 次元ビューを追加します。ビューに集計表を追加するには、代わりに ScheduleSheetInstance.Create()を使用します。
コード領域: 左コーナーに位置合わせした 2 つのビューを追加 |
public static void PlaceAlignedViewsAtLeftCorner(Document doc) { FilteredElementCollector fec = new FilteredElementCollector(doc); fec.OfClass(typeof(ViewPlan)); var viewPlans = fec.Cast<ViewPlan>().Where<ViewPlan>(vp => !vp.IsTemplate && vp.ViewType == ViewType.CeilingPlan); ViewPlan vp1 = viewPlans.ElementAt(0); ViewPlan vp2 = viewPlans.ElementAt(1); using (Transaction t = new Transaction(doc, "Place on sheet")) { t.Start(); // Add two viewports distinct from one another ViewSheet vs = ViewSheet.Create(doc, ElementId.InvalidElementId); Viewport viewport1 = Viewport.Create(doc, vs.Id, vp1.Id, new XYZ(0, 0, 0)); Viewport viewport2 = Viewport.Create(doc, vs.Id, vp2.Id, new XYZ(0, 5, 0)); doc.Regenerate(); // Calculate the necessary move vector to align the lower left corner Outline outline1 = viewport1.GetBoxOutline(); Outline outline2 = viewport2.GetBoxOutline(); XYZ boxCenter = viewport2.GetBoxCenter(); XYZ vectorToCenter = boxCenter - outline2.MinimumPoint; XYZ newCenter = outline1.MinimumPoint + vectorToCenter; // Move the viewport to the new location viewport2.SetBoxCenter(newCenter); t.Commit(); } } |
各シートには、完全な図面セットに一意のシート番号があります。番号は、プロジェクト ブラウザのシート名の前に表示されます。図面セットのシートをクロスリファレンスするには、ビュー タイトルのシート番号を使用すると便利です。SheetNumber プロパティを使用して番号を取得または修正できます。番号は一意である必要があります。そうではなく重複した値に設定した場合には例外がスローされます。
次の例では、シート ビューを作成、印刷する方法を示しています。まず、(この場合はフィルタを使用して)ドキュメントの使用可能なタイトル ブロックを検索して、これを使用してシート ビューを作成します。次に、3D ビューを追加します。このビューは、シートの中央の左下側隅に配置されます。最後に、View.Print()メソッドを呼び出してシートを印刷します。
コード領域: シート ビューを作成 |
private void CreateSheetView(Autodesk.Revit.DB.Document document, View3D view3D) { // Get an available title block from document FilteredElementCollector collector = new FilteredElementCollector(document); collector.OfClass(typeof(FamilySymbol)); collector.OfCategory(BuiltInCategory.OST_TitleBlocks); FamilySymbol fs = collector.FirstElement() as FamilySymbol; if (fs != null) { using (Transaction t = new Transaction(document, "Create a new ViewSheet")) { t.Start(); try { // Create a sheet view ViewSheet viewSheet = ViewSheet.Create(document, fs.Id); if (null == viewSheet) { throw new Exception("Failed to create new ViewSheet."); } // Add passed in view onto the center of the sheet UV location = new UV((viewSheet.Outline.Max.U - viewSheet.Outline.Min.U) / 2, (viewSheet.Outline.Max.V - viewSheet.Outline.Min.V) / 2); //viewSheet.AddView(view3D, location); Viewport.Create(document, viewSheet.Id, view3D.Id, new XYZ(location.U, location.V, 0)); // Print the sheet out if (viewSheet.CanBePrinted) { TaskDialog taskDialog = new TaskDialog("Revit"); taskDialog.MainContent = "Print the sheet?"; TaskDialogCommonButtons buttons = TaskDialogCommonButtons.Yes | TaskDialogCommonButtons.No; taskDialog.CommonButtons = buttons; TaskDialogResult result = taskDialog.Show(); if (result == TaskDialogResult.Yes) { viewSheet.Print(); } } t.Commit(); } catch { t.RollBack(); } } } } |
改訂は、プロジェクト内の改訂順番に並べられます。追加される改訂は、常にシートの改訂表に組み込まれます。関連付けられている RevisionClouds がシート上にあるため、通常、改訂は改訂表に集計されます。
次のコード サンプルは、特定の基準に一致するシートに改訂を追加する方法を示しています。
コード領域: シートに改訂を追加 |
public static void AddAdditionalRevisionsToSheet(ViewSheet viewSheet, String toMatch) { Document doc = viewSheet.Document; ICollection<ElementId> revisions = viewSheet.GetAdditionalRevisionIds(); // Find revisions whose description matches input string FilteredElementCollector collector = new FilteredElementCollector(doc); collector.OfCategory(BuiltInCategory.OST_Revisions); collector.WhereElementIsNotElementType(); if (revisions.Count > 0) collector.Excluding(revisions); // Check if revision should be added foreach (Element revision in collector) { Parameter descriptionParam = revision.get_Parameter(BuiltInParameter.PROJECT_REVISION_REVISION_DESCRIPTION); String description = descriptionParam.AsString(); if (description.Contains(toMatch)) revisions.Add(revision.Id); } if (revisions.Count > 0) { // Apply the new list of revisions using (Transaction t = new Transaction(doc, "Add revisions to sheet")) { t.Start(); viewSheet.SetAdditionalRevisionIds(revisions); t.Commit(); } } } |
シートを印刷する前に、プリンタの設定を変更することができます。API は、PrintManager クラス、および関連する Autodesk.Revit.DB クラスを使用して、プリンタの設定を表示します。
クラス |
機能 |
Autodesk.Revit.DB.PrintManager |
Revit UI の[印刷]ダイアログ([ファイル] > [印刷])の印刷情報を表します。 |
Autodesk.Revit.DB.PrintParameters |
ドキュメントの印刷に使用する設定を含むオブジェクトです。 |
Autodesk.Revit.DB.PrintSetup |
Revit の印刷設定([ファイル] > [印刷設定])を表します。 |
Autodesk.Revit.DB.PaperSize |
Autodesk Revit プロジェクトの印刷設定の用紙サイズを表すオブジェクトです。 |
Autodesk.Revit.DB.PaperSizeSet |
任意の数の用紙サイズオブジェクトを含めることができるセットです。 |
Autodesk.Revit.DB.PaperSource |
Autodesk Revit プロジェクト内の印刷設定の用紙供給元を表すオブジェクトです。 |
Autodesk.Revit.DB.PaperSourceSet |
任意の数の用紙供給元オブジェクトを含めることができるセットです。 |
Autodesk.Revit.DB.ViewSheetSetting |
Revit UI のビュー/シート セット([ファイル] > [印刷])を表します。 |
Autodesk.Revit.DB.PrintSetting |
Revit の印刷設定([ファイル] > [印刷設定])を表します。 |
これらのオブジェクトを使用しているコードの例については、Revit プラットフォーム SDK に含まれる 「ViewPrinter サンプル アプリケーション」を参照してください。