龔彥峰,程 巖,劉笑娣,王少鋒
(1. 中鐵第四勘察設計院集團有限公司,湖北 武漢 430063; 2. 水下隧道技術國家地方聯合工程研究中心,湖北 武漢 430063; 3. 上海同巖土木工程科技股份有限公司,上海 200092; 4. 上海地下基礎設施安全檢測與養護裝備工程技術研究中心,上海 200092)
盾構施工法以其機械化程度高、速度快已成為隧道建設最重要的施工方法[1]。目前管片結構圖繪制由設計人員借助CAD軟件完成,而管片結構空間形式復雜,各構件并非規則圖形,需從不同角度進行剖切與投影才能完整表達管片結構,同時管片幾何尺寸參數多,改變某一參數將導致設計人員不得不耗費大量時間進行全部重新繪制。人工繪制方法需要做大量的幾何運算,計算繁瑣且繪制不夠精細,存在著工作量大、易出錯等缺點。
在隧道出圖方面,相關學者進行了探索性研究。曾紅兵[2]針對油氣管道盾構隧道進行AutoCAD2004二次開發,在VS2002平臺利用ObjectARX2004語言進行隧道縱斷面繪圖;趙祥岍等[3]將Visual Basic語言與AutoCAD相結合,針對矩形隧道、圓形隧道與馬蹄形隧道定制通用隧道圖模板,實現自動繪圖;劉濤[4]利用Visual Lisp語言對AutoCAD進行二次開發,編制盾構隧道管片參數化設計程序;周建暉等[5]研究了現有公路隧道輔助設計軟件的思路和技術特點,結合公路隧道設計過程的實際需要,提出了公路隧道輔助設計軟件的新思路,即建模和出圖采用參數式與交互式相結合,將計算、優化與出圖集成統一;陳衛軍等[6]通過研究參數化繪圖方法,提出參數化繪圖可以作為隧道CAD系統開發的主導思路,并以端式洞門設計部分為例說明了隧道CAD參數化繪圖的實現。
雖然針對隧道自動出圖許多學者已進行了研究,但存在以下不足:①以往CAD自動出圖均基于AutoDesk平臺進行開發,界面不夠友好,操作不便;②所作插件受平臺及版權限制,適用性不強;③隧道出圖均為簡單的輪廓圖形,涉及管片結構出圖方面探究更為少見。針對以上問題,筆者進行管片結構自動出圖研究,開發完全獨立于AutoDesk平臺相關軟件。
DXF(drawing exchange format,圖形交換格式)是AutoCAD 圖形文件標記數據的一種表示方法。DXF文件具有ASCⅡ和二進制兩種格式[7],其中ASCⅡ類型更為常見,便于使用,筆者所使用的DXF文件均指ASCⅡ格式。DXF文件在每個數據元素前都帶一個稱為組碼的整數,組碼的值表明了其后數據元素的類型,本質上DXF文件就是由組碼與組碼關聯的值組成,每個組碼和組碼對應的數據條目各占一行。
完整的DXF文件由7個段(SECTION)構成,分別為HEADER、CLASS、TABLE、BLOCK、ENTITIES、OBJECT。ENTITIES段為DXF文件最重要的部分,包含了所有實體對象的幾何信息。
各段均以0組碼以及組碼值SECTION開始,最后以組碼0以及組碼值ENDSEC結束,中間附帶其余組碼以及相應的組碼值構成各完整段,所有段組合構成完整的文件。
實際工程中制作管片所需圖紙一般包括立面圖、千斤頂視圖、方向視圖與剖面圖。
管片立面圖包含了沿管片內弧面方向視角信息。主要有管片寬度、弦長、管片標志與對接面標志以及注漿孔、拼裝定位孔、手孔、激光定位孔等,其示意圖如圖1。

圖1 管片立面(單位:mm)Fig. 1 Segment plan drawing
千斤頂視圖分為迎千斤頂與背千斤頂視圖,迎千斤頂視圖為沿盾構掘進方向視角所包含的信息。 主要有弧長、圓心角、縱向螺栓孔、管片環縫、凹凸榫等,如圖2,背千斤頂與迎千斤頂視圖呈對稱關系。

圖2 管片迎千斤頂視圖(單位:mm)Fig. 2 Segment facing jack side drawing
方向視圖分為左右兩個方向,如圖3為方向視圖的一種。包含了沿管片三維模型寬度方向兩個側面視角信息,主要有管片寬度、厚度、環向螺栓孔、定位棒槽等。

圖3 管片方向視圖(單位:mm)Fig. 3 Segment direction drawing
管片各結構視圖僅可展示管片表面信息,對于管片結構內部則需沿三維模型不同位置進行剖切之后,以剖面圖表達。通常沿管片三維模型橫縱中軸線以及孔洞處進行剖切,橫剖面圖如圖4,縱剖面圖如圖5,主要為了展示具體的注漿管、手孔、拼裝定位孔等。
讀取DXF文件為解碼過程[8]。根據各段所對應的關鍵標識符,依次對文件進行檢索,當檢索到標識符所對應的段時,即跳到該段進行相應的處理。讀取該段組碼所對應的組碼值信息并存儲到定義的數據結構中,如未搜索到該段則跳過。例如在文件中搜索到“TABLE”字段,即跳到TABLE段進行數據處理,其中ENTITIES段為主要讀取對象。

圖4 管片橫剖面(單位:mm)Fig. 4 Segment cross section drawing

圖5 管片縱剖面(單位:mm)Fig. 5 Segment vertical section drawing
與DXF文件解碼相比,編碼實現所需的DXF文件流程要相對復雜,需要根據DXF組碼將所要生成的文件信息依次寫入組碼所對應的組碼值中。對必不可少的組碼不能有遺漏,通過以下流程實現。
3.1.1 定義基本圖元
以組成結構圖基本圖元為單位,預定義各圖元參數,包括ENTIYIES段中出現的點、線段、圓弧、橢圓弧等,各圖元名稱和其所包含的字段以及類型見表1。

表1 圖元定義Table 1 Primitive definition
3.1.2 基本圖元賦值
在圖元基本參數定義基礎上,將組成文件的圖元賦予實際值。例如需生成一個圓心位于坐標系原點、半徑為5的整圓DXF文件,首先定義Point(0,0),將圓弧圓心CenterPo實際值賦為Point,半徑值Radius設為5,起始角StartAng與終止角EndAng置為0與2π。同理針對不同圖元,將該圖元字段信息賦予實際值。
3.1.3 寫文件
以“寫”的方式將所需要生成的文件賦予完整路徑名稱,創建出一個空文件。根據DXF文件組碼格式,依次寫入7個段的信息,以ENTIYIES段為主,在寫入該段時,將各圖元組碼和所對應的組碼值即步驟2中預存儲的信息寫入。最后在文件末尾加上結束標志。
布爾運算技術是計算機幾何造型技術中構造復雜實體最重要的內容之一[9]。實際管片結構圖構件種類多,參數復雜,部分構件幾何參數無法通過計算獲取,直接繪制難以確定各構件具體位置信息。將復雜管片結構圖根據構件組成進行分解,借助幾何對象的布爾運算,通過平移、鏡像、旋轉等操作,可快速確定管片各構件位置,最終將各構件通過布爾求并運算組成完整的管片結構圖。
3.2.1 三維管片外輪廓提取
管片外輪廓提取本質上為布爾運算求交,管片三維模型如圖6。

圖6 管片三維模型Fig. 6 Segment three-dimensional model
由于管片外輪廓較為規則,針對管片不同結構圖,通過幾何對象運算即可提取出其外輪廓。
1)對立面圖,如圖7,通過計算管片內外弧弦長結合管片寬度,可以確定外輪廓。

圖7 立面圖輪廓提取Fig. 7 Elevation profile extraction
管片外弦長:
|A1B1|=2Rsin(0.5θ)
(1)
管片內弦長:
|C1D1|=2rsin(0.5θ)
(2)
式中:R為管片外半徑;r為管片內半徑;θ為該塊圓心角。
結合管片寬度W,可選取中心點O1為基準點(0,0),確定各角點坐標,提取立面圖外輪廓。
2)對千斤頂視圖,如圖8。

圖8 千斤頂視圖輪廓提取Fig. 8 Outline extraction of jack side drawing
外圓弧與內圓弧起始角為:
(3)
終止角為:
(4)
選取圓心點O2為基準點(0,0),點A2(XA2,YA2)坐標參數XA2、YA2計算公式見式(5):
(5)
點B2坐標:
(6)
點C2、點D2坐標將外半徑R替換為內半徑r即可。
3)對方向視圖,以中心點O3為基準點(0,0),厚度T為:
T=R-r
(7)
點A3、點B3、點C3、點D3坐標參數分別為:XA3=-0.5T;YA3=0.5W;XB3=0.5T;YB3=0.5W;XC3=-0.5T;YC3=-0.5W;XD3=0.5T;YD3=-0.5W。
最終提取管片方向視圖外輪廓如圖9。

圖9 方向視圖輪廓提取Fig. 9 Outline extraction of direction drawing
對不同的剖面,根據剖切方向不同,其外輪廓與千斤頂視圖或方向視圖外輪廓提取方法相同。
3.2.2 二維幾何運算
二維幾何運算主要是圖元的平移、鏡像、旋轉等邏輯運算以及線段與弧線求交。線段、圓弧、橢圓弧的邏輯運算實現均以點為基礎,分別將其圓心和端點進行相應操作即可實現。通過二維幾何運算,可進一步實現管片圖中各構件的平移、鏡像、旋轉等,可以減少運算量,大大提高出圖效率,以線段與圓弧為例進行說明。
1)對線段平移,設A4B4端點分別為A4(XA4,YA4)、B4(XB4,YB4),需移動方向向量V(VX,VY),則平移之后線段A′4B′4端點坐標為:
XA′4=XA4+VXYA′4=YA4+VY
(8)
XB′4=XB4+VXYB′4=YB4+VY
(9)
2)對線段鏡像,如圖10,設線段A5B5端點分別為A5(XA5,YA5)、B5(XB5,YB5),選取的鏡像線C5C′5一般方程為:
a1x+b1y+c1=0
(10)

圖10 線段鏡像Fig. 10 Line mirror
根據鏡像之后點A′5與點A5相連直線A5A′5與鏡像線C5C′5垂直可求取A5A′5直線一般方程為:
a2x+b2y+c2=0
(11)
A5A′5與C5C′5聯立可獲取交點J5(XJ5,YJ5),根據點J5為A5A′5中點即可求取鏡像之后點A′5坐標為:
(12)
3)對于線段的旋轉,如圖11,以旋轉基點O′6(XO′6,YO′6)建立局部坐標系。

圖11 線段旋轉Fig. 11 Line rotation
根據點A6(XA6,YA6),可獲取角度γ為:
(13)
線段O′6A6長為:
(14)
結合旋轉角β可求取旋轉之后點A′6局部坐標系下坐標:
(15)
將點A′6坐標移回整體坐標系下即可得到A6點旋轉之后的點A′6,同理可獲取B6點旋轉之后點B′6,實現線段A6B6繞點O′6旋轉。
4)線段與弧線求交可將線段方程與相應弧線方程聯立求解獲取交點坐標,設線段直線方程為:
a3x+b3y+c3=0
(16)
圓弧方程為:
(x-xo)2+(y-yo)2=r2
(17)
聯立可直接求解交點坐標為:
(18)
直線與橢圓弧求交方法相同。
以實際管片縱剖面圖結合縱向手孔為例,介紹布爾運算實現流程,設管片外半徑為4.25 m,管片內半徑為3.85 m,管片環寬為1.6 m,手孔長L為280 mm,孔徑d為20 mm,手孔H8E′8長為55 mm,手孔軸線與B9C9夾角為60°,如圖12。

圖12 縱剖面圖豎向手孔布爾運算Fig. 12 Boolean operation of vertical handhole in longitudinal section
1)根據管片方向視圖輪廓提取方法,以中心點O8(0,0)為基準點,以mm為單位進行繪制,管片厚度為:T=4 250-3 850=400。
縱剖面角點坐標A8為:XA8=-0.5×1 600=-800;YA8=0.5×400=200。
同理可得其余角點坐標:B8(800,200)、C8(800,-200)、D8(-800,-200),至此管片剖面輪廓提取完畢。
2)以點E8為基準點E8(XE8,YE8),繪制豎向手孔,可設F8(XE8-10,YE8+10),F′8(XE8-10,YE8-280),G8(XE8+10,YE8-5),G′8(XE8+10,YE8-280),H8(XE8-
55,YE8-280),I8(XE8+55,YE8-280),J8(XE8-55,YE8-380),至此手孔各線段端點坐標均已確定。
3)以點E8為基點,將整個手孔繞點E8旋轉60°,并將旋轉之后線段F9F′9與B9C9求交獲取交點K9、G9G′9與B9C9求交獲取交點L9、H9J9與C9D9求交獲取交點J′9,H9I9與C9D9求交獲取交點I′9,確定旋轉之后新的手孔各線段端點坐標,完成縱剖面圖豎向手孔布爾運算。
將管片結構中不同類型構件劃分為組,根據幾何特點進行參數化定制。通過選取基準點,預定義所有構件。在繪制完整管片結構圖時將所需構件通過平移、旋轉、鏡像等操作置于正確位置,以管片剖面圖中環向手孔和凹凸榫為例進行說明。
目前國內大型盾構隧道管片環間一般采用斜螺栓形式[10],對環向手孔參數化定制如圖13。

圖13 管片環向手孔Fig. 13 Segment circumferential handhole
參數包括長度L1、L2、L3、W1、W2、W3以及角度ω,以點O10設為基點(0,0),則可得O′10(0,-L1)與A10(W1,-L1)。
以點O10為基點,將直線O10O′10、A10C10、A10B10旋轉角度ω,并與管片內側圓弧求交,獲取交點B′10、交點C′10,其余線段起點、終點均可以點O10為基點(0,0)結合線段旋轉獲取,實際管片繪制中通過輸入該構件參數即可實現其參數化定制。
盾構管片環縫設計中,接縫面通長設置凹凸榫保證拼裝精度[11],同時減少盾構施工千斤頂作用下的混凝土破損。凹凸榫由線段和圓弧圖元組成,以凹凸榫中心為原點,如圖14,設基點O11(0,0),根據長度L0、厚度T0以及內半徑R0可得:
左右內圓弧圓心,A11(-0.5L0,0);A12(0.5L0,0)
線段B11、B12點坐標:B11(-0.5L0,R0);B12(0.5L0,R0)
線段C11、C12點坐標:C11(-0.5L0,-R0);C12(0.5L0,-R0)
同理根據厚度T,可確定外圓弧各線段起點、終點坐標,實現其參數化定制。

圖14 管片凹凸榫Fig. 14 Segment rebate
在管片構件預定基礎上,針對不同管片結構圖,遵循從全局到局部,從重要決定性構件到所關聯的構件為原則,將組成管片結構圖的構件逐一進行繪制。通過布爾運算,將構件繪制于其所在的管片結構圖中正確位置,最終生成完整管片結構圖。
C++程序語言提供了一種重要的類機制,包含了數據的定義和用于處理數據的方法,類之間通過繼承可以建立一種上下級關系[12]。對基本圖元建立的類框架體系如圖15。

圖15 幾何圖元類體系Fig. 15 Geometry primitive class system
通過基類派生出各個子類,子類可以繼承基類所擁有的操作,且各子類同時具有其獨特屬性和各自不同的操作方法。組子類可以理解為由點、線、圓弧、橢圓弧等一種或多種對象組成的子類。在實際管片繪制過程中,只需將組成管片結構的各個基本圖元組成組類對象,組類對象在進行操作時會根據不同的對象實現其所對應的數據處理方法。面向對象模塊化編程可以大大提高編程效率。
軟件基于同濟曙光三維數字分析平臺(GEOFBA3D)進行開發,軟件主界面如圖16。

圖16 軟件主界面Fig. 16 Software main interface
管片基本幾何尺寸參數設置如圖17,可快速構建管片基本模型,并采用參數化設計,通過輸入出圖所需控制參數之后如圖18,可快速生成管片結構圖。

圖17 管片基本參數設置Fig. 17 Segment basic parameter setting

圖18 管片構件參數設置Fig. 18 Segment component parameter setting
以千斤頂視圖并結合具體的螺栓孔為例說明管片結構圖的編程實現:
1)以結構體形式定義基本圖元,包括點、線段、圓弧、橢圓弧等。
2)根據DXF組碼格式,定義不同Entity實體對象,主要為Entity對象組碼賦值。
3)定義幾何類,包括基類和子類,并在各類中添加各成員變量,以及各種運算與繪制DXF方法。
4)將整個千斤頂視圖定義為一個組類對象JackGroup,并求取組成千斤頂視圖的各子組的幾何圖元。
螺栓孔可以先確定圓弧中軸線位置處,創建出BoltGroup,根據螺栓孔組數,將BolGroup進行拷貝,并將拷貝出的螺栓孔對象通過旋轉置于正確位置,將所有單個螺栓孔對象添加到BoltHoleGroup中,組成完整的螺栓孔對象。
將輪廓OutLineGroup、凹凸榫RebateGroup、螺栓孔BoltHoleGroup添加至JackGroup中,組成完整的千斤頂側圖,如圖19。
5)在所有對象創建完畢之后,調用JackGroup繪制DXF的方法,將所有組對象包含的圖元屬性添加到Entity實體對象中,以“寫”方式創建空白DXF文件,調用Entity寫的方法,將所有對象組碼值寫入文件中,生成千斤頂視圖。

圖19 千斤頂視圖實現流程Fig. 19 Jack side drawing implementation process
以外直徑14.5 m、內直徑13.3 m的某盾構過江隧道為例,一環管片分為10塊,分別為封頂塊、相鄰塊與標準塊。選擇軟件出圖功能,輸入管片基本信息和各構件參數之后,可快速自動生成管片立面圖、千斤頂視圖、方向視圖與縱橫剖面圖,只需改變輸入參數,生成的管片結構圖會自動調整。軟件生成的各類型管片圖如圖20~圖24。

圖20 立 面(單位:mm)Fig. 20 Elevation

圖21 迎千斤頂視圖(單位:mm)Fig. 21 Facing jack side drawing

圖22 方向視圖(單位:mm)Fig. 22 Direction drawing

圖23 橫剖面(單位:mm)Fig. 23 Cross section drawing

圖24 縱剖面(單位:mm)Fig. 24 Vertical section drawing
與目前人工借助CAD軟件繪制相比,在效率方面,使用筆者開發的軟件通過參數化設置斷面以及構件,可在數十秒內生成管片圖紙,而人工繪制則需要數天時間才能完成;在精度方面對于管片當中某些復雜構件,如圖25的手孔,人工繪制不夠完整精確,只能以示意圖進行表達,導致管片制作誤差較大,而該類構件是實際應用當中管片防水以及拼裝關鍵部位,基于筆者布爾運算方法利用開發軟件進行提取繪制,其尺寸完全真實,精度得到了提升。

圖25 管片手孔Fig. 25 Segment handhole
1)對DXF文件進行解碼與組碼,定義各圖元參數將組成管片結構的各構件進行參數化定制,將復雜的管片結構圖分解為不同類型構件。
2)通過幾何布爾運算,提取管片結構圖外輪廓并將各構件拼裝組成管片結構圖,生成工程所需管片圖紙。
3)基于曙光平臺利用C++程序語言進行模塊化設計,開發盾構隧道管片結構出圖軟件,實例證明,與人工繪圖相比,管片設計出圖效率與精度得到了提高,也為其余工程設計出圖提供新思路。