吝江峰 徐 鵬 左威龍
(江蘇省水利勘測設計研究院,江蘇 揚州225127)
如果說CAD是從手工繪圖到電子制圖(“甩圖板”)的一大進步,當時稱之為設計革命,那么現在的三維協同設計可說是設計理念和手段的更大飛躍。二維圖元化設計圖紙存在的錯、漏、碰問題,自身難以解決。三維信息化設計具有數字建模、數據庫共享、模擬現實、協同性好等諸多優點,同時減少設計過程中的錯誤和遺漏,提高設計成果的效率和品質,縮短因客戶需求而變更修改設計的時間,節省成本[1]。三維協同設計是將來設計發展的趨勢,三維協同設計底層支持三維信息模型的建立。
基于此,Autodesk公司以創建的智能模型為基礎提供Revit軟件產品,這款產品具有較好的兼容性,能靈活協同工作流程,而且同MicroStation、CATIA/Digital三維平臺相比,價格適中,通用性更強,適合中小型企業用戶。由于Revit主要側重于建筑領域,常規注釋和標識僅符合建筑繪圖規范,為了使Revit更好地適應水利工程設計和工作流程,亟需對Revit進行二次開發,使其操作和所繪制工程圖符合水利繪圖習慣及規范,使創建和表達水利工程三維的效率進一步提高,縮短利用Revit平臺設計水利項目的工作周期[2]。
注釋、標識是對工程圖紙進一步詮釋,是建造工程師了解設計者意圖的橋梁,也是設計工作中的重要組成部分。目前Revit軟件能在互交式界面(以下簡稱”UI”)完成大部分尺寸標注、高程標注和一些常規標注、注釋。
目前在Revit軟件UI通過兩種方式實現模型中圖元的注釋、標識。一種是通過“注釋”菜單下“按類別標記”選定被注釋對象進行注釋,注釋效果見圖1。這種注釋方式優點是從三維信息模型中自動讀取標識對象特定信息,無需手動輸入文字內容即可完成注釋,當模型信息更改時注釋信息也會自動更新。但這種方法缺點是:①Revit所涉及標記族有結構柱標記、結構桁架標記、結構框架標記、墻標記、專用設備標記等多達近百種標記,在注釋之前,先要根據所建圖元類型分別建立相應包含字體樣式、大小、顏色等信息的圖元類型標記族,假設要的注釋字體大小分別為3mm,3.5mm,4mm字體,需要分別建立3mm,3.5mm,4mm字體標記族,總計達到近300種標記族。體量大,不便于管理。②從標記效果來看,雖然文字位置可以調整,但不能進行旋轉,即文字只能水平放置;引線起點位置只能由Revit根據文字位置默認指定,不能修改,如圖1所示第一節翼墻注釋引線起始點放在被注釋體外;引線終點位置在文字左側中部或文字右側中部或文字下側中部,其位置也不允許用戶改變;文字下沒有水平引線。以上特點不符合現有水利繪圖習慣和規范。

圖1 通過UI按類別標記效果
另一種方法是通過“注釋”菜單,利用“詳圖線”配合“文字”工具完成注釋,既先畫出引線、文字下線條,插入文字并輸入相應內容,類似在Autodesk CAD中畫圖。此種方式優點是注釋放置位置、引線起點位置和終點位置可以靈活控制,文字修改方便。但這種方法的缺陷是:①文字長度更改后,繪制的文字下引線不會自動調整,需要手動調整;②繪制豎直或傾斜注釋,先插入水平文字后進行旋轉。放置傾斜注釋時,需要指定旋轉點和角度,這時需要繪制輔助線得到旋轉角度或進行多次旋轉操作。此種方法智能化程度低,重復操作,工作效率低。
綜上所述,雖然Revit軟件能在UI完成大部分尺寸標注、高程標注和一些常規標注、注釋,但UI中繪制的一些注釋、標識,要么不符合水利習慣及規范,要么操作繁瑣,效率低,亟需進行二次開發,使Revit更切合水利繪圖習慣和規范,更加行業化、專業化、高效化[3]。
Revit的應用程序編程接口 (Application Program Interface以下簡稱“API”)可用Visual Basic.NET、C#、以及C++/CLI等任何與.NET兼容的編程語言進行編程。本文主要介紹使用Visual C#進行二次開發的開發流程[4]。Revit提供2種方式來擴展其功能:一種方式是創建一個外部命令(ExternalCommand),這種方式由用戶點擊添加的命令按鈕來啟動二次開發生成的相應命令;另一種方式是添加一個外部應用(External Application),這種方式是添加一個菜單或工具條,二次開發生成的插件在啟動和關閉Revit時自動執行。
創建外部命令流程圖見圖2。外部應用的步驟和外部命令一樣,不同的是新建類從ExternalApplication派生,實現方法從OnStartup和OnShutdown方法實現。

圖2 RevitAPI外部命令創建流程圖及格式
針對UI中Revit常規注釋不足,采用C#語言進行二次開發實現所需功能。實現方案有3種:方案一是通過API實現UI中“詳圖線”的創建,配合“文字”工具完成所需注釋。此方法思路清晰,不足之處是在Revit中相同字符長度在不同視圖比例或標注字體樣式下所需水平線長度不等,文字與水平線間距也無法與不同視圖比例相匹配。方案二是通過API載入已建立標記族進入項目并修改族參數完成注釋。這種方式可以避免第一種方式因視圖比例和標注字體而產生影響,但修改族參數值會使整個項目的注釋都變為相同的文字內容。通過摸索和研究,方案三通過API載入已帶實例參數的標記族到項目完成注釋,實例參數的修改只修改當前族實例的文字內容。經過綜合比較,選定方案三思路運用VisualC#語言實現所需功能。
在二次開發中遇到了許多問題和難點,總結如下:①如何通過API建立詳圖線。在Revit創建詳圖線分為模型空間和族空間,對應的創建方法為doc.Create.NewDetailCurve(View,curve)和doc.FamilyCreate.New DetailCurve(View,curve)。在API中繪制詳圖線需要在草圖平面中進行,否則會提示“curvemustbe in plane”錯誤。②如何通過API建立繪制詳圖線的草圖平面,其對應方法為SketchPlane.Create(doc,plane),常規注釋常在平面視圖、剖面視圖、繪圖視圖、詳圖視圖、圖紙視圖中運用,需要獲得當前視圖類型,并得到當前視圖的坐標原點及向量來創建草圖平面。③怎么在API中實現,在不同類型視圖中通過鼠標光標點選定來確定注釋對象的放置位置,這個問題可以通過sel.PickPoint()實現。④如何通過API插入已建族的族實例,其對應命令為doc.Create.NewFamilyInstance,在創建族實例之前需要遍歷當前項目所有族,找到所要載入族。⑤在UI中放置族實例與當前視圖ActiveView.RightDirection平行,即放置后生成注釋族默認水平。但通過API載入族實例后通常與當前視圖ActiveView.RightDirection不平行,需要將族實例旋轉至目標位置,工程繪圖常規注釋中通常為水平,垂直和傾斜放置。這就需要得到放置族本身的X軸與當前視圖ActiveView.RightDirection的夾角,而后運用ElementTrans formUtils.RotateElement旋轉,繼而將族局部坐標系轉化為項目坐標,再將其轉化為視圖局部坐標。
基于常規注釋文字放置方向不同,依據上述方案編制了水平注釋插件、垂直注釋插件、傾斜注釋插件。其注釋效果和注釋菜單見圖3,插件的使用說明和提升效率見表1和表2。

圖3 二次開發的注釋菜單和其在項目中類別標記效果

表2 API插件創建后修改注釋使用說明提升效率對比表
本文介紹了目前UI空間中常規注釋的實現方法,之后,分析了各種方法的優缺點,明確論證二次開發的必要性,介紹了依托Revit平臺API的二次開發流程,詳細闡述了實現不同視圖類型常規注釋的3種不同方案。最終選定通過API載入已帶實例參數的標記族到項目中的方案,開發出了水平注釋插件、垂直注釋插件、傾斜注釋插件,這3種插件能快速完成滿足水利注釋習慣和水利制圖規范的常規注釋。通過插件生成常規注釋相比通過UI操作完成注釋,效率成倍增長,注釋更加智能化,大大縮短了設計周期。為Revit在水利行業其它方面的應用或其它行業領域的二次開發提供了借鑒經驗。
[1]宦國勝,王海俊,沈國華.水利工程中三維信息模型技術平臺的比選和應用[J].江蘇水利,2015(1):41-43.
[2]鄒茂娟,李海峰,姚建國.基于RevitMEP的水電站水力機械設計[J].中國農村水利水電,2012(7):176-181.
[3]廖小烽,王君峰.Revit2013/2014建筑設計火星課程[M].北京:人民郵電出版社,2013.
[4]Autodesk,Inc.Revit2012 APIDeveloper’s Guide,2011.