程 浩,李 志,陳 俊,田龍強
(中國電力工程顧問集團中南電力設計院有限公司,湖北 武漢 430071)
當前,工程設計正快速從傳統(tǒng)的二維設計向三維設計邁進,隨著建筑信息模型(building information modeling,BIM)技術(shù)的普及,一些傳統(tǒng)的設計方法也在不斷地被新的信息化技術(shù)所替代。
巖土工程勘察報告是各類工程結(jié)構(gòu)專業(yè)設計的重要輸入條件和設計依據(jù),設計專業(yè)需要從中獲取地表高程、各地層厚度及分布、巖土物理力學指標等信息。采用傳統(tǒng)方式從鉆孔剖面圖、地質(zhì)剖面圖以及勘察報告中獲取以上信息的過程較為繁瑣,效率低且容易出現(xiàn)差錯。目前,國內(nèi)外諸多科研機構(gòu)和工程勘察企業(yè)已經(jīng)能夠借助BIM技術(shù)建立三維地質(zhì)模型并應用于工程[1-4],由于其采用了特定的算法,理論上準確性將優(yōu)于傳統(tǒng)方法。但是,由于業(yè)務劃分及技術(shù)層面的原因,建立三維地質(zhì)模型所采用的平臺(如CATIA、ItasCAD等)往往與設計平臺不同,使接收地質(zhì)勘察資料的下游設計專業(yè)難以直接利用三維地質(zhì)模型及相關(guān)數(shù)據(jù),專業(yè)間數(shù)字化的信息傳遞方式中斷,三維設計的優(yōu)勢無法進一步得到發(fā)揮。
Revit具有開放的應用程序編程接口(application programming interface,API),便于進行二次開發(fā),具有良好的擴展性,因而被廣大設計企業(yè)用作三維設計的基礎平臺。由于三維地質(zhì)模型在巖土工程專業(yè)軟件中建立,其文件或數(shù)據(jù)格式并不能完全被Revit軟件識別,因而難以直接被下游專業(yè)使用,協(xié)同設計的目標受阻,此時只能考慮開發(fā)相關(guān)的程序以實現(xiàn)地層信息的讀取。饒嘉誼[5]等通過在Revit軟件中編寫插件,讀取勘察報告的鉆孔數(shù)據(jù),以插值的方式生成三維地質(zhì)模型。范光龍[6]等設計了相關(guān)地質(zhì)模型創(chuàng)建程序,應用Dynamo創(chuàng)建地形地質(zhì)實體模型并將其置入Revit。以上兩種方式均通過勘察專業(yè)提供的鉆孔資料在Revit軟件中實現(xiàn)了三維地質(zhì)模型的創(chuàng)建,但相對于專業(yè)的地質(zhì)建模軟件,其地層模擬算法的準確性有待考量。陳國良[7]等通過工業(yè)基礎類(industry foundation classes,IFC)實體擴展及屬性集擴展模式,建立了面向三維地質(zhì)模型的擴展模型,實現(xiàn)了IFC文件中的地層信息與地質(zhì)屬性的擴展和集成,但該方法需要針對不同的地質(zhì)建模軟件開發(fā)數(shù)據(jù)轉(zhuǎn)換插件,在接收IFC地質(zhì)資料的軟件端也需要安裝相應的插件解析數(shù)據(jù),從而保證地質(zhì)模型的正確轉(zhuǎn)換和解析,因此其適用性存在一定的限制。本文將從地質(zhì)資料接收專業(yè)的角度出發(fā),探討一種基于Revit進行二次開發(fā)以讀取地質(zhì)信息的具體實現(xiàn)方法。
IFC標準是由國際協(xié)同工作聯(lián)盟(International Alliance for Interoperability,IAI)為建筑行業(yè)發(fā)布的建筑產(chǎn)品數(shù)據(jù)表達標準,用于在不同的軟件平臺之間共享工程數(shù)據(jù),在全球已得到廣泛應用。目前較多三維地質(zhì)建模軟件以及包含Revit在內(nèi)的多數(shù)三維設計軟件對IFC格式的文件具有較好的支持,因此可借助IFC文件實現(xiàn)地質(zhì)信息的傳遞。
Revit雖然能夠打開IFC格式的地層模型文件,但在未經(jīng)特殊處理的情況下,從三維地質(zhì)建模軟件中導出的地層模型一般不包含工程地質(zhì)屬性信息,僅保留地層的幾何模型及地層編號或名稱等標識,因此只能用來模擬各地層的分界面,而工程地質(zhì)屬性信息則需要采用其它方式傳遞。鑒于接收地質(zhì)資料的專業(yè)一般對地質(zhì)信息的需求并不復雜,將地形模型和地質(zhì)信息分開傳遞再進行關(guān)聯(lián)輸出也是一種簡便可行的方式。工程地質(zhì)屬性與地層標識具有一一對應關(guān)系,可將各地層的地質(zhì)屬性信息導出為格式化的數(shù)據(jù)或制作成數(shù)據(jù)表,則從IFC地層幾何模型中僅需要獲取給定位置處地層的幾何信息及其標識,然后再與對應地層的工程地質(zhì)屬性關(guān)聯(lián),即可得到給定位置處完整的地質(zhì)信息,整體實現(xiàn)過程如圖1所示。
圖1 三維地質(zhì)模型信息的轉(zhuǎn)換與傳遞過程
各三維地質(zhì)建模平臺采用的數(shù)據(jù)結(jié)構(gòu)和地質(zhì)模擬算法一般不同,其導出的IFC文件的數(shù)據(jù)結(jié)構(gòu)也不相同,地層模型可能被處理為地層分界面,也可能被處理為實體,但通過Revit解析之后,最終都將表現(xiàn)為幾何基元類[8]或其組合,如Face、Edge、Mesh或Solid等,它們的幾何信息都可以通過Revit API提供的相關(guān)屬性或方法來獲取,區(qū)別在于相關(guān)元素的查找和判斷的過程有所不同。鑒于三維地質(zhì)建模軟件眾多,本文以ItasCAD軟件導出的模型為例介紹具體讀取方法,對于其它軟件導出的地層模型,可參考本文方法,根據(jù)具體情況編寫讀取地層幾何模型的代碼。
圖2為從ItasCAD軟件導出的IFC格式的三維地層模型,地表及每個地層的底面被處理為多個三角網(wǎng)格(Mesh)組成的曲面,曲面之間為空,沒有填充表示土體的實體模型。各層的地形曲面在Revit中的族類型為“場地”。
圖2 IFC格式的三角化網(wǎng)格三維地層模型
如圖3所示,由于各地層的底面為網(wǎng)格化的曲面,對于勘察區(qū)域平面內(nèi)的給定點,其在各層三角網(wǎng)格面上投影點之間的區(qū)域即為該點處各地層的分布范圍,投影點的標高即為地層底面標高,各地層的厚度即為相鄰投影點標高的差值。地層屬性信息在地質(zhì)模型文件外部通過數(shù)據(jù)表保存,通過地層標識即可進行查詢。程序可以分為以下過程來實現(xiàn):
圖3 地層的地形網(wǎng)格曲面及投影點
1)打開地質(zhì)模型文件,獲取地層網(wǎng)格曲面元素;
2)求解投影點坐標,獲取地層分布;
3)查詢并關(guān)聯(lián)地層屬性信息。
以下將分別討論具體的實現(xiàn)方法。
若要獲取各三維網(wǎng)格的幾何信息,必須先獲取模型中所有的三維網(wǎng)格曲面元素。
對IFC文件的讀寫操作需要在IExternalCommand接口的Execute方法中實現(xiàn)。打開IFC地質(zhì)模型文件可采用Application.OpenIFCDocument方法,也可先將*.ifc文件另存為*.rvt文件,再采用Application.OpenDocumentFile方法打開,后者打開文件的速度更快。以上兩種方法僅將模型文件加載到了內(nèi)存當中,而并未在Revit的用戶界面中顯示。
對打開的文件應用過濾器,以獲取各地層三維網(wǎng)格曲面的實例:
此處的過濾器使用了Revit內(nèi)建族類別BuiltInCategory.OST_Site作為參數(shù),對于不同三維地質(zhì)軟件,其導出的地層模型族類別可能不同,可在Revit中查看地層網(wǎng)格曲面所屬具體的類別之后,再確定過濾方式。
如圖3所示,在IFC地層模型文件中,每個地層曲面被劃分為多個三角網(wǎng)格,求解曲面上投影點的過程即轉(zhuǎn)化為求解三角網(wǎng)格所在平面上的投影點的過程,因此需要先獲取投影點所在的三角網(wǎng)格。
Revit API提供了MeshTriangle.get_Vertex方法獲取三角網(wǎng)格在局部坐標系下的角點,可通過坐標變換之后獲取其在世界坐標系中的坐標。在xoy平面,對于任一三角形網(wǎng)格,當給定點的坐標在其所有角點坐標的最大值與最小值所形成的區(qū)間之外時,給定點的投影明顯在該網(wǎng)格之外,可快速排除;反之則需進行精確判斷,可以采用如下方法:
判斷給定點和三角網(wǎng)格在xoy平面中投影的相對關(guān)系,設有與三角形網(wǎng)格三邊同法線的三個向量,其方向形成閉合面(即向量相互首尾相連),當給定點均在三個向量的同一側(cè)時,則可判定該點在三角形內(nèi)。
對于向量p、q有如下性質(zhì):
若p×q>0,則p在q的順時針方向。
若p×q<0,則p在q的逆時針方向。
若p×q= 0 ,則p與q共線。
則對于給定點以及三角網(wǎng)格的三個頂點,可按以上方法判斷其位置關(guān)系,從而獲取投影點所在的三角網(wǎng)格。
本過程主要實現(xiàn)代碼如下:
由于需要獲取給定點處所有的地層信息,此處首先對模型中所有的地層族實例進行遍歷,依次在每個地層曲面中進行查找和判斷。
如圖4所示,在一個地層模型文件中,同一個族的不同族類型,其名稱(Name屬性)具有唯一性,因此根據(jù)地形曲面元素所屬的族及其Name屬性即可確定其所對應的地層名稱。地層元素的Name屬性一般對應于巖土工程勘察報告中的地層編號,在此種情況下無需再根據(jù)地層元素所屬的族進行區(qū)分。在本例中,不同的地層被導出為不同的族,且各族僅有唯一的族類型,因此可直接將地層元素的Name屬性作為各地層的標識。
圖4 地形曲面族實例及其屬性
判斷給定點的投影是否在三角網(wǎng)格投影范圍內(nèi)的過程主要是向量的構(gòu)造及計算,在獲取三角網(wǎng)格的角點坐標之后,此過程相對簡單,上述代碼從略。
以上過程中需注意以下問題:
1)單位換算。從Revit API中獲取的三角網(wǎng)格角點坐標等的單位為英尺,而國內(nèi)在工程中通常使用公制單位,因此需先統(tǒng)一單位之后再進行判斷。
2)從地層族實例中獲取三角網(wǎng)格面的過程。通過FamilyInstance的get_Geometry方法可從地層族實例中獲取其包含的GeometryElement,其中可能包含多個GeometryElement或GeometryObject。而在其中的GeometryElement中,可能存在更深層次的包含關(guān)系,需要多次使用SymbolGeometry屬性獲取更深層的GeometryElement,直至獲取三角網(wǎng)格面Mesh(繼承于GeometryObject)。上述示例代碼僅作參考,實際需根據(jù)地層模型的構(gòu)成關(guān)系進行對應的查找和判斷操作。
對于族實例的內(nèi)部組成和嵌套關(guān)系不明確的情況,可提前在Revit中打開地層模型文件,使用其它輔助工具(如Revit Lookup等)進行查看,能夠比較清晰地了解地層族實例的內(nèi)部組成關(guān)系,在編寫代碼時將更有針對性,提高效率。
從地層族實例中獲取三角網(wǎng)格面,除采用上述方法之外,也可在調(diào)用get_Geometry方法之后,直接使用獲取到的GeometryElement調(diào)用GetInstanceGeometry方法,無需通過逐層查找,即可較快速地獲取三角網(wǎng)格面Mesh。
3)三角網(wǎng)格面的坐標變換。通過GeometryInstance.GetSymbolGeometry方法以及GeometryElement.SymbolGeometry屬性所獲取的三角網(wǎng)格面使用的是局部坐標系,需要通過坐標變換才能得到在模型坐標系下的表達。坐標轉(zhuǎn)換矩陣可通過GeometryElement.Transform屬性獲取,使用Transform.OfPoint方法可將轉(zhuǎn)換矩陣應用于傳入的點,獲取轉(zhuǎn)換后的坐標。通過GeometryInstance.GetInstanceGeometry方法所獲取的三角網(wǎng)格面則直接是在模型坐標系下的表達,無需再進行坐標變換。根據(jù)Revit API的說明,此方法在執(zhí)行過程中涉及較大量的計算操作,可能會影響程序的執(zhí)行效率。
在獲取投影點的所在的三角網(wǎng)格之后,即可根據(jù)直線與平面的空間幾何關(guān)系求解投影點的坐標。以上過程均為向量運算過程,不再列出。
除地表之外,對于每個地形曲面,求解到的投影點與其上一層投影點Z坐標之差即為該層的厚度,此曲面的Name屬性即為當前地層的名稱,依次獲取各層的厚度之后即可得出該點處地層的分布情況。
物理力學指標等工程地質(zhì)屬性信息是地質(zhì)勘察報告中的重要內(nèi)容,也是設計專業(yè)在工程設計過程中的重要輸入條件之一。前述過程實現(xiàn)了從IFC地層模型文件中獲取給定點處的地層分布情況,但各地層的工程地質(zhì)信息尚需從IFC文件外部獲取。
各地層的工程地質(zhì)屬性數(shù)據(jù)可保存為表1所列的數(shù)據(jù)表,其中各地層的標識需與地層幾何模型中的標識保持一致,以建立關(guān)聯(lián),便于查詢。表中的字段可根據(jù)工程需要進行設置,各字段的單位可另行設計其它數(shù)據(jù)表進行保存或在程序中統(tǒng)一約定。則當給定勘察區(qū)域任一點坐標時,即可通過地層幾何模型獲取該位置處的地層分布,根據(jù)地層標識查詢地層的工程地質(zhì)屬性信息,達到地質(zhì)信息讀取的目的。
表1 工程地質(zhì)屬性數(shù)據(jù)表示例
在完成以上功能之后,既可以將本程序封裝成為動態(tài)鏈接庫文件(*.dll),供其它程序調(diào)用,也可開發(fā)成為查詢工具,直接將獲取到的數(shù)據(jù)進行輸出。
采用本文所介紹的方法,某設計軟件在Revit中開發(fā)了地層查詢工具,并添加相關(guān)菜單項,如圖5所示。
圖5 軟件菜單
在設計前,巖土專業(yè)按照三維設計的要求,在提供勘察報告的同時,還提供了三維地質(zhì)模型及地層屬性表,結(jié)構(gòu)專業(yè)接收之后,可以使用地層查詢工具在Revit中選擇任意位置進行查詢,程序可以直接輸出該點處的地層分布情況。在總平面布置圖中選擇任意一點查詢,程序輸出結(jié)果如圖6所示,查閱與其對應的二維地質(zhì)剖面圖如圖7所示,對比可見二者比較接近。在勘探點平面布置圖中分別從鉆孔、剖面線以及剖面以外的位置各任選3個點作為樣本進行查詢,以人工從二維地質(zhì)剖面圖中查詢所得的結(jié)果為基準,程序查詢結(jié)果的差值見表2所列。考慮到地質(zhì)剖面圖的繪制誤差、人工查詢過程中的誤差以及地層分布本身的不確定性等眾多因素,對于工程設計而言,該結(jié)果在可以接受的范圍以內(nèi)。在實際工程應用中,該功能可減輕結(jié)構(gòu)專業(yè)在基礎設計工作中地質(zhì)信息查詢的工作量。
圖6 結(jié)果輸出示例
表2 程序查詢結(jié)果與剖面圖查詢誤差對比
圖7 地質(zhì)剖面圖(單位:m)
本文提出了一種通過三維地質(zhì)模型讀取地質(zhì)信息的方法,基于Revit進行二次開發(fā),以ItasCAD軟件導出的三維地質(zhì)模型文件為例,從地層模型及地層數(shù)據(jù)文件中讀取信息,從而快速獲取勘察區(qū)域內(nèi)任意位置處的地層分布情況,初步實現(xiàn)了地質(zhì)勘察與工程設計專業(yè)間的數(shù)據(jù)貫通,可減少設計專業(yè)查詢地質(zhì)信息的工作量,提高工作效率。
限于作者自身水平和當前三維設計技術(shù)發(fā)展現(xiàn)狀,本文介紹的方法雖然實現(xiàn)了地層信息的讀取,但仍存在以下問題需要深入研究:
1)對于地下水或溶洞等復雜的地質(zhì)情況,缺少相應的處理和讀取方式。
2)本文偏重地質(zhì)信息讀取過程,可在此基礎上向?qū)嶋H應用方面延伸:在結(jié)果的查詢方式上可添加其它查詢方法;在最終結(jié)果的表現(xiàn)方式上,可引入圖形化的表達方式,如輸出剖面圖等,將更為直觀易用。
3)從結(jié)果上看,三維查詢方式與傳統(tǒng)二維剖面圖存在一定的誤差,尤其是在距離鉆孔和剖面線較遠的地方差別較大,雖不能簡單地判定其中某一種方式的準確性,但欲使三維查詢方式更加容易被接受,仍需采取一定的措施減小二者的差異。