宋 杰, 張亞棟, 王孟進, 張錦華, 范俊余
(解放軍理工大學 國防工程學院, 江蘇 南京 210007)
?
Revit與ANSYS結構模型轉換接口研究
宋杰,張亞棟,王孟進,張錦華,范俊余
(解放軍理工大學國防工程學院, 江蘇南京210007)
摘要:復雜荷載作用下結構的精細化數值分析是結構和抗爆工程研究領域的重要趨勢。Revit作為一款功能強大的結構建模軟件,其中包含大量建筑物的物理和功能特性信息,是結構分析非常需要的,但通用大型結構分析軟件如ANSYS通常都不具備直接獲取這些信息的能力。本文提出了基于運用Revit及Revit API技術的模型轉換方法,在Visual Studio 2012平臺上用C#語言進行二次開發,獲取結構分析建模軟件所需的幾何參數、彈性模量、密度、泊松比等數據,并對復雜的幾何模型進行了切分處理,把提取的數據整理成ANSYS APDL命令流格式,從而實現了Revit模型到ANSYS分析模型的直接轉換,體現出兩者的優勢互補和轉換的快速高效。最后,在模型轉換的基礎上進行網格劃分,給出一個工程轉換實例進行驗證,在ANSYS中查看各項數據參數,數據信息內容符合分析計算要求,驗證了模型轉換程序的正確性和實用性。
關鍵詞:Revit;ANSYS;模型轉換;二次開發
經濟的快速發展促進了建筑物的大幅度增加和更新換代,各種復雜和異形建筑不斷涌現[1],這就給建筑建模和分析工作帶來了挑戰。為了快速和精細化地實現以上功能,必須借助于強大的有限元分析軟件。
ANSYS具有較強的有限元分析功能,在土木工程等諸多領域有著廣泛應用。ANSYS軟件包括前處理模塊(PREP7)、分析計算模塊(SOLUTION)和后處理模塊(POST1和POST26)三個模塊[2],其自帶建模功能相較于其強大的結構分析功能遜色不少[3],尤其是對異形和復雜建筑,做到精細化建模則較為繁瑣和復雜,需要花費大量的時間和精力,很大程度上制約和限制了該軟件的使用。對于結構分析人員來說,如何快速有效建立結構的精細化分析模型,是一個長期探討的問題。
BIM(Building Information Modeling)是指建筑信息模型,通過建立建筑工程各個構件的虛擬模型,并將構件的各種信息數據與模型相關聯,從而通過數字信息仿真來模擬建筑物真實信息。Autodesk Revit作為應用廣泛的三維BIM建模軟件,為設計師和工程師在建筑領域的設計和施工提供了優秀平臺,其數字化模型集成的信息量非常豐富,包括大量的幾何信息和非幾何信息,支持建筑項目所需的整體設計、出圖和明細表等,均能以完整數據庫的信息表現出來[4],且這些數據允許用戶通過二次開發提取使用[5]。Revit能在較快時間內、最大限度地對建筑物實體及各個細部結構進行還原,為工程分析向精細化發展提供了可能。
目前,許多流行的結構設計軟件如ETABS、Robot、PKPM、YJK以及SAP2000等均開發有與Revit之間的數據轉換接口[6]。這些程序多基于工程設計目的考慮,在模型轉換過程中對結構細節往往做了許多假設簡化,將實體構件轉化為結構單元,使得轉換后的模型不適合通用目的和精細化的分析需要。同時,眾多轉換程序基于IFC中間格式實現[7,8],冗余信息太多而轉換效率低下。然而,作為主流分析軟件的ANSYS與Revit各自擁有不同的文件存儲方式和數據格式,不能直接進行數據交換共享。為此,本文研究提出了一種快速的結構模型轉換方法,利用該方法可以直接從Revit結構模型生成ANSYS分析所需的物理模型,并能最大程度地保留結構的各種構造細節,極大方便了后續分析工作。
1開發目標與思路
1.1ANSYS建模及模型轉換分析
ANSYS軟件有多種建模方法,傳統的方式即在GUI中通過創建“關鍵點→線→面→體→節點→單元”的“自下而上”的實體建模方式,費時費力,對復雜模型處理難度大,靈活性差。這種方式也可以通過ANSYS參數化設計語言APDL編寫的文本文件,以命令流的形式完成,但也存在著創建大型模型時查錯困難等問題[9]。
由于ANSYS在結構分析領域舉足輕重的地位,許多CAD軟件如Pro/E、Inventor、UG等均提供了與ANSYS之間的模型轉換接口[3,10,11],同時ANSYS還具有通過標準數據格式如ACIS、IGES等輸入幾何模型的功能,使得ANSYS針對復雜結構的建模能力得到增強。雖然Revit軟件也可以輸出ACIS格式的模型,如圖1所示。但是這個結構實體只是一個整體閉合的幾何體,導入ANSYS做結構分析時不能直接進行單元網格劃分,需要手工切割成形狀相對簡單的幾何體,并作必要的修補,否則不能劃分高質量的網格,也難以進行精細的結構描述。同時,通過ACIS導入的模型不能體現各個構件的獨立性,需要手工指定各個構件的材料信息,模型切分和材料賦值的工作量依然很大。另外,這種轉換方式容易出現幾何數據的丟失和轉換不徹底的情況,效果往往并不理想。本文針對復雜結構建模及后續修補工作的不便,直接通過二次開發得到適合ANSYS劃分網格的構件切分塊體,不需要后續手工調整,一次性生成符合ANSYS精細網格劃分要求的模型。
1.2Revit到ANSYS模型轉換開發思路
Revit模型包含的數據量很大,其中包括結構分析所需的構件ID、空間位置、幾何尺寸(長、寬、高)和材質信息(彈性模量、密度、泊松比)等[12]。這些數據也是ANSYS結構建模的必要信息,可以通過API編程直接讀取出來。本文開發思路是,先借助Revit API將上述數據讀取出來,通過幾何切分算法將具有復雜幾何關系的模型切分成具有規則形狀的幾何體,再用ANSYS 參數化設計語言APDL以命令流形式寫成文體文件,在ANSYS中讀入該文件即可生成所需的分析模型。
本文方法可一次性完成模型的轉換,避免手工操作中可能的重復及人為錯誤。
1.3開發工具及模式
Revit系列軟件提供了可以擴展產品功能的應用程序編程接口——Revit API,包括訪問文檔中對象API、用戶選擇交互API、文檔級別事件API、對象過濾API和族創建API等,功能十分豐富。Revit API包含在兩個接口組件文件RevitAPI.dll和RevitAPIUI.dll中,支持在.NET環境中進行開發,兼容的.NET語言包括Visual Basic.NET、C#和C++/CLI。
本文開發使用C#語言。該語言繼承和結合了C、C++和VB的優點,可以快速地編寫各種基于MICROSOFT.NET平臺的應用程序,便于在Microsoft Visual Studio中進行跟蹤調試,是.NET開發的首選語言。本文開發環境為Microsoft Visual Studio 2012及Microsoft.NET Framework 4.5。
Revit二次開發支持兩種模式,分別為外部命令方式(External Command)和外部應用方式(External Application)。其中外部應用方式具有添加菜單和工具條或其它初始化命令的功能,在啟動和關閉Revit.exe時自動執行,與Revit原菜單融為一體,操作方便,本文選擇該方式進行開發。
2程序實現
2.1程序開發流程
程序開發流程如圖2所示,首先對模型中所有圖元進行尋找和過濾,判斷族類型并分類收集存儲,通過遍歷判斷出不同材料信息的族實例并進行編號,然后獲取構件的角點坐標,利用它們之間的相互關系進行切分。具體方法是:先利用與柱相交的主、次梁對柱進行切分,再利用與板相交的柱對板進行切分,用板的厚度切分相交的梁和柱,最后再用次梁來切分主梁,切分過程中保留構件的材料信息,完成整個模型的切分工作。切分結束后獲得一系列幾何形狀簡單的立方塊,將其按ANSYS APDL語言格式生成文件輸出。

圖2 接口程序算法流程
2.2算法要點
根據算法流程圖,在Visual Studio平臺上利用C#語言中豐富的數組表達式、函數、流程控制等數據表達結構完成開發目的。本文開發需求包括四個方面:一是獲取圖元的材質信息,包括構件的楊氏模量、泊松比、密度等材料特性;二是獲取圖元的幾何信息,即構件“左下-右上”對角點空間坐標;三是對相交的構件利用其角點坐標進行判斷切分;四是通過構件的角點坐標確定出所需求幾何塊體的空間坐標,并按照ANSYS APDL語言格式進行排列,輸出到指定文檔。其核心代碼介紹如下:
(1)遍歷模型梁、板、柱、墻,各自獲取它們的集合。
Filtered Element Collector collector1 = new Filtered Element Collector(doc); //創建一個過濾收集器
Element Category Filter filter1 = new Element Category Filter(Built In Category.OST_Walls); //通過過濾獲取所有墻類型
I List
Filtered Element Collector[]collectors={collector1, collector2, collector3, collector4,...,}; //對所有構件類型進行過濾
//對所有構件類型進行遍歷
foreach (Filtered Element Collectorele Collector in collectors)
{
}
(2)遍歷各個構件的材質信息,獲取它們的楊氏模量、泊松比和密度。
//遍歷所有構件材質信息集合
foreach (Element elem in eleCollector)
{
inti = -1;
Element Pick = elem;
MaterialSet pw = Pick.Materials;
}
//遍歷獲取一類構件材質信息,并把它定義為圖元屬性集
foreach (Material m in pw)
{
Property Set Elementstructual Asset = doc.Get Element(m.Structural AssetId) as Property Set Element;
}
//對構件材質信息進行判斷并提取
if (structural Asset != null)
{
int number = -1;
double temp0 = structural Asset.Get Structural Asset().Young Modulus.X / 304800;
double temp1 = structural Asset.Get Structural Asset().Poisson Ratio.X;
double temp2 = structural Asset.Get Structural Asset().Density * 16.02;
}
對王家會站1992—2016年中水期流量實測流量資料進行統計分析。水位流量關系相關性比較散亂,單值化處理后的關系性也較差,見圖5。主要原因為中水期流量較小,影響流量變化的控制因素不如高水時穩定。通過對資料的分析,選取了近六年即2011—2016年的實測資料進行單值化處理,相關性比較好,見圖6。
//在所有已經識別的材質中尋找當前材質的編號。如果沒找到,賦予一個新的編號。
for (int k = 0; k < total; k++)
{
if (Math.Abs(temp0 - para Data Wall[k, 0]) < 0.001 &&
Math.Abs(temp1 - para Data Wall[k, 1]) < 0.001 &&
Math.Abs(temp2 - para Data Wall[k, 2]) < 0.001)
{
break;
}
} //沒找到
if (number == -1)
{
total = total + 1;
i = total - 1;
para Data Wall[i, 0] = temp0;
para Data Wall[i, 1] = temp1;
para Data Wall[i, 2] = temp2;
}
(3)遍歷構件角點坐標,利用它們的相互關系進行排序。
//為切分板而確定柱的位置
if (((cxmin { Acxmin= cxmin; Acymin=cymin; Acxmax=cxmax; Acymax=cymax; } (4)按照ANSYS所需要的格式輸出內容。 //輸出所有的材質信息 for (int k = 1; k <= total; k++) { string s = "
" + "MP" + "," + "EX" + "," + k + "," + Convert.To String(para Data Wall[k - 1, 0]) + "
" + "MP" + "," + "PRXY" + "," + k + "," + Convert.To String(para Data Wall[k - 1, 1]) + "
" + "MP" + "," + "Dens" + "," + k + "," + Convert.To String(para Data Wall[k - 1, 2]) + "
"; } //找到了材質的編號,輸出角點坐標 if (number >= 0) { number = number + 1; double Wall Start Point1 = Pick.get_Bounding Box(doc.Active View).Min.X; ......; string wabs = Convert.To String(Wall Start Point1 * 304.8) + ...+...; } 按上述算法編寫程序并進行編譯,按Revit規定的路徑存放生成的接口類庫文件,啟動Revit,程序自動調入該庫文件,生成Revit To Ansys菜單以及其中的ANSYS按鈕,如下圖3所示。 圖3 Revit主窗口 3算例分析 針對某建筑模型,將Revit到ANSYS的轉換過程進行了演示。結果顯示,本文開發的接口程序和算法準確可靠地實現了模型之間的轉換。 首先,在Revit程序中點擊Revit To Ansys菜單下ANSYS按鈕,生成APDL命令流文件,如圖4所示。該模型包含梁、板、柱構件75個,模型轉換在3秒內完成,導入ANSYS生成分析模型用時5秒,程序效率高。 圖4 目標文件數據 將圖4中的目標文件按照“柱→梁→板”依次導入到ANSYS中,獲取模型的效果圖(圖5~7)。導入時可以根據需要選取其中的部分構件,這樣就使目標文件中的數據具有可控性和靈活性。 圖5 某建筑模型“柱”展示效果 圖6 某建筑模型“柱→梁”展示效果 圖8 是上述模型經切分后的情況。由圖9可以看出,柱在X、Y方向上分別被主、次梁切分,板在X、Y方向上分別被和它相交的柱切分,柱在Z方向上分別被主、次梁和板切分,主梁在Z方向上分別被次梁和板切分,次梁在Z方向上被板切分。切分后的模型由簡單的六面體構成,非常適合ANSYS劃分網格。 圖9、圖10分別是模型網格劃分和結構在重力作用下的變形云圖??梢钥吹?,整個結構模型劃分的有限元網格非常規整,質量很高。重力作用下結構的位移場保持連續,在構件連接處沒有突變,表明模型轉換過程中保持了構件之間連接的完整,模型的切分和轉換正確。 圖8 某建筑模型構件切分細部展示效果 圖9 某建筑模型網格劃分細部展示效果 圖10 某建筑變形云圖 4結論 本文使用C#編程語言與Revit API接口技術,將Revit結構模型切分成適合ANSYS結構分析的幾何塊體,實現了Revit模型到ANSYS分析模型的轉換,給出了詳細的接口程序設計流程和算法要點,開發了實用的模型轉換接口程序。算例表明,該程序可以完整地將Revit結構模型的幾何信息及物理信息可靠地傳遞到ANSYS中,能夠保證結構細節的完整表達。 所開發的接口程序,從Revit模型中提取信息到導入ANSYS軟件生成目標模型,整個過程無需人工干預,大大減少在ANSYS中直接建?;ㄙM的時間,在轉換效率上有很大的優勢,具有很好的實用價值。 Revit模型中存儲了大量信息,通過二次開發可以分別提取轉化為多種格式。本文算法具有通用性,可供其他接口開發人員參考。 參考文獻 [1]周擁軍, 趙文光. 建筑結構多元化[J]. 華中科技大學學報(城市科學版), 2007, 24(3): 74-77. [2]邢艷洪. 基于 ANSYS二次開發的電梯參數化有限元分析系統 [D]. 沈陽: 東北大學, 2006. [3]張爾文, 孫友松, 周先輝. UG 與 ANSYS 模型數據轉換的方式及實例分析[J]. 機械制造與自動化, 2007, 36(2): 90-91. [4]徐迪. 基于 Revit 的建筑結構輔助建模系統開發[J]. 土木建筑工程信息技術, 2012, (3): 71-77. [5]姜劍峰. BIM 技術在建筑方案設計中的應用研究——以青島理工大學黃島校區圖書館方案設計為例[D]. 青島: 青島理工大學, 2012. [6]李艷妮. 基于BIM的建筑結構模型的研究[D]. 西安: 西安建筑科技大學, 2012. [7]張建平, 張洋, 張新. 基于IFC的BIM三維幾何建模及模型轉換[J]. 土木建筑工程信息技術, 2009, (1): 40-46. [8]李犁, 鄧雪原. 基于IFC標準BIM數據庫的構建與應用[J]. 四川建筑科學研究, 2013, (3): 296-301. [9]張濤. ANSYS APDL參數化有限元分析技術及其應用實例[M]. 北京: 中國水利水電出版社, 2013. [10]孫瑩. Pro/E與ANSYS10.0之間的數據轉換和連接[J]. 一重技術, 2007, (3): 86-87. [11]王洪海. UG到ANSYS有限元模型的轉換[C]//第二屆中國CAE工程分析技術年會論文集. 2006: 22-26. [12]董立坤, 王徽. PKPM與ETABS結構模型數據轉換接口的實現[J]. 土木建筑工程信息技術, 2012, 4(3): 45-51. Research of Model Exchange Interface Between Revit and ANSYS SONGJie,ZHANGYa-dong,WANGMeng-jin,ZHANGJin-hua,FANJun-yu (School of Defense Engineering, PLA University of Science and Technology, Nanjing 210007, China) Abstract:The structure of fine numerical analysis under complicated load is an important trend in the research field of engineering structure and anti-explosion. As a powerful structural modeling software, Revit contains a large number of physical and functional characteristics of the building information, which is very necessary towards structural analysis. The general large structural analysis software, such as ANSYS, however, usually does not have the ability to directly obtain the information. It is put forward the technology of model transformation based on Revit and Revit API in this paper. Through the secondary development by using C# language on the platform of visual studio 2012, we obtained the structure analysis data of geometric parameters, elastic modulus, density, Poisson's ratio for the modeling, then extracted and divided them into command stream format of ANSYS APDL. Consequently, it has been realized the direct conversion of Revit structure model to the ANSYS program, reflecting both of the complementary advantages and the conversion of fast and efficient. In the end, grid division is carried out on the basis of model transformation. A project conversion instance is given by. Subsequently, the data parameters are viewed in ANSYS and met the requirements of analysis and calculation. The correctness and practicability of the model conversion program are verified. Key words:Revit; ANSYS; model transformation; secondary development 中圖分類號:TU375; TP312 文獻標識碼:A 文章編號:2095-0985(2016)01-0079-06 基金項目:國家自然科學基金(51021001) 作者簡介:宋杰(1988-),男,甘肅天水人,碩士研究生,研究方向為防災減災工程及防護工程(Email:songjie2005@126.com) 收稿日期:2015-06-28修回日期: 2015-09-28





