劉子朋,張曉東,丁義南,武思思,王洋
(石家莊鐵道大學)
基于Revit開發(fā)創(chuàng)建自定義插件
Creating Custom Plug-in Based on Revit Development
劉子朋,張曉東,丁義南,武思思,王洋
(石家莊鐵道大學)
為了使國內(nèi)Revit開發(fā)愛好者或軟件公司對當前Revit發(fā)展狀況有個基本的了解,并促進中國的Revit發(fā)展,需要對Revit二次開發(fā)的入門有一個基本了解。BIM工具的專業(yè)設計功能不夠完善,這正是Revit二次開發(fā)的強項。本地化問題同樣可以用定制的符合本地規(guī)范和習慣的二次開發(fā)工具。作者對Revit二次開發(fā)進行入門級別的簡單介紹,相信對于Revit二次開發(fā)的普及和提高起到積極的推動作用。
計算機輔助設計;Revit二次開發(fā);API;外部命令;外部應用
自2005年以來,Autodesk Revit 8.0已經(jīng)推出,并已開始提供API,這已經(jīng)持續(xù)了超過10年時間。Revit API得到了迅速發(fā)展,從一開始的API只能訪問文檔中的對象[9],到后續(xù)的版本中逐漸增加族創(chuàng)建API,文檔級事件API,對象過濾API,用戶交互的API,動態(tài)模型的修正,對該模型的分析結果顯示等。API的數(shù)量每年都在大幅增加,其功能也越來越強。到2013年,API功能就可以做大量的定制工作。
Revit的用戶界面可以自定,但是只能通過Revit API來實現(xiàn)。無法像AutoCAD里面通過界面的功能設置的方式來實現(xiàn),并能保存成cui文件,發(fā)送給別人。只能通過二次開發(fā)來實現(xiàn)Revit的自定義界面功能,可以在既有選項卡(外部命令選項卡和分析選項卡)中添加自定義的功能按鈕,也可以創(chuàng)建自定義的功能選項卡,布置自己的選項卡樣式。Revit 提供的API接口無法對你所創(chuàng)建的選項卡進行隱藏,刪除。你只能用字符串的形式來指代自定義選項卡向其中添加Panel。
在Revit被收購之前,原業(yè)主Revit技術公司計劃提供完整的解決方案,提供了所有的設計者所需要的功能[9]。這種想法對于美國或美國的某些地區(qū)是可行的,但是如何滿足全球市場并非一家公司所能解決。Autodesk已有多年的全球實踐和戰(zhàn)略,深知API的重要作用,只有API能解決世界不同的需求和標準[1]。所以被Autodesk收購后,Revit開始封裝API供二次發(fā)展使用。
近幾年隨著API的迅速發(fā)展和完善,在土木工程建設領域,出現(xiàn)了一大批Revit二次發(fā)展人才[4]。自從Autodesk開始提供API以來,已經(jīng)有10多年的歷史了,API不僅數(shù)量上逐年增加,而且變得越來越多樣化。截至目前,API已經(jīng)能夠滿足一般建筑工程的需要,并且隨著BIM理念的推廣應用,通過Revit二次開發(fā)實現(xiàn),Revit軟件會更加快捷,功能更加強大[4]。
二次開發(fā)技術能夠在軟件應用方面提供以下功能:
①訪問模型的圖形數(shù)據(jù)和參數(shù)數(shù)據(jù);
②創(chuàng)建插件來完成對UI的增強;
③創(chuàng)建插件來完成一些對重復工作的自動化;
④執(zhí)行一切種類的BIM分析和自動創(chuàng)建項目文檔;
⑤集成第三方應用來完成諸如鏈接到外部數(shù)據(jù)庫、轉換數(shù)據(jù)到分析應用等[4]。
Revit API可以訪問每個Revit功能,可以實現(xiàn)集成的分析和可視化應用建筑信息模型,用戶可以根據(jù)需要定制相應的Revit功能的延伸,作為軟件開發(fā)人員也可以實現(xiàn)隨時訪問所有信息的組件模型,組件的屬性查詢、更改和創(chuàng)建一個新組件[4]。
Revit的開發(fā)基本流程具有統(tǒng)一的基本架構,首先基于C#創(chuàng)建一個類庫(Class Libriary)工程,添加兩個參考文件Revit API.dll和Revit APIUL.dll到類庫項目。添加兩個引用文件時,將命名空間引用添加到程序中并輸入程序的內(nèi)部設計[8]。第一步是將屬性添加到開發(fā)命令類中,并新建一個派生類IExternal Command,第二步重載Execute()方法,第三步在Execute()函數(shù)中通過編寫的代碼實現(xiàn)需要的功能。開發(fā)流程見圖1。
圖1 Revit開發(fā)流程
Revit二次開發(fā)的調(diào)用方法主要有兩種:方法一是簡單方式,也是最常用的方式,是通過外部命令(External Command),添加一個Revit命令,通過軟件開發(fā)插件(SDK)工具包提供的插件加載功能[10],將用戶開發(fā)的插件加載運行即可;另一種是高級方式,通過加載外部應用(External Application)的方式[10],外部應用隨著Revit軟件一起啟動和關閉,同時在Revit面板中添加按鈕。
4.1 簡單方式
在外部命令Tab里面的外部工具下拉列表中顯示你的命令名字。用戶點擊可以啟動該命令。方法是制作一個插件加載文件(擴展名為addin),把這個文件放到指定的目錄下。這個文件定義了在Revit啟動的時候需要加載哪些dll中的哪些命令。優(yōu)點是方案簡單易行。配置一個文件就好了;弱點是如果功能很多,組織的就不太好,用戶使用起來不方便。
1)新建項目(Create a New Project)
Visual Studio編寫C#程序的第一步是選擇一種項目類型并創(chuàng)建新的類庫。從“文件”菜單選擇新建>項目。從安裝的樣板框架中,單擊Visual C#。在右邊框架內(nèi),單擊類庫(如圖2)在名稱字段,鍵入“Hello World”作為項目名稱。單擊確定。
2)添加引用(Add References)
解決方案資源管理器窗口如果未能打開,可以在“視圖”菜單中選擇解決方案資源管理器。在解決方案資源管理器中,右鍵單擊引用以顯示上下文菜單。在上下文菜單中,單擊添加引用,如圖3所示。出現(xiàn)“添加引用”對話框。在添加引用對話框中,單擊瀏覽選項卡。找到Revit安裝的文件夾,然后單擊RevitAPI.dll。單擊確定以選擇.dll并關閉對話框。RevitAPI會出現(xiàn)在解決方案資源管理器引用樹中。
圖2 Visual Studio 2010新建項目界面
圖3 添加引用RevitAPI.dll、RevitAPIUI.dll
注意,對于新項目,RevitAPI的“復制本地”屬性應始終設置為false。這會節(jié)省硬盤空間,并避免Visual Studio調(diào)試器不知道使用哪個DLL副本。右鍵單擊RevitAPI.dll,選擇屬性,并將“復制本地”設置從true(默認設置)改為false。對RevitAPIUI.dll重復上述步驟。
3)添加代碼(Add Code)
添加以下代碼以創(chuàng)建插件
每個Revit插件應用程序都必須有一個進入點類來實現(xiàn)IExternalCommand接口,且必須實現(xiàn)Execute()方法。插件程序的進入點是Execute()方法,類似于C#語言中的Main()方法。插件程序進入點類的定義包含在一個程序集內(nèi)。
4)構建程序(Build the Program)
在完成代碼之后,必須構建文件。從“構建”菜單單擊生成解決方案。若構建輸出出現(xiàn)在輸出窗口中,則說明項目編譯已成功,如圖4所示。
5)創(chuàng)建.addin清單文件(Create a.addin Manifest File)
HelloWorld.dll文件出現(xiàn)在項目輸出目錄中。在Revit中調(diào)用該應用程序,則需創(chuàng)建一個清單文件將它注冊到Revit。要創(chuàng)建清單文件,可用文本編輯器新建一個文本文件。添加代碼如下所示。
圖4 輸出窗口
6)調(diào)試插件(Debug the Add-in)
在調(diào)試模式下運行程序可使用斷點暫停程序,以便檢查變量和對象的狀態(tài)。如果出現(xiàn)錯誤,則可以檢查程序運行的變量,來推斷為什么不是預期的值。在“工具”菜單中,選擇附加到進程(如圖5所示),在可用進程中選擇Revit.exe然后點擊附加。在Revit軟件附加模塊中選擇外部命令開始調(diào)試。
4.2 高級方式
在命令欄上生成你自己的按鈕,可以顯示名字,圖片,可以按照你希望的方式組織你所有的按鈕位置和分組關系。功能區(qū)面板可以添加到插件或分析選項卡,也可以添加到一個新的自定義功能區(qū)選項卡,僅在必要時才使用此選項。為確保標準Revit功能區(qū)選項卡可見,自定義功能區(qū)選項卡上限數(shù)量強制為20個。這個是最完美的解決方案。
1)新建項目(Create a New Project)
在Visual Studio中使用類庫樣板創(chuàng)建C#項目。鍵入AddPanel作為項目名稱。按前一個外部命令中的說明,添加對 RevitAPI.dll和 RevitAPIUI.dll的 引用。添加PresentationCore參考,添加WindowsBase、System.Xaml引用,如圖6所示。
2)添加代碼(Add Code)
添加面板項目不同于Hello World項目,因為在Revit運行時它是自動調(diào)用的。此項目使用IExternalApplication接口。IExternalApplication接口包含兩個抽象方法,即OnStartup()和OnShutdown()[5]。
圖5 設置調(diào)試環(huán)境
圖6 添加對RevitAPI.dll、RevitAPIUI.dll等的引用
3)構 建 程 序(Build the Application)
在完成代碼之后,構建應用程序。從“生成”菜單單擊生成解決方案。若構建輸出出現(xiàn)在輸出窗口,則說明項目編譯成功。addPanel.dll位于項目輸出目錄中。
4)創(chuàng)建.addin清單文件(Create the .addin Manifest File)
如果在Revit中調(diào)用應用程序,則需要創(chuàng)建清單文件注冊到Revit。用文本編輯器創(chuàng)建文本文件。在文件中代碼如下:
5)調(diào)試(Debugging)
啟動調(diào)試,生成項目,然后運行Revit。如圖7所示一個新的Hello World功能區(qū)面板顯示在插件選項卡上,帶有小火車頭圖標的是生成的按鈕。單擊Hello World運行程序會顯示如圖8所示對話框。
圖8 Hello World對話框
目前,建筑業(yè)正處于技術變革的時期,如何應對這一變化,進入數(shù)字化三維設計的時代,將關系到企業(yè)的未來發(fā)展。如果能通過BIM定制開發(fā),盡快實現(xiàn)全方位的專業(yè)三維設計和BIM合作,將大大促進國內(nèi)外工程設計院的業(yè)務發(fā)展。
BIM技術的應用可以提高設計質量,已成為業(yè)界的共識。在這個階段,使用Revit代替AutoCAD全套施工設計是不現(xiàn)實的,BIM技術對施工圖設計是比較適合驗證和深化設計。Revit建模效率低、工作量大,嚴重阻礙了BIM技術的發(fā)展。通過開發(fā)Revit插件,它是提高建模效率的可行方法之一。作者對有二次開發(fā)興趣的人進行入門級別的
圖7 將新功能區(qū)面板添加到Revit
簡單介紹,希望起到拋磚引玉的作用,相信對于Revit二次開發(fā)的普及和提高起到積極的推動作用。
[1]袁明偉. 基于BIM技術的結構設計方法研究[D].沈陽:遼寧工業(yè)大學,2017.
[2]吳明輝. 基于BIM的彈性支承塊式無砟軌道三維數(shù)字化設計研究[D]. 石家莊:石家莊鐵道大學,2016.
[3]徐迪. 基于Revit的建筑結構輔助建模系統(tǒng)開發(fā)[J]. 土木建筑工程信息技術,2012,4(03):71-77.
[4]柳娟花,李艷妮. 基于BIM的虛擬施工技術應用探究[J]. 電腦知識與技術,2011,7(29):7266-7268.
[5]張藝晶,杜守軍,趙坤,張鵬飛. Revit軟件二次開發(fā)和項目上的應用研究[J]. 河北企業(yè),2015,(11):121-123.
[6]樊永生. 建筑信息模型的空間拓撲關系提取和分類研究[D].西安:西安建筑科技大學,2013.
[7]李桐. Revit MEP管道自動標注及優(yōu)化布置算法的研究[D].西安:西安建筑科技大學,2016.
[8]邢振業(yè). 基于混凝土結構耐久性影響因素的BIM研究[D].西安:西安建筑科技大學,2016.
[9]Revit二次開發(fā)現(xiàn)狀(2009)- CAD定制樂園[DB/OL]-博客頻道-CSDN.NET-《網(wǎng)絡(http://blog.csdn.net)》
[10]韓宇. 基于BIM技術的建設項目施工階段動態(tài)資源管理研究[D].蘭州:蘭州交通大學,2015.
LIU Zi-peng,ZHANG Xiao-dong,DING Yi-nan,WU Si-si,WANG Yang
(Shijiazhuang Tiedao University)
In order to enable domestic Revit development enthusiasts or software companies to have a basic understanding of the current development situation of Revit, as well as promote the Revit in China, we need a basic understanding of the basics introduction of secondary development. The professional design function of BIM Tool is not perfect, however, this is the strengths of Revit secondary development.Localization issues can also be tailored to local specifications and custom-compliant secondary development tools. The author makes a simple introduction for those who are interested in secondary development, the author hopes this entry level introduction can play a role as throw a sprat to catch a whale. The author believes that this introduction can play a positive role in promoting the popularization and improvement of Revit secondary development.
computer aided design; Revit secondary development; API; external commands; external application