OpenCASCADE構(gòu)造一柱曲面
Posted on 2017-12-27 20:43 eryar 閱讀(2757) 評(píng)論(0) 編輯 收藏 引用 所屬分類: 2.OpenCASCADEOpenCASCADE構(gòu)造一柱曲面
Abstract. 本文主要介紹常見(jiàn)的曲面如一般柱面(拉伸曲面)、旋轉(zhuǎn)面在OpenCASCADE中的構(gòu)造方法,由此思考一般放樣算法的實(shí)現(xiàn)。
Key Words. Common Surface, Extrusion, Revolution
1.Introduction
實(shí)體Solid就是由面組成,面中包含幾何曲面,常見(jiàn)的幾何曲面有平面,柱面,旋轉(zhuǎn)面等。對(duì)幾何曲面有一些功能要求:如計(jì)算指定參數(shù)u,v處的點(diǎn),切線等,即求指定參數(shù)u,v處的0階導(dǎo)數(shù)、1階導(dǎo)數(shù),N階導(dǎo)數(shù);獲取參數(shù)空間等。
圖1. 放樣曲面
由類圖可以看出,放樣曲面Swept Surface有兩種形式:Geom_SurfaceOfLinearExtrusion和Geom_SurfaceOfRevolution。一種是線性拉伸成形的曲面,一種是旋轉(zhuǎn)成形的曲面。
圖2. 拉伸曲面
如上圖1所示,可以將一條曲線沿一方向拉伸一定的距離來(lái)構(gòu)造曲面,被拉伸的曲線稱為準(zhǔn)線。
圖3. 旋轉(zhuǎn)曲面
如上圖2所示,將一條曲線繞指定的軸線旋轉(zhuǎn)一定的角度得到一個(gè)旋轉(zhuǎn)面。
本文結(jié)合OpenCASCADE中源碼來(lái)說(shuō)明拉伸曲面及旋轉(zhuǎn)曲面原理。
2.The Surface of Extrusion
OpenCASCADE中線性拉伸曲面的類名為:Geom_SurfaceOfLinearExtrusion,其參數(shù)方程如下:
其中參數(shù)u的定義域決定準(zhǔn)線C(u)的參數(shù)范圍;參數(shù)v的取值范圍是無(wú)窮的。即拉伸曲面是一個(gè)很長(zhǎng)的柱面,如果在參數(shù)v上不加限制的話。其中一些計(jì)算功能代碼如下所示:
//! Shift the point along direction to the given distance (theShift) void Shift(const Standard_Real theShift, gp_Pnt& thePoint) const { thePoint.ChangeCoord() += myDirection.XYZ() * theShift; } void GeomEvaluator_SurfaceOfExtrusion::D0( const Standard_Real theU, const Standard_Real theV, gp_Pnt& theValue) const { if (!myBaseAdaptor.IsNull()) myBaseAdaptor->D0(theU, theValue); else myBaseCurve->D0(theU, theValue); Shift(theV, theValue); }
從計(jì)算曲面上在指定參數(shù)u,v處的點(diǎn)的函數(shù)D0()可以看出,先根據(jù)參數(shù)u計(jì)算出準(zhǔn)線上的點(diǎn),再將點(diǎn)沿拉伸方向移動(dòng)拉伸向量模的距離。
圖4. 拉伸多邊形
如上圖4所示為將多邊形準(zhǔn)線沿著Z方向拉伸得到一個(gè)拉伸曲面。
3.The Surface of Revolution
OpenCASCADE中旋轉(zhuǎn)曲面的類名為:Geom_SurfaceOfRevolution,其參數(shù)方程如下:
其中計(jì)算旋轉(zhuǎn)曲面上對(duì)應(yīng)參數(shù)u,v的點(diǎn)的代碼如下:
void GeomEvaluator_SurfaceOfRevolution::D0( const Standard_Real theU, const Standard_Real theV, gp_Pnt& theValue) const { if (!myBaseAdaptor.IsNull()) myBaseAdaptor->D0(theV, theValue); else myBaseCurve->D0(theV, theValue); gp_Trsf aRotation; aRotation.SetRotation(myRotAxis, theU); theValue.Transform(aRotation); }
根據(jù)代碼可知,先根據(jù)參數(shù)v計(jì)算曲線上的點(diǎn),再將點(diǎn)按指定的軸旋轉(zhuǎn)變換。
圖5. 旋轉(zhuǎn)曲面
如上圖5所示,將紅色母線繞Y軸旋轉(zhuǎn)90度得到的旋轉(zhuǎn)曲面。線性拉伸曲面和旋轉(zhuǎn)曲面都是特定條件下的放樣曲面。拉伸曲面為沿直線放樣得到的曲面,旋轉(zhuǎn)曲面是沿圓放樣得到的曲面。由此,可以思考一個(gè)問(wèn)題,那就是如何將任意一個(gè)曲面沿任意路徑來(lái)放樣構(gòu)造曲面呢?
圖6. 放樣曲面
為了方便大家在移動(dòng)端也能看到我的博文,現(xiàn)已注冊(cè)微信公眾號(hào),歡迎大家掃描下方二維碼關(guān)注。











