資源描述:
《第三章 圖 形 對 象》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、第三章圖形對象即使人們不知道蘋果和梨是怎么種植的,也可以吃掉它們。那么能否不必知道構(gòu)造細(xì)節(jié),也可以繪制出復(fù)雜的圖形呢?可以,圖形對象就干這種事情。Intra3D的圖形對象隱藏了幾何造型與繪制的細(xì)節(jié),用戶使用簡單的幾個接口函數(shù)就可以繪制出圖形。Intra3D2.0版提供了三類圖形對象:(1)常用幾何對象,如長方體、錐體、圓柱體、球體、圓環(huán)體、Swept形體等對象;(2)多邊形模型對象,用于繪制Autodesk公司.3ds模型和Wavefront公司的.obj模型;(3)商業(yè)統(tǒng)計(jì)圖形對象,如柱形圖、帶狀圖、條形圖、折線圖、面積圖、餅圖、塔形圖、曲線圖、曲面圖
2、、進(jìn)程圖、股票圖等對象。Intra3D將“圖形對象”和“形體節(jié)點(diǎn)”(見第四章)分層設(shè)計(jì)。圖形對象負(fù)責(zé)繪制,形體節(jié)點(diǎn)則處理3D交互。形體節(jié)點(diǎn)可以動態(tài)地引用圖形對象,從而實(shí)現(xiàn)交互式繪制。這種分層設(shè)計(jì)可使Intra3D核心庫具有良好的可擴(kuò)展性,并使交互式3D應(yīng)用程序的開發(fā)更加靈活。3.1圖形對象的基類與COM接口圖形對象的基類為GraphicalObject,相應(yīng)的COM接口為IGraphicalObject。在C++類庫中,幾何圖形對象如BoxObject、ConeObject、CylinderObject、SphereObject與TorusObject,
3、多邊形模型對象如Model3DS與ModelOBJ,商業(yè)統(tǒng)計(jì)圖形對象如ColumnChart3D、RibbonChart3D、LineChart2D與BartChar2D等,均為GraphicalObject的派生類。在COM庫中,上述對象均繼承接口IGraphicalObject。C++類庫中GraphicalObject是Container的派生類,應(yīng)使用AddRef與Release函數(shù)來管理內(nèi)存。源程序見Intra3D-DLLIncludeLayer2GraphicalObject.h。其定義如下:classGraphicalObject:p
4、ublicContainer{public:virtualvoidDraw(void){}//圖形繪制函數(shù)//獲取對象的包圍盒,(dx,dy,dz)為長方體的幅值,(cx,cy,cz)為中心坐標(biāo),virtualvoidGetBoundBox(float*dx,float*dy,float*dz,float*cx,float*cy,float*cz){*dx=*dy=*dz=0;*cx=*cy=*cz=0;}//獲取對象的包圍球,(cx,cy,cz)為中心坐標(biāo),radius為半徑virtualvoidGetBoundSphere(float*radius,
5、float*cx,float*cy,float*cz){*cx=*cy=*cz=0;*radius=0;}//獲取對象的最小坐標(biāo)值(minx,miny,minz)與最大坐標(biāo)值(maxx,maxy,maxz)virtualvoidGetMinMax(float*minx,float*miny,float*minz,float*maxx,float*maxy,float*maxz){*minx=*miny=*minz=-0;*maxx=*maxy=*maxz=0;}64};其中公有函數(shù)Draw、GetBoundBox、GetBoundSphere與GetMi
6、nMax均為虛函數(shù),具體行為由派生類定義。COM接口IGraphicalObject的定義如下(見Intra3D-COMIntra3D.idl文件):interfaceIGraphicalObject:IDispatch{HRESULTDraw();HRESULTGetMinMax([out]float*minX,[out]float*minY,[out]float*minZ,[out]float*maxX,[out]float*maxY,[out]float*maxZ);HRESULTGetBoundSphere([out]float*radius,
7、[out]float*cx,[out]float*cy,[out]float*cz);HRESULTGetBoundBox([out]float*dx,[out]float*dy,[out]float*dz,[out]float*cx,[out]float*cy,[out]float*cz);};3.2常用幾何圖形對象Intra3D2.0C++類庫與COM庫中的常用幾何圖形對象有BoxObject、ConeObject、CylinderObject、SphereObject與TorusObject。由于這幾種圖形對象的設(shè)計(jì)非常相似,本節(jié)僅以SphereO
8、bject為例講述程序設(shè)計(jì)。程序的重點(diǎn)是AddRef、Release與Final