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构造
从二维曲线
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
返回在参数
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;
}
代码解释:
-
创建平面:
- 使用
Geom_Plane
创建一个平面,指定了原点和法向量。
- 使用
-
创建 UV 曲线:
- 使用
Geom2d_Line
创建一个 2D 线(即 UV 曲线)。在参数空间中,这条直线表示一个方向上的线性变化。
- 使用
-
创建面:
- 使用
BRepBuilderAPI_MakeFace
从平面创建一个面。
- 使用
-
定义曲线:
- 使用
Adaptor3d_CurveOnSurface
将 UV 曲线与面关联,定义了曲面上的 3D 曲线。
- 使用
-
获取 3D 点:
- 使用
Value
方法在指定的参数下获取曲线上的 3D 点。
- 使用