opencascade Adaptor3d_CurveOnSurface原始碼學習

一点灯發表於2024-09-20

opencascade Adaptor3d_CurveOnSurface

前言

用於連線由Geom包中表面上的曲線提供的服務,以及使用這條曲線的演算法所要求的服務。該曲線被定義為一個二維曲線,來自Geom2d包,位於表面的引數空間中

方法

1

預設建構函式
Standard_EXPORT Adaptor3d_CurveOnSurface();

2

透過給定的表面控制代碼S構造
Standard_EXPORT Adaptor3d_CurveOnSurface(const Handle(Adaptor3d_Surface)& S);

3

透過給定的二維曲線控制代碼C和表面控制代碼S構造
從二維曲線和表面建立CurveOnSurface。
Standard_EXPORT Adaptor3d_CurveOnSurface(const Handle(Adaptor2d_Curve2d)& C, const Handle(Adaptor3d_Surface)& S);

4

介面卡的淺複製
Standard_EXPORT virtual Handle(Adaptor3d_Curve) ShallowCopy() const Standard_OVERRIDE;

5

更改表面
Standard_EXPORT void Load(const Handle(Adaptor3d_Surface)& S);

6

更改二維曲線
Standard_EXPORT void Load(const Handle(Adaptor2d_Curve2d)& C);

7

同時載入曲線和表面
Standard_EXPORT void Load(const Handle(Adaptor2d_Curve2d)& C, const Handle(Adaptor3d_Surface)& S);

8

獲取二維曲線的控制代碼(常量)
Standard_EXPORT const Handle(Adaptor2d_Curve2d)& GetCurve() const;

9

獲取表面的控制代碼(常量)
Standard_EXPORT const Handle(Adaptor3d_Surface)& GetSurface() const;

10

獲取二維曲線的控制代碼(非常量)
Standard_EXPORT Handle(Adaptor2d_Curve2d)& ChangeCurve();

11

獲取表面的控制代碼(非常量)
Standard_EXPORT Handle(Adaptor3d_Surface)& ChangeSurface();

12

獲取曲線的第一個引數
Standard_EXPORT Standard_Real FirstParameter() const Standard_OVERRIDE;

13

獲取曲線的最後一個引數
Standard_EXPORT Standard_Real LastParameter() const Standard_OVERRIDE;

14

獲取曲線的連續性型別
Standard_EXPORT GeomAbs_Shape Continuity() const Standard_OVERRIDE;

15

返回滿足連續性的區間數量
Standard_EXPORT Standard_Integer NbIntervals(const GeomAbs_Shape S) const Standard_OVERRIDE;

16

將滿足連續性的區間引數儲存在
Standard_EXPORT void Intervals(TColStd_Array1OfReal& T, const GeomAbs_Shape S) const Standard_OVERRIDE;

17

返回在引數之間的曲線等效體,使用來測試3D點的混淆
Standard_EXPORT Handle(Adaptor3d_Curve) Trim(const Standard_Real First, const Standard_Real Last, const Standard_Real Tol) const Standard_OVERRIDE;

18

檢查曲線是否閉合
Standard_EXPORT Standard_Boolean IsClosed() const Standard_OVERRIDE;

19

檢查曲線是否週期性
Standard_EXPORT Standard_Boolean IsPeriodic() const Standard_OVERRIDE;

20

獲取曲線的週期(如果週期性)
Standard_EXPORT Standard_Real Period() const Standard_OVERRIDE;

21

計算引數U在曲線上的點
Standard_EXPORT gp_Pnt Value(const Standard_Real U) const Standard_OVERRIDE;

22

計算引數U在曲線上的點(與D0相同)
Standard_EXPORT void D0(const Standard_Real U, gp_Pnt& P) const Standard_OVERRIDE;

23

計算引數U在曲線上的點及其一階導數
Standard_EXPORT void D1(const Standard_Real U, gp_Pnt& P, gp_Vec& V) const Standard_OVERRIDE;

24

計算引數U在曲線上的點及其一階和二階導數
Standard_EXPORT void D2(const Standard_Real U, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2) const Standard_OVERRIDE;

25

計算引數U在曲線上的點及其一階、二階和三階導數
Standard_EXPORT void D3(const Standard_Real U, gp_Pnt& P, gp_Vec& V1, gp_Vec& V2, gp_Vec& V3) const Standard_OVERRIDE;

26

返回引數U處N階導數的值
Standard_EXPORT gp_Vec DN(const Standard_Real U, const Standard_Integer N) const Standard_OVERRIDE;

27

返回與三維空間解析度對應的引數解析度
Standard_EXPORT Standard_Real Resolution(const Standard_Real R3d) const Standard_OVERRIDE;

28

返回當前區間內曲線的型別:直線、圓、橢圓、雙曲線、拋物線、貝塞爾曲線、B樣條曲線、其他曲線
Standard_EXPORT GeomAbs_CurveType GetType() const Standard_OVERRIDE;

用法示例

Adaptor3d_CurveOnSurface 是 OpenCascade 中的一個類,用於表示在曲面上的 3D 曲線。這個類通常用於表示 UV 曲線在曲面上的對映,並可以從中提取 3D 曲線的點、導數等資訊。下面是一個簡單的例子,展示如何使用 Adaptor3d_CurveOnSurface 來在曲面上定義和處理曲線。

例子:在一個平面上建立一個 UV 曲線並使用 Adaptor3d_CurveOnSurface

這個例子展示瞭如何在平面上定義一個 UV 曲線(例如,直線),並使用 Adaptor3d_CurveOnSurface 來獲取曲線在 3D 空間中的點。

#include <Geom_Plane.hxx>
#include <Geom2d_Line.hxx>
#include <GeomAdaptor.hxx>
#include <Adaptor3d_CurveOnSurface.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRepTools.hxx>
#include <TopoDS_Shape.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Edge.hxx>

int main() {
    // 建立一個平面
    gp_Pnt origin(0.0, 0.0, 0.0);
    gp_Dir normal(0.0, 0.0, 1.0);
    Handle(Geom_Plane) plane = new Geom_Plane(origin, normal);

    // 建立一個 UV 線(直線)
    gp_Pnt2d uvStart(0.0, 0.0);
    gp_Dir2d uvDir(1.0, 1.0);
    Handle(Geom2d_Line) uvLine = new Geom2d_Line(uvStart, uvDir);

    // 建立一個面(用平面建立)
    TopoDS_Face face = BRepBuilderAPI_MakeFace(plane, Precision::Confusion());

    // 使用 Adaptor3d_CurveOnSurface 定義曲線
    Adaptor3d_CurveOnSurface curveOnSurface(uvLine, face);

    // 獲取曲線的 3D 點
    gp_Pnt point3D;
    Standard_Real parameter = 0.0;
    point3D = curveOnSurface.Value(parameter);

    // 輸出 3D 點
    std::cout << "3D Point: (" << point3D.X() << ", " << point3D.Y() << ", " << point3D.Z() << ")" << std::endl;

    return 0;
}

程式碼解釋:

  1. 建立平面:

    • 使用 Geom_Plane 建立一個平面,指定了原點和法向量。
  2. 建立 UV 曲線:

    • 使用 Geom2d_Line 建立一個 2D 線(即 UV 曲線)。在引數空間中,這條直線表示一個方向上的線性變化。
  3. 建立面:

    • 使用 BRepBuilderAPI_MakeFace 從平面建立一個面。
  4. 定義曲線:

    • 使用 Adaptor3d_CurveOnSurface 將 UV 曲線與面關聯,定義了曲面上的 3D 曲線。
  5. 獲取 3D 點:

    • 使用 Value 方法在指定的引數下獲取曲線上的 3D 點。

參考
參考連結

相關文章