revit中創建圖紙指在模型中創建一個圖紙視圖(以下簡稱圖紙),圖紙中可以插入明細表和視圖,並且可以打印;放置視圖操作指在某個圖紙中插入某一個視圖。
創建圖紙操作需要使用ViewSheet.Create(Document document, ElementId titleBlockTypeId);
titleBlockTypeId指標題欄的ID,標題欄是手動創建圖紙的時候需要選擇的圖紙類型。
標題欄是圖紙族的族類型,它的BuiltInCategory是OST_TitleBlocks,並且屬於元素類型。獲取標題欄時可通過建立以上三種過濾器獲得所有標題欄。
標題欄ID是標題欄的ID。
放置視圖操作需要使用Viewport.Create( Document document, ElementId viewsheetId,ElementId viewId, XYZ point );
其中 viewsheetId指視圖需要被放置到的圖紙的ID,viewId指被放置的視圖的ID,point指視圖放置在圖紙中哪一個位置。
平面視圖的基准點的影響值有視圖中項目基點、立面標記、裁剪框和構件的顯示情況。
經本人實驗獲得的影響結果如下:
以下為實驗代碼(revit中以建築樣板新建項目,按視圖名稱所示修改視圖可見性和裁剪框):
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using Autodesk.Revit.DB; 7 using Autodesk.Revit.UI; 8 using Autodesk.Revit.ApplicationServices; 9 using Autodesk.Revit.Attributes; 10 11 using System.Windows.Forms; 12 13 namespace Xincubus 14 { 15 [Transaction(TransactionMode.Manual)] 16 17 public class CreateViewSheet : IExternalCommand 18 { 19 public Result Execute(ExternalCommandData document, ref string message, ElementSet elements) 20 { 21 22 UIApplication uiapp = document.Application; 23 Document doc = uiapp.ActiveUIDocument.Document; 24 FilteredElementCollector titleBlock = new FilteredElementCollector(doc); 25 titleBlock.WherePasses(new ElementClassFilter(typeof(FamilySymbol))); 26 titleBlock.WherePasses(new ElementCategoryFilter(BuiltInCategory.OST_TitleBlocks)).WhereElementIsElementType(); 27 FilteredElementCollector allView = new FilteredElementCollector(doc); 28 allView.WherePasses(new ElementClassFilter(typeof(Autodesk.Revit.DB.View))); 29 allView.WherePasses(new ElementCategoryFilter(BuiltInCategory.OST_Views)).WhereElementIsNotElementType(); 30 31 ElementId titleBlockTypeId = null; 32 Autodesk.Revit.DB.View view1 = null; 33 Autodesk.Revit.DB.View view2 = null; 34 Autodesk.Revit.DB.View view3 = null; 35 Autodesk.Revit.DB.View view4 = null; 36 Autodesk.Revit.DB.View view5 = null; 37 Autodesk.Revit.DB.View view6 = null; 38 Autodesk.Revit.DB.View view7 = null; 39 Autodesk.Revit.DB.View view8 = null; 40 if (titleBlock.Count() != 0) 41 { 42 foreach (Element element in titleBlock) 43 { 44 if (element.Name == "A0 公制") 45 { 46 titleBlockTypeId = element.Id; 47 break; 48 } 49 } 50 } 51 if (allView.Count() != 0) 52 { 53 54 foreach (Element element in allView) 55 { 56 if (element.Name == "裁剪框+顯示項目基點不顯示立面") 57 { 58 view1 = element as Autodesk.Revit.DB.View; 59 } 60 if (element.Name == "裁剪框+顯示項目基點顯示立面") 61 { 62 view2 = element as Autodesk.Revit.DB.View; 63 } 64 if (element.Name == "裁剪框+隱藏項目基點顯示立面") 65 { 66 view3 = element as Autodesk.Revit.DB.View; 67 } 68 if (element.Name == "裁剪框+隱藏項目基點隱藏立面") 69 { 70 view4 = element as Autodesk.Revit.DB.View; 71 } 72 if (element.Name == "無裁剪框+不顯示項目基點不顯示立面") 73 { 74 view5 = element as Autodesk.Revit.DB.View; 75 } 76 if (element.Name == "無裁剪框+不顯示項目基點顯示立面") 77 { 78 view6 = element as Autodesk.Revit.DB.View; 79 } 80 if (element.Name == "無裁剪框+顯示項目基點不顯示立面") 81 { 82 view7 = element as Autodesk.Revit.DB.View; 83 } 84 if (element.Name == "無裁剪框+顯示項目基點和立面") 85 { 86 view8 = element as Autodesk.Revit.DB.View; 87 } 88 } 89 using (Transaction tr = new Transaction(doc)) 90 { 91 if (tr.Start("Create ViewSheet") == TransactionStatus.Started) 92 { 93 ViewSheet viewSheetA = ViewSheet.Create(doc, titleBlockTypeId); 94 Viewport.Create(doc, viewSheetA.Id, view1.Id, new XYZ(0, 0, 0)); 95 Viewport.Create(doc, viewSheetA.Id, view2.Id, new XYZ(0, 0, 0)); 96 ViewSheet viewSheetB = ViewSheet.Create(doc, titleBlockTypeId); 97 Viewport.Create(doc, viewSheetB.Id, view3.Id, new XYZ(0, 0, 0)); 98 Viewport.Create(doc, viewSheetB.Id, view4.Id, new XYZ(0, 0, 0)); 99 ViewSheet viewSheetC = ViewSheet.Create(doc, titleBlockTypeId); 100 Viewport.Create(doc, viewSheetC.Id, view5.Id, new XYZ(0, 0, 0)); 101 Viewport.Create(doc, viewSheetC.Id, view6.Id, new XYZ(0, 0, 0)); 102 ViewSheet viewSheetD = ViewSheet.Create(doc, titleBlockTypeId); 103 Viewport.Create(doc, viewSheetD.Id, view7.Id, new XYZ(0, 0, 0)); 104 Viewport.Create(doc, viewSheetD.Id, view8.Id, new XYZ(0, 0, 0)); 105 tr.Commit(); 106 } 107 else 108 tr.RollBack(); 109 } 110 } 111 return Result.Succeeded; 112 } 113 } 114 }