revit 二次開發之創建圖紙和放置視圖


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     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM