朱德榮
(中鐵上海設(shè)計(jì)院集團(tuán)有限公司,上海 200070)
箱梁三維實(shí)體自動(dòng)建模方法研究
朱德榮
(中鐵上海設(shè)計(jì)院集團(tuán)有限公司,上海 200070)
三維實(shí)體模型能夠直觀、完整地反映立體的幾何與特征信息。在對(duì)結(jié)構(gòu)特征、模型變量與建模過程進(jìn)行分析的基礎(chǔ)上,總結(jié)箱梁結(jié)構(gòu)的建模規(guī)律,提出適合于不同類型橋梁結(jié)構(gòu)的建模方法及建模中應(yīng)注意的問題。借助VC++和ObjectARX工具,通過創(chuàng)建圖形實(shí)體及其面域,形成建模參數(shù),運(yùn)用AcDb3dSolid類建立的對(duì)象容器,建立橋梁結(jié)構(gòu)三維實(shí)體的拉伸、掃掠和放樣接口函數(shù),并對(duì)立體添加顏色或材質(zhì)。運(yùn)用圖形變換和布爾運(yùn)算,對(duì)三維實(shí)體進(jìn)行整體組裝,實(shí)現(xiàn)了橋梁結(jié)構(gòu)三維實(shí)體自動(dòng)建模。
橋梁結(jié)構(gòu);計(jì)算機(jī)輔助設(shè)計(jì);三維實(shí)體建模;參數(shù)化;ObjectARX
橋梁是公路、鐵路及城市立交線路中的重要構(gòu)造物,隨著交通基礎(chǔ)設(shè)施的快速發(fā)展,橋梁的數(shù)量越來越龐大,而且結(jié)構(gòu)復(fù)雜,類型多種多樣[1]。目前,橋梁設(shè)計(jì)圖樣采用多面正投影圖表達(dá),缺乏立體感,不能直觀展現(xiàn)橋梁全貌,且所含的信息也不夠全面。橋梁立體模型的建立將為設(shè)計(jì)方案的比選與優(yōu)化、工程量的計(jì)算、施工過程的動(dòng)態(tài)顯示以及三維橋梁信息的可視化管理奠定基礎(chǔ)。
文獻(xiàn)[2]探討了三維空間模型及其構(gòu)模方法,并對(duì)比分析了目前常用的10種三維建模技術(shù)的優(yōu)缺點(diǎn)及適用場合。文獻(xiàn)[3]提出了一種新的三維建模方法——折疊法,折疊二維平面圖形構(gòu)成三維實(shí)體。文獻(xiàn)[4]以VC++為平臺(tái),融合OpenGL圖形技術(shù),結(jié)合斜拉橋結(jié)構(gòu)的特點(diǎn),采用參數(shù)化方法對(duì)斜拉橋進(jìn)行三維建模,實(shí)現(xiàn)了斜拉橋三維可視化。文獻(xiàn)[5]以掃描法和參數(shù)化特征造型為橋梁模型的主要造型方法,半邊數(shù)據(jù)結(jié)構(gòu)為模型的數(shù)據(jù)結(jié)構(gòu),對(duì)橋梁三維造型和視景仿真的關(guān)鍵技術(shù)進(jìn)行了研究,并在VC++平臺(tái)上結(jié)合OpenGL圖形庫開發(fā)仿真應(yīng)用系統(tǒng)。文獻(xiàn)[6]提出通過各段截面的位置、頂點(diǎn)數(shù)和變化次數(shù)來控制變截面梁橋大樣形狀,采用添加和切割的手段實(shí)現(xiàn)變截面梁橋整體造型,并運(yùn)用三維參數(shù)化建模軟件MDT6.0和VBA開發(fā)工具實(shí)現(xiàn)變截面梁橋造型設(shè)計(jì)。
本文針對(duì)箱形梁,分析梁體沿跨度方向的內(nèi)外部結(jié)構(gòu)特點(diǎn),揭示其變化規(guī)律,探討等截面和變截面梁體的自動(dòng)化建模方法,運(yùn)用 Visual C++語言和ObjectARX開發(fā)技術(shù),直接對(duì)圖形數(shù)據(jù)庫進(jìn)行操作,建立掃掠、放樣建模接口函數(shù),參數(shù)化形成立體,并對(duì)實(shí)體模型添加顏色和材質(zhì),通過圖形變換與布爾運(yùn)算,組裝橋梁整體結(jié)構(gòu),實(shí)現(xiàn)箱梁結(jié)構(gòu)的自動(dòng)建模。
單室或多室箱形梁是大中跨橋梁及城市橋梁最常用的結(jié)構(gòu)形式,研究箱梁的結(jié)構(gòu)特點(diǎn),歸納和總結(jié)梁體各段的建模規(guī)律,以便于確定各段梁體相應(yīng)的建模方法,實(shí)現(xiàn)自動(dòng)建模。
圖1為(80+168+80)m連續(xù)-鋼桁組合結(jié)構(gòu)主梁1/2箱梁中心縱剖面和部分橫截面。
圖1 1/2箱梁中心縱剖面及部分橫斷面(單位:cm)
由設(shè)計(jì)圖可知,該連續(xù)箱梁為雙室結(jié)構(gòu),沿跨度方向進(jìn)行了分段,在各分段位置給出了梁橫截面圖;從圖1可看出箱梁的兩端支座處、中間支座處與跨中有部分梁段外輪廓為等截面,建模時(shí)采用掃掠或拉伸建模;其他分段位置的多個(gè)連續(xù)橫截面外形和箱室內(nèi)輪廓都為變截面,采用沿導(dǎo)向線的放樣方法建模;靠近梁支座處的頂板和底板加厚段,采用起始與終止橫截面沿一條路徑進(jìn)行放樣建模。
2.1 拉伸和掃掠建模方法
(1)拉伸建模
拉伸建模是指將封閉二維平面區(qū)域沿垂直于面域方向拉伸形成立體,適用于柱體結(jié)構(gòu)。圖1中梁端、中間支座處的外形和橫隔板上的孔洞都為等截面,可采用拉伸建模。
形成拉伸體的封閉平面圖形主要有圓、多邊形等,建模方法為:先由幾何參數(shù)生成封閉的二維圖形,再生成面域,最后沿垂直于面域的方向拉伸一定的距離形成立體。
(2)掃掠建模
掃掠方式建模是將平面區(qū)域沿任意曲線路徑掃掠形成立體,適用于等截面(如矩形梁、T形梁、箱形梁等)、管線、梁拱等立體建模。方法為:①由掃掠圖形的參數(shù)繪制二維封閉圖形;②二維封閉圖形生成面域;③由掃掠路徑參數(shù)形成掃掠路徑;掃掠路徑可以是直線、圓、圓弧、空間折線及樣條曲線等;④由面域和掃掠路徑作為參數(shù),運(yùn)用 ObjectARX開發(fā)技術(shù),形成掃掠體。
2.2 建立拉伸和掃掠接口函數(shù)
在以上研究拉伸和掃掠建模方法和步驟的基礎(chǔ)上,由VC++和ObjectARX建立拉伸和掃掠立體的方法和步驟如下。
(1)圖形幾何參數(shù)定義 面域邊界和掃掠路徑可用多種類對(duì)象創(chuàng)建,如多段線、圓、橢圓及樣條曲線等,幾何參數(shù)為頂點(diǎn)坐標(biāo)、法向矢量和半徑等。對(duì)二維坐標(biāo)數(shù)組采用AcGePoint2dArray類定義,用于存儲(chǔ)二維圖形頂點(diǎn)坐標(biāo);用AcGepoint3dArray類定義空間實(shí)體三維坐標(biāo)點(diǎn)數(shù)組;三維坐標(biāo)點(diǎn)用AcGePoint3d類定義;平面的法向矢量用AcGeVector3d定義為normal(0.0,0.0,1.0),拉伸體的高度沿該方向。
(2)創(chuàng)建圖形實(shí)體 不同封閉幾何圖形的創(chuàng)建對(duì)應(yīng)不同類的構(gòu)造函數(shù)和參數(shù)。創(chuàng)建類對(duì)象指針方法為:類名*pEnt=new類名;幾種常用實(shí)體的創(chuàng)建方法如下。
該類參數(shù)為各頂點(diǎn)坐標(biāo)和法向矢量,用于創(chuàng)建二維封閉多邊形。
②創(chuàng)建掃掠路徑
在ObjectARX中,掃掠路徑可以用 AcDbLine、AcDb3DPolyline、AcDbSpline等類創(chuàng)建。若掃掠路徑為三維多段線,則三維坐標(biāo)點(diǎn)數(shù)組用AcGepoint3dArray類定義為pt3d,用該類成員函數(shù)set-LogicalLength(n)定義數(shù)組長度,用 pt3d[i].set(x,y,z)設(shè)置各點(diǎn)坐標(biāo),創(chuàng)建空間多段線作為掃掠路徑的方法為:
注意,poly指向不同類的封閉對(duì)象,就生成相應(yīng)的面域。
(4)創(chuàng)建拉伸體或掃掠體的方法
①用AcDb3dSolid類先創(chuàng)建幾何實(shí)體的一個(gè)容器和接口[7]:AcDb3dSolid* p3dObj=new AcDb3dSolid()。
②調(diào)用建模成員函數(shù) 創(chuàng)建拉伸體:p3dObj->extrude(pRegions_poly,height,taper);當(dāng)拉伸體錐角參數(shù)taper為0,則為柱體,非零時(shí)沿高度為呈線性遞減截面。創(chuàng)建掃掠體:p3dObj->extrudeAlongPath(pRegion_circle,poly3d));將面域沿路徑掃掠形成立體。
由此可知,兩種建模方法的共同之處都需面域參數(shù);不同之處在于,拉伸需拉伸高度和錐角,掃掠要沿掃掠路徑。
③將立體添加到圖形數(shù)據(jù)庫中[8]:AddEntityToDatabase(p3dObj)。
④設(shè)置顏色:立體創(chuàng)建后,需添加到圖形數(shù)據(jù)庫中,并可設(shè)置顏色。方法為:p3dObj->setColor(col);其中,col為顏色號(hào)。
設(shè)置實(shí)體的材質(zhì):p3dSolid->setMaterial(material_name)。
⑤關(guān)閉對(duì)象指針。如果不對(duì)實(shí)體進(jìn)行操作,則關(guān)閉指針p3dObj,否則,返回實(shí)體指針p3dObj,以便對(duì)實(shí)體進(jìn)行圖形變換和布爾運(yùn)算,最后再關(guān)閉指針p3dObj。
通過對(duì)圖1的箱梁設(shè)計(jì)圖進(jìn)行分析可知,箱梁外形和內(nèi)部結(jié)構(gòu)沿跨度方向變高段分為線性變高段和非線性變高段。對(duì)箱梁外形而言,在支座處和中間跨的跨中處為等截面段,其余梁段各截面高度呈非線性變化;從箱梁內(nèi)部結(jié)構(gòu)看,梁端和中間橫隔板上的八邊形通孔為等截面,而箱梁靠近各支座處頂板和底板為加厚段,沿長度方向呈線性變截面。根據(jù)箱梁各部分的構(gòu)造特點(diǎn),可采用不同的建模方法。
3.1 線性變截面放樣建模方法
圖2(a)為箱梁左端截面1至截面3的空間位置,該段箱梁外形為等高段,放樣路徑為H1-H3;截面1至截面2之間,梁端隔板中的八邊形通孔也為等高段,放樣路徑為P1-P2,可采用沿路徑放樣進(jìn)行建模。圖2(b)為箱梁外形立體和左前方為內(nèi)部八棱柱體。
從截面2和截面3可看出,2個(gè)箱室的截面圖形的大小不同,所以該段為箱梁頂板和底板的加厚段,截面高度為線性變化。采用2個(gè)端截面沿一條直線路徑放樣建模,路徑應(yīng)通過2個(gè)端截面同一方位的兩個(gè)頂點(diǎn)連線,如M2-M3,見圖2(a)。放樣體如圖2(b)右后部分為2個(gè)箱室的線框立體圖。
將圖2中的箱體與2個(gè)八棱柱和2個(gè)變截面棱柱進(jìn)行差集運(yùn)算形成箱體。
由2個(gè)端截面放樣(無論等截面還是線性變截面)和掃掠的區(qū)別在于:放樣需要放樣區(qū)間的2個(gè)端截面和路徑來建模,放樣路徑只能為2個(gè)截面之間的一條高線或者對(duì)應(yīng)頂點(diǎn)連線;而掃掠僅需要一個(gè)截面圖形和掃掠路徑,且掃掠路徑可為任意曲線。
圖2 等截面和線性變截面立體建模
3.2 非線性變截面放樣
圖3是圖1中箱梁截面3~10變截面的空間位置和立體形狀。該段箱體采用非線性放樣建模,是將截面3至截面10內(nèi)、外封閉圖形沿通過各頂點(diǎn)的導(dǎo)向線分別進(jìn)行放樣(圖3(a)),構(gòu)造出箱體外形和2個(gè)箱室立體,再差集形成非線性變截面箱體結(jié)構(gòu),如圖3(b)所示。
圖3 箱梁非線性變截面立體建模
3.3 放樣建模接口方法
在bjectARX工具中,用AcDb3dSolid類的成員函數(shù)createLoftedSolid()進(jìn)行放樣,具體方法和步驟如下。
(1)創(chuàng)建一組封閉的截面圖形 箱梁變截面連續(xù)梁,其截面圖形是多邊形,創(chuàng)建截面圖形的方法與2.2節(jié)相同。
(2)形成截面的實(shí)體指針數(shù)組 形成放樣體的截面無論是什么圖形(多邊形、圓等),在創(chuàng)建了各截面對(duì)象后,要將各截面按形成立體的順序存儲(chǔ)在實(shí)體指針數(shù)組中,構(gòu)成一組截面,以便沿導(dǎo)曲線形成放樣體。方法為:先定義實(shí)體指針數(shù)組為AcArray<AcDbEntity*>pEntsTemp,再由其成員函數(shù)append(pEnt)將各截面圖形實(shí)體添加到pEntsTemp指針數(shù)組中。
(3)構(gòu)成導(dǎo)向線指針數(shù)組 每條導(dǎo)向線為通過各截面對(duì)應(yīng)頂點(diǎn)的樣條曲線,導(dǎo)向線用來控制立體的表面形狀。定義導(dǎo)向曲線的各頂點(diǎn)坐標(biāo)點(diǎn)數(shù)組為AcGe-Point3dArray pts,用該類的成員函數(shù) append(AcGe-Point3d pt)將坐標(biāo)(X,Y,Z)添加到數(shù)組中,形成導(dǎo)向曲線坐標(biāo)數(shù)組。創(chuàng)建splines導(dǎo)向曲線、形成導(dǎo)向曲線指針數(shù)組的方法如下:
AcDbSpline*pSpln_1=new AcDbSpline(pts);AcArray<AcDbEntity* > pGuidesTemp;
用AcArray類成員函數(shù)append(pSpln_n)將導(dǎo)向線添加到實(shí)體指針數(shù)組pGuidesTemp中。
(4)創(chuàng)建放樣立體 在生成放樣體的各截面指針數(shù)組和引導(dǎo)曲線指針數(shù)組的基礎(chǔ)上創(chuàng)建放樣體。由各截面沿導(dǎo)向線放樣立體時(shí),中間段的形狀由導(dǎo)向線通過的各截面頂點(diǎn)來控制。創(chuàng)建放樣體的方法如下:
AcDb3dSolid*p3dSolid1=new AcDb3dSolid();
p3dSolid1->createLoftedSolid(pEntsTemp,pGuides-Temp,NULL,AcDbLoftOptions::kNoNormal)。
(5)將放樣立體添加到圖形數(shù)據(jù)庫,再設(shè)置顏色。方法同拉伸體。
(6)用delete刪除截面、導(dǎo)向線和實(shí)體指針。
4.1 三維實(shí)體圖形變換方法
在立體生成后,要將其定位于復(fù)雜立體的指定位置和方向,可用平移和旋轉(zhuǎn)等變換方法;要放大立體,可用比例變換;也可對(duì)立體進(jìn)行鏡像等變換。變換方法和步驟如下。
(1)生成三維實(shí)體變換矩陣 用ObjectARX工具對(duì)立體進(jìn)行變換時(shí),需生成三維圖形變換矩陣。用AcGeMatrix3d類定義三維幾何變換矩陣,再用該類的成員函數(shù)生成平移變換 setCoordSystem(moveBy,x,y,z)、比例變換 setToScaling(scale,moveBy)、旋轉(zhuǎn)變換setToRotation(PI/3.0,y,moveBy)、鏡像變換 setToMirroring(pln)矩陣。
(2)實(shí)體模型變換 確定圖形變換矩陣后,即可對(duì)立體進(jìn)行變換:
p3dSolid->transformBy(transformation_matrix);
該函數(shù)將實(shí)體的幾何參數(shù)進(jìn)行坐標(biāo)變換,其拓?fù)涮卣鞅3植蛔儭?/p>
(3)將變換后的實(shí)體添加到圖形數(shù)據(jù)庫中。
4.2 三維立體布爾運(yùn)算
將已創(chuàng)建的各段梁體擺放在各自的空間位置后,運(yùn)用布爾運(yùn)算中的并集可將各分段建模的梁體進(jìn)行合并,形成箱梁整體模型,用箱體與2個(gè)箱室體進(jìn)行差集,可形成箱體中的箱室孔洞部分。對(duì)2個(gè)立體進(jìn)行布爾運(yùn)算[9]的方法如下:
設(shè)已創(chuàng)建的2個(gè)實(shí)體為pSolid1,pSolid2。
pSolid1- > booleanOper(AcDb::operation,pSolid2);
如果函數(shù)調(diào)用成功,pSolid1將指向經(jīng)過布爾運(yùn)算生成的新的實(shí)體,pSolid2所指向的實(shí)體將從數(shù)據(jù)庫中刪除。布爾運(yùn)算類型operation取值為AcDb::kBoomlUnite(并集)、AcDb::kBoolIntersect(交集)和 AcDb::kBoolSubtract(差集)。
根據(jù)箱梁設(shè)計(jì)圖(圖1)與幾何信息[10],具體建模方法和步驟如下。
(1)建模數(shù)據(jù)組織
連續(xù)箱梁總體信息[11]:箱梁跨數(shù),跨度,總長,箱室個(gè)數(shù),橫截面數(shù)量,橫截面間距。
橫截面幾何信息如圖4(a)所示,包括截面的寬度和高度尺寸。
(2)連續(xù)箱梁建模
在建模數(shù)據(jù)的基礎(chǔ)上,建模方法如下。
①繪制空間橋面中心線,從左向右指定各橫截面在橋面中心線上的空間坐標(biāo)。
②進(jìn)行用戶坐標(biāo)變換,依據(jù)截面參數(shù),確定截面頂點(diǎn)坐標(biāo)。
③用AcDbPolyline類創(chuàng)建截面中的封閉多邊形。④生成等截面和變截面段的放樣路徑。
⑤箱梁的等高段建模 依據(jù)3.1節(jié)的沿路徑放樣方法,建立箱梁外形、內(nèi)部八邊形通孔和頂、底板加厚段立體,對(duì)孔洞部分,由箱體與內(nèi)部實(shí)體差集構(gòu)造穿孔,如圖2所示。
⑥箱梁變高段建模 對(duì)箱梁外形和內(nèi)部非線性變高段采用導(dǎo)向線放樣建模,箱梁與內(nèi)部實(shí)體進(jìn)行差集,即可形成箱梁結(jié)構(gòu),如圖3所示。
⑦在形成各段箱體后,可采用并集形成1/2箱梁立體,再用鏡像功能形成箱梁整體,如圖4(b)所示為整座橋梁立體圖。
圖4 (80+160+80)m連續(xù)-鋼桁組合結(jié)構(gòu)主梁橫截面參數(shù)和立體圖
本文在分析箱梁結(jié)構(gòu)形狀、構(gòu)造特點(diǎn)的基礎(chǔ)上,研究了梁體建模方法,總結(jié)了梁體結(jié)構(gòu)中適合等截面、線性和非線性變截面的建模規(guī)律和方法,運(yùn)用VC++和ObjectARX工具,建立了拉伸、掃掠和放樣等接口函數(shù),實(shí)現(xiàn)了橋梁結(jié)構(gòu)的自動(dòng)化建模,通過與人機(jī)交互建模比較,結(jié)果表明,建模效率提高約80%。橋梁模型為橋梁設(shè)計(jì)、修改、評(píng)價(jià)和施工[12]提供了三維可視化手段,這種自動(dòng)建模方法對(duì)橋梁CAD和三維可視化的研究具有一定的意義和參考價(jià)值。
[1]劉忠平,曾敏.武廣客運(yùn)專線橋梁結(jié)構(gòu)類型和特點(diǎn)[J].鐵道標(biāo)準(zhǔn)設(shè)計(jì),2013(9):54-58.
[2]畢碩本,張國建,侯榮濤,梁靜濤.三維建模技術(shù)及實(shí)現(xiàn)方法對(duì)比研究[J].武漢理工大學(xué)學(xué)報(bào),2010,32(16):26-30,32.
[3]張秉森,邵峰晶.CAD系統(tǒng)中產(chǎn)品設(shè)計(jì)三維實(shí)體建模方法的研究[J].工程圖學(xué)學(xué)報(bào),2002,(4):27-32.
[4]扈春霞,王子茹.基于OpenGL的參數(shù)化斜拉橋三維可視化的研究[J].江漢大學(xué)學(xué)報(bào):自然科學(xué)版,2008,36(2):47-49.
[5]陸鐵堅(jiān),蔣友良,余志武.橋梁三維造型及其視景仿真[J].中南大學(xué)學(xué)報(bào):自然科學(xué)版,2005,36(3):501-505.
[6]何祎,李傳習(xí),譚海洋.變截面梁橋三維造型技術(shù)的研究[J].中南公路工程,2004,29(1):117-119.
[7] 李世國.AutoCAD高級(jí)開發(fā)技術(shù)-ARX編程及應(yīng)用[M].北京:機(jī)械工業(yè)出版社,1999:180-189.
[8]程耀東,趙建昌,徐軍.圖形數(shù)據(jù)庫應(yīng)用技術(shù)研究[J].工程圖學(xué)學(xué)報(bào),2006,27(1):143-148.
[9]程耀東,張麗萍,韓進(jìn)等.計(jì)算機(jī)繪圖與二次開發(fā)方法[M].蘭州:甘肅科學(xué)技術(shù)出版社,2009:267-323.
[10] Xiong Jun He,Nguyen Phan Anh,Jiu Si Liu,Jing Ju Xiang,Xiao Yang Luo.Modeling Method of Analysis of Complicated Bridge Structures Based on Design Drawings[J].Advanced Materials Research,2011,243-249,6131-6137.
[11]劉潤舟.(70+125+70)m跨鐵路轉(zhuǎn)體連續(xù)梁橋設(shè)計(jì)[J].鐵道標(biāo)準(zhǔn)設(shè)計(jì),2013(12):70-73.
[12]蘇國明.一聯(lián)多孔連續(xù)梁大節(jié)段快速施工設(shè)計(jì)[J].鐵道標(biāo)準(zhǔn)設(shè)計(jì),2013(9):50-53.
Research on Automatic M odeling M ethod of Three-dimensional Entity for Box Girder
ZHU De-rong
(China Railway Shanghai Design Institute Group Co.,Ltd.,Shanghai200070,China)
Three-dimensional entity model can visually and completely reflect the geometric and characteristic information of an entity.After research on box girder structure characteristics,on model variables and on modeling process,the paper summarized themodeling rule of box girder structures,put forward themodelingmethod which is suitable for different kinds of bridge structures,and pointed out the matters needing attention in modeling process.In this paper,with the help of Visual C++and ObjectARX,and by creating the graph entity and regions,the modeling parameters were formed.Furthermore,by using object container of AcDb3dSolid class,the interface functions among stretching,sweeping and loftingwere established for the three-dimensional entity of bridge structure,then colors and material or texture were added into the entity.Finally,by means of graphic transformation and Boolean calculation,the three-dimensional entity of bridge structure was assembled integrally,thus the automatic modeling of three-dimensional entity of bridge structure were achieved.
bridge structure; computer aided design; three-dimensional entity modeling;parameterization;ObjectARX
U442.5
A
10.13238/j.issn.1004-2954.2014.03.013
1004-2954(2014)03-0054-05
2013-12-10
省級(jí)自然科學(xué)基金(1212RJZA042)
朱德榮(1966—),男,高級(jí)工程師,1990年畢業(yè)于西南交通大學(xué)橋梁與地下工程專業(yè),工學(xué)碩士,E-mail:zydzcx@163.com。