范 宇 力 輝 楊杰仁 楊 睿
(1.北京城建設(shè)計(jì)發(fā)展集團(tuán)股份有限公司成都分院,四川 成都 610031; 2.晨越建設(shè)項(xiàng)目管理集團(tuán)股份有限公司,四川 成都 610031)
建筑行業(yè)的變革離不開(kāi)數(shù)字信息化技術(shù),從最原始的手工繪圖到CAD的應(yīng)用[1],建筑行業(yè)完成了一次質(zhì)的飛越。隨著行業(yè)的發(fā)展,工程多樣化和復(fù)雜化的特點(diǎn)日漸明顯[2],傳統(tǒng)的二維設(shè)計(jì)中經(jīng)常出現(xiàn)信息錯(cuò)誤和相互矛盾[3],影響工程施工。在此背景下,BIM技術(shù)應(yīng)運(yùn)而生,建筑行業(yè)領(lǐng)域正迎來(lái)第二次技術(shù)革新,由傳統(tǒng)的二維設(shè)計(jì)轉(zhuǎn)向三維空間立體設(shè)計(jì)[4]?;诖?,Autodesk公司的Revit軟件產(chǎn)品以其智能化和便捷化特點(diǎn)在建筑領(lǐng)域得到廣泛應(yīng)用[5]。但由于國(guó)內(nèi)外行業(yè)習(xí)慣的不同,Revit中某些功能具有局限性,影響工作效率,而其中標(biāo)注功能尤為突出。
標(biāo)注可以把圖紙模型中的各個(gè)構(gòu)件的尺寸、材質(zhì)等信息直觀有效的表現(xiàn)出來(lái)。由于Revit為國(guó)外軟件,Revit自帶的引線標(biāo)注方式和國(guó)內(nèi)行業(yè)的標(biāo)注習(xí)慣有所差異,使用Revit自帶的注釋功能對(duì)梁、柱進(jìn)行標(biāo)注的效果如圖1所示。
Revit系統(tǒng)自帶的注釋功能有兩個(gè)顯而易見(jiàn)的缺點(diǎn):
1)文字下方無(wú)下劃線,不符合國(guó)內(nèi)標(biāo)注規(guī)范。
2)標(biāo)注引線起點(diǎn)位置固定(默認(rèn)為構(gòu)件中心),挪動(dòng)標(biāo)注位置時(shí)該點(diǎn)不會(huì)移動(dòng),造成諸多不便。
因此為了使Revit更好地適應(yīng)國(guó)內(nèi)行業(yè)設(shè)計(jì)和工作流程,使其操作和標(biāo)準(zhǔn)效果符合行業(yè)繪圖習(xí)慣及規(guī)范,需對(duì)Revit進(jìn)行二次開(kāi)發(fā)。
Revit API,指的是Revit Application Programming Interface,常稱為Revit應(yīng)用程序開(kāi)發(fā)[6]。Revit系列的建筑、結(jié)構(gòu)、設(shè)備三個(gè)產(chǎn)品都有對(duì)應(yīng)的API,這些API被整合成一個(gè)總的API包,稱為Revit API[7]。
Revit API包括一些基本主題:插件集成(Add-in Integration),在Revit中必須對(duì)插件進(jìn)行注冊(cè)后才能進(jìn)行調(diào)用[8]。Revit應(yīng)用類和文檔類(Application and Document),主要包括Application,UIApplication,Document和UIDocument這幾類,一個(gè)Revit應(yīng)用對(duì)象對(duì)應(yīng)一個(gè)獨(dú)立的Revit會(huì)話,用戶可以通過(guò)這個(gè)對(duì)象訪問(wèn)Revit文檔、選項(xiàng)以及其他應(yīng)用范圍的數(shù)據(jù)和設(shè)置。元素集(Elements-Essentials),主要包括各類元素的類別、機(jī)制和特征等;過(guò)濾器(Filtering),就是從文件中過(guò)濾出所需要的元素;選擇集(Selection),就是使用文檔中選中的元素的集合;參數(shù)(Parameters),大多數(shù)的元素信息都是被當(dāng)做參數(shù)進(jìn)行存儲(chǔ)的;使用Revit API可以對(duì)Revit族進(jìn)行創(chuàng)建和修改,以及對(duì)一些族實(shí)例進(jìn)行應(yīng)用載入。
Revit2014是基于.NET 4.0的運(yùn)行環(huán)境,所以需要使用Visual Studio 2010或者更高的版本,用.NET 4.0環(huán)境來(lái)編譯。
Revit開(kāi)發(fā)工具還有很多,例如RevitSDK,這是一個(gè)Revit API的幫助文檔,里面包含了許多帶源代碼的例子,可供用戶學(xué)習(xí)使用。RevitLookup是Autodesk開(kāi)發(fā)的插件,不用寫(xiě)代碼就可以直觀的看到API的對(duì)象,它包含在SDK的壓縮包中,可以拿到源代碼之后自己進(jìn)行編譯;AddinManager也是Autodesk的官方插件,也包含在SDK文件中,它可以在不重啟Revit的情況下修改插件代碼并再次加載運(yùn)行[9]。
一個(gè)完整的標(biāo)注可拆分為標(biāo)注引線、標(biāo)注文字、文字下劃線三部分組成,因此需要解決引線和文字的創(chuàng)建、讀取標(biāo)注構(gòu)件信息、信息賦值等問(wèn)題。
引線、文字創(chuàng)建有多種方法,常用三種方法如表1所示。
以上三種方法都存在部分缺點(diǎn),借鑒上述方法中的核心思想,本文提出了一種新的標(biāo)注創(chuàng)建方法:通過(guò)Revit UI新建標(biāo)簽族,為文字下方添加橫線后再次通過(guò)Revit API載入進(jìn)行編輯。該方法的優(yōu)點(diǎn)為:
1)與行業(yè)標(biāo)注習(xí)慣相符,下劃線長(zhǎng)度可根據(jù)標(biāo)注文字字符串長(zhǎng)度自動(dòng)調(diào)節(jié);
2)下劃線與標(biāo)注文字為同一組,移動(dòng)方便。
通用標(biāo)注習(xí)慣中標(biāo)注文字內(nèi)容為當(dāng)前族類型名稱,如底縱梁-1 500×2 600。則思路轉(zhuǎn)變?yōu)樽x取當(dāng)前選中族類型的名稱。
表1 常用引線、文字創(chuàng)建方法
具體過(guò)程為先從FamilyInstance獲取FamilySymbol,然后從FamilySymbol.Family拿到對(duì)應(yīng)的族,最后調(diào)用Name屬性。但是對(duì)于系統(tǒng)族是獲取不到Family的,可根據(jù)CeilingType.FamilyName獲得其名稱。
為將獲取的族類型名稱賦予到標(biāo)簽族文字中,需找到標(biāo)簽族中標(biāo)注文字的ParameterName。RevitLookup是Autodesk平臺(tái)開(kāi)發(fā)的一款不用寫(xiě)代碼就可以直觀地看到API對(duì)象的插件。使用RevitLookup可很輕松的查找到標(biāo)注文字的ParameterName,將讀取到的族類型名稱賦到標(biāo)簽族文字中便實(shí)現(xiàn)了標(biāo)注功能。代碼如下:
string parameterName = "注釋上標(biāo)";
Parameter topdimname = fi.LookupParameter(parameterName);
string text = symbolname;
topdimname.Set(text)。
使用RevitLookup讀取標(biāo)簽族中下劃線名稱,根據(jù)標(biāo)注文字字符串長(zhǎng)度對(duì)下劃線長(zhǎng)度重新賦值。
采用對(duì)標(biāo)簽族二次開(kāi)發(fā)后的插件標(biāo)注效果如圖2所示。
標(biāo)注效果符合國(guó)內(nèi)行業(yè)習(xí)慣,且引線長(zhǎng)度根據(jù)文字長(zhǎng)度自動(dòng)調(diào)節(jié),文字內(nèi)容也可再次進(jìn)行修改。
本文通過(guò)對(duì)比分析幾種常用創(chuàng)建引線及文字的方法優(yōu)缺點(diǎn),借鑒其思想,提出采用Revit UI新建標(biāo)簽族,再通過(guò)Revit API載入進(jìn)行編輯的新思路,以UI與API相結(jié)合的方式創(chuàng)建引線標(biāo)注插件。該標(biāo)注插件能夠滿足設(shè)計(jì)工作中對(duì)于標(biāo)注的需要,大大提高工作效率。開(kāi)發(fā)過(guò)程及思路可為行業(yè)其他領(lǐng)域的二次開(kāi)發(fā)提供借鑒。