OpenCASCADE構造一般曲面


OpenCASCADE構造一般曲面

eryar@163.com

Abstract. 本文主要介紹常見的曲面如一般柱面(拉伸曲面)、旋轉面在OpenCASCADE中的構造方法,由此思考一般放樣算法的實現。

Key Words. Common Surface, Extrusion, Revolution

1.Introduction

實體Solid就是由面組成,面中包含幾何曲面,常見的幾何曲面有平面,柱面,旋轉面等。對幾何曲面有一些功能要求:如計算指定參數u,v處的點,切線等,即求指定參數u,v處的0階導數、1階導數,N階導數;獲取參數空間等。

wps_clip_image-5601

圖1. 放樣曲面

由類圖可以看出,放樣曲面Swept Surface有兩種形式:Geom_SurfaceOfLinearExtrusion和Geom_SurfaceOfRevolution。一種是線性拉伸成形的曲面,一種是旋轉成形的曲面。

wps_clip_image-11911

圖2. 拉伸曲面

如上圖1所示,可以將一條曲線沿一方向拉伸一定的距離來構造曲面,被拉伸的曲線稱為准線。

wps_clip_image-28612

圖3. 旋轉曲面

如上圖2所示,將一條曲線繞指定的軸線旋轉一定的角度得到一個旋轉面。

本文結合OpenCASCADE中源碼來說明拉伸曲面及旋轉曲面原理。

2.The Surface of Extrusion

OpenCASCADE中線性拉伸曲面的類名為:Geom_SurfaceOfLinearExtrusion,其參數方程如下:

wps_clip_image-363

其中參數u的定義域決定准線C(u)的參數范圍;參數v的取值范圍是無窮的。即拉伸曲面是一個很長的柱面,如果在參數v上不加限制的話。其中一些計算功能代碼如下所示:

//! 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);
}

從計算曲面上在指定參數u,v處的點的函數D0()可以看出,先根據參數u計算出准線上的點,再將點沿拉伸方向移動拉伸向量模的距離。

wps_clip_image-10127

圖4. 拉伸多邊形

如上圖4所示為將多邊形准線沿着Z方向拉伸得到一個拉伸曲面。

3.The Surface of Revolution

OpenCASCADE中旋轉曲面的類名為:Geom_SurfaceOfRevolution,其參數方程如下:

wps_clip_image-21064

其中計算旋轉曲面上對應參數u,v的點的代碼如下:

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);
}

根據代碼可知,先根據參數v計算曲線上的點,再將點按指定的軸旋轉變換。

wps_clip_image-12126

圖5. 旋轉曲面

如上圖5所示,將紅色母線繞Y軸旋轉90度得到的旋轉曲面。線性拉伸曲面和旋轉曲面都是特定條件下的放樣曲面。拉伸曲面為沿直線放樣得到的曲面,旋轉曲面是沿圓放樣得到的曲面。由此,可以思考一個問題,那就是如何將任意一個曲面沿任意路徑來放樣構造曲面呢?

wps_clip_image-8780

圖6. 放樣曲面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM