摘 要: 三維實(shí)體模型是建立三維可視化信息系統(tǒng)的基礎(chǔ),,通過(guò)對(duì)幾何造型及圖形處理基本理論和方法的研究,基于構(gòu)造實(shí)體幾何法的理論,,對(duì)ObjectARX工具中三維圖形接口和實(shí)體造型方法進(jìn)行了探討,,用Visual C++ 和ObjectARX工具進(jìn)行二次開(kāi)發(fā),,實(shí)現(xiàn)了三維實(shí)體自動(dòng)建模、圖形變換和布爾運(yùn)算等操作方法,,并以橋梁結(jié)構(gòu)為例進(jìn)行了的參數(shù)化建模,,為橋梁信息化平臺(tái)的建設(shè)提供素材。
關(guān)鍵詞: 計(jì)算機(jī)應(yīng)用,;實(shí)體建模,;ObjectARX開(kāi)發(fā)工具;圖形變換,;布爾運(yùn)算
0 引言
幾何造型的基本理論和方法自20世紀(jì)70年代開(kāi)始創(chuàng)立,,經(jīng)過(guò)幾十年的發(fā)展和研究,現(xiàn)已廣泛地應(yīng)用在土木建筑,、動(dòng)畫(huà)制作,、人體造型等領(lǐng)域的三維設(shè)計(jì)和立體圖形顯示。它是計(jì)算機(jī)及其圖形工具描述物體形狀,、設(shè)計(jì)幾何形體,、模擬物體動(dòng)態(tài)處理過(guò)程的一門(mén)綜合技術(shù)。幾何造型主要包括曲面造型,、實(shí)體造型、特征造型等[1],。
參考文獻(xiàn)[2-4]對(duì)OpenGL建模技術(shù)進(jìn)行了研究,,參考文獻(xiàn)[5-8]對(duì)三維建模技術(shù)、橋梁設(shè)計(jì)及可視化進(jìn)行了研究,。本文通過(guò)對(duì)實(shí)體模型構(gòu)造方法的研究,,探討工程物的參數(shù)化建模、圖形變換,、集合運(yùn)算等方法,,運(yùn)用Visual C++2005語(yǔ)言和ObjectARX開(kāi)發(fā)工具包,對(duì)AutoCAD進(jìn)行二次開(kāi)發(fā),,建立實(shí)體圖形數(shù)據(jù)庫(kù)接口,,實(shí)現(xiàn)工程物的參數(shù)化自動(dòng)建模,為三維可視化和信息化平臺(tái)的建立奠定圖形及數(shù)據(jù)基礎(chǔ)[9],。
1 基于ObjectARX的實(shí)體構(gòu)造方法
構(gòu)造實(shí)體幾何法(Constructive Solid Geometry,,CSG)是當(dāng)前許多CAD/CAM系統(tǒng)采用的表示三維形體的一種方法[10]。CSG用系統(tǒng)定義的簡(jiǎn)單幾何形體及正則集合運(yùn)算,,可構(gòu)造出復(fù)雜實(shí)體,。其基本思想是:一個(gè)較復(fù)雜三維形體可以通過(guò)一些基本形體的并、交,、差集等集合運(yùn)算來(lái)正確表示,。
1.1 基本體造型方法
在ObjectARX中,,三維實(shí)體屬于AcDb3dSolid類(lèi)對(duì)象,對(duì)于一個(gè)幾何實(shí)體,,AcDb3dSolid實(shí)體是一個(gè)容器和接口,,通過(guò)AcDb3dSolid類(lèi)的成員函數(shù)可以生成多種基本實(shí)體,通過(guò)布爾運(yùn)算可生成復(fù)雜的組合體[11],。生成三維基本體的方法如下:
?。?)用AcDb3dSolid類(lèi)創(chuàng)建一個(gè)容器對(duì)象:
AcDb3dSolid p3dObj;
AcDb3dSolid*p3dObj=new AcDb3dSolid,;
?。?)建立基本體對(duì)象的一般形式:
指向AcDb3dSolid類(lèi)對(duì)象的指針->創(chuàng)建基本三維實(shí)體對(duì)象成員函數(shù);
如創(chuàng)建長(zhǎng)方體的方法為:
p3dObj->createBox(xLen,,yLen,,zLen);
?。?)將三維實(shí)體用AddEntityToDbs()數(shù)據(jù)庫(kù)接口寫(xiě)入當(dāng)前圖形數(shù)據(jù)庫(kù)中,。
1.2 由二維對(duì)象用推移表示法創(chuàng)建三維實(shí)體
將物體A沿空間一條軌跡P推移時(shí),A的軌跡定義了一個(gè)新的物體B,,則物體B可以由物體A與軌跡P共同表示,,這種方法稱(chēng)為推移表示法。
除了用AcDb3dSolid類(lèi)的成員函數(shù)創(chuàng)建基本體外,,也可在二維封閉圖形的基礎(chǔ)上,,通過(guò)指定高度、路徑用推移法創(chuàng)建立體,,或繞軸旋轉(zhuǎn)封閉區(qū)域生成三維實(shí)體,。
1.2.1 按指定的高度拉伸立體的方法
若將一個(gè)平面區(qū)域沿著垂直于該平面的直線(xiàn)段推移得到一個(gè)柱體,稱(chēng)為平移掃掠,,也叫拉伸,。這種方法可用于生成棱柱、圓柱等立體,,如橋梁的墩臺(tái)基礎(chǔ),、樁柱及其他等截面結(jié)構(gòu)。由平面區(qū)域拉伸生成三維立體的AcDb3dSolid類(lèi)成員函數(shù)為:
extrude(const AcDbRegion*pRegion,,double height,,double taper);
其中,,pRegion為面域,;height為推移高度;當(dāng)沿高度推移時(shí),參數(shù)taper為0,,則為柱體,,非零時(shí)沿高度為呈線(xiàn)性遞減截面。
1.2.2 按指定路徑掃掠形成立體
如果平面區(qū)域沿任意曲線(xiàn)推移,,則稱(chēng)為掃掠,。這種方法將二維平面區(qū)域沿軌跡形成等截面實(shí)體,可應(yīng)用于形成等截面梁體,、拱橋和鋼結(jié)構(gòu)桿件等,。注意,在路徑和實(shí)體創(chuàng)建后,,要分別將對(duì)象添加到圖形數(shù)據(jù)庫(kù)中,。
2 三維實(shí)體的圖形變換和布爾運(yùn)算
2.1 基于ObjectARX的三維實(shí)體圖形變換方法
復(fù)雜工程物是由簡(jiǎn)單體通過(guò)疊加、穿孔,、截切等方式構(gòu)成的,,而由AcDb3dSolid類(lèi)的成員函數(shù)形成簡(jiǎn)單體的質(zhì)心在WCS坐標(biāo)的原點(diǎn),所以,,要用圖形變換方法,,根據(jù)變換方式和順序形成變換矩陣,從而將立體變換到復(fù)雜體中確定的空間位置,,然后用布爾運(yùn)算形成復(fù)雜體,。
在ObjectARX中,圖形變換的主要方式和變換矩陣形成方法如下:
?。?)平移變換:mat_move.setCoordSystem(moveBy,,x,y,,z)。
?。?)比例變換:mat_scale.setToScaling(scale,,moveBy)。
?。?)旋轉(zhuǎn)變換:mat_rotate.setToRotation(α,,y,moveBy),。
?。?)鏡像變換:是以某坐標(biāo)面為對(duì)稱(chēng)面對(duì)實(shí)體進(jìn)行對(duì)稱(chēng)變換。
?。?)由變換矩陣進(jìn)行實(shí)體模型變換,。
確定圖形變換矩陣后,即可對(duì)類(lèi)AcDb3dSolid的成員函數(shù)創(chuàng)建的實(shí)體進(jìn)行變換,,再將實(shí)體添加到圖形數(shù)據(jù)庫(kù)的塊表中,。實(shí)現(xiàn)立體變換的方法為:
transformBy(const AcGeMatrix3d& xform),;
2.2 復(fù)雜三維實(shí)體的布爾運(yùn)算
由基本體函數(shù)或二維對(duì)象拉伸、掃掠,、旋轉(zhuǎn)只能生成一些單個(gè)的簡(jiǎn)單體,,由簡(jiǎn)單體形成復(fù)雜形體必須通過(guò)布爾運(yùn)算才能實(shí)現(xiàn)。布爾運(yùn)算有并(UNION),、交(SUBTRACT),、差(INTERSECTION)3種[12]。
在ObjectARX的編程中,,對(duì)實(shí)體進(jìn)行布爾運(yùn)算使用AcDb3dSolid類(lèi)的成員函數(shù):
booleanOper(AcDb::BooloperType operation,,AcDb3dSolid*pSolid);
其中,,布爾運(yùn)算類(lèi)型operation取值為AcDb::kBoomlUnite(并集),、AcDb::kBoolIntersect(交集)和AcDb::kBoolSubtract(差集);pSolid表示另一個(gè)參與布爾運(yùn)算的實(shí)體的指針,。
3 拱橋建模實(shí)例
圖1(a)為縱梁和橫梁斷面圖,,圖1(b)為拱形橋梁上部結(jié)構(gòu)立體圖,拱形為鋼管拱,,直徑800 mm,,由設(shè)計(jì)圖可獲取各部分結(jié)構(gòu)的截面定形尺寸參數(shù),拱橋的三維建模方法如下,。
?。?)拱形立體建模
拱形結(jié)構(gòu)用掃掠方法進(jìn)行建模。方法如下:
?、賿呗訉?duì)象定義:拱截面為圓,,則掃掠對(duì)象定義為:AcDbCircle*pCirc=new AcDbCircle(center,normal,,800),;
②由封閉邊界生成面域:封閉邊界是圓,,形成面域的方法見(jiàn)1.2.1,。
③生成掃掠路徑:拱形建模時(shí),,圓截面的掃掠路徑為拱軸線(xiàn),,采用AcGePoint3dArray類(lèi)定義三維坐標(biāo)數(shù)組pt3d,存儲(chǔ)拱軸線(xiàn)各頂點(diǎn)的坐標(biāo),,并用setLogicalLength(n)成員函數(shù)定義數(shù)組長(zhǎng)度,,然后對(duì)數(shù)組賦值,用AcDb3dPolyline類(lèi)成員函數(shù)AcDb3dPolyline()創(chuàng)建空間掃掠路徑。
?、軇?chuàng)建三維實(shí)體,。先創(chuàng)建實(shí)體的容器和接口,再通過(guò)類(lèi)的成員函數(shù)extrudeAlongPath()生成三維實(shí)體,,然后將實(shí)體添加到圖形數(shù)據(jù)庫(kù)中,,最后用delete刪除面域指針pRegion。
?。?)梁體結(jié)構(gòu)建模
梁體包括縱梁,、端橫梁、中間橫梁及橋面板等結(jié)構(gòu),,梁體拉伸方法如下:
?、偃鐖D1(a)所示,分別創(chuàng)建縱梁與橫梁二維多段線(xiàn)封閉圖形,。
?、趯⒘后w截面圖形生成面域,沿Z軸方向拉伸立體長(zhǎng)度,。
?、鄄捎眯D(zhuǎn)、平移等變換將立體放在指定位置,。
?、苡貌紶栠\(yùn)算的并集形成橋梁整體,如圖1(b)所示,。
另外,,若梁截面沿長(zhǎng)度方向?yàn)榉蔷€(xiàn)性變化的變截面連續(xù)梁時(shí),可采用放樣的方法形成梁體模型,。
4 結(jié)論
計(jì)算機(jī)技術(shù)和幾何造型理論的發(fā)展,,推動(dòng)了設(shè)計(jì)領(lǐng)域由二維向三維的轉(zhuǎn)變,為三維可視化和信息化提供了立體模型和數(shù)據(jù)信息,。研究構(gòu)造實(shí)體幾何造型理論和方法,,運(yùn)用Visual C++語(yǔ)言和ObjectARX開(kāi)發(fā)工具包,在AutoCAD環(huán)境下探討參數(shù)化自動(dòng)建模方法,,可為工程物快速建模提供便捷途徑。工程物三維模型的建立,、設(shè)計(jì)參數(shù)和屬性信息的存儲(chǔ),,為工程技術(shù)人員提供了直觀研究設(shè)計(jì)方案、工程結(jié)構(gòu)的平臺(tái),,也為工程物三維可視化信息系統(tǒng)的建立奠定了基礎(chǔ),。本文的立體建模和ObjectARX三維開(kāi)發(fā)技術(shù)可給相關(guān)研究人員提供建模新思路。
參考文獻(xiàn)
[1] 王汝傳,黃海平,,林巧明.計(jì)算機(jī)圖形學(xué)教程(第2版)[M].北京:高等教育出版社,,2009.
[2] 張志華,程耀東,,張新秀.基于OpenGL和MFC的三維建模教學(xué)實(shí)踐與改革[J].微型機(jī)與應(yīng)用,,2014,33(3):88-90.
[3] 馬林,,程耀東,,朱宗喜,等.基于OpenGL的TIN構(gòu)建方法研究[J].微型機(jī)與應(yīng)用,,2014,,33(14):42-44.
[4] 扈春霞,王子茹.基于OpenGL的參數(shù)化斜拉橋三維可視化的研究[J].江漢大學(xué)學(xué)報(bào)(自然科學(xué)版),,2008,,36(2):47-49.
[5] 馬林,李興田.三維可視化方法研究與應(yīng)用[J].蘭州交通大學(xué)學(xué)報(bào),,2013,,32(6):110-113.
[6] 劉榕,劉海波,,龍海濱.山店江大橋高墩連續(xù)剛構(gòu)橋設(shè)計(jì)與關(guān)鍵技術(shù)[J].公路工程,,2013,38(2):125-128,,136.
[7] 陸鐵堅(jiān),,蔣友良,余志武.橋梁三維造型及其視景仿真[J].中南大學(xué)學(xué)報(bào)(自然科學(xué)版),,2005,,36(3):501-505.
[8] 畢碩本,張國(guó)建,,侯榮濤,,等.三維建模技術(shù)及實(shí)現(xiàn)方法對(duì)比研究[J].武漢理工大學(xué)學(xué)報(bào),2010,,32(16):26-30,,32.
[9] 李世國(guó).AutoCAD高級(jí)開(kāi)發(fā)技術(shù)-ARX編程及應(yīng)用[M].北京:機(jī)械工業(yè)出版社,1999.
[10] 程耀東,,趙建昌,,徐軍.圖形數(shù)據(jù)庫(kù)應(yīng)用技術(shù)研究[J].工程圖學(xué)學(xué)報(bào),2006,,27(1):143-148.
[11] 程耀東,,徐斐,,董明才.基于ObjectARX 2007的地質(zhì)斷面自動(dòng)填充方法[J].物探與化探,2010,,34(5):681-685.
[12] 程耀東,,張麗萍,韓進(jìn),,等.計(jì)算機(jī)繪圖與二次開(kāi)發(fā)方法[M].蘭州:甘肅科學(xué)技術(shù)出版社,,2009.