opencascade Adaptor3d_CurveOnSurface源码学习

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 点。

参考
参考链接