OpenCasCade一些常用的API
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCasCade一些常用的API相关的知识,希望对你有一定的参考价值。
参考技术A 1、三维点gp_point2、边TopoDS_Edge
通过BRepBuilderAPI_MakeEdge创建边
BRepBuilderAPI_MakeEdge(const gp_Pnt& P1, const gp_Pnt& P2); 通过两个点构造边
BRepBuilderAPI_MakeEdge(const gp_Lin& L); 通过射线构造边
此外gp_Circ(圆)、gp_Elips(椭圆)、gp_Hypr(双曲线一支)、gp_Parab(抛物线)、Geom_Curve(弧线)、Geom2d_Curve(二维弧线)等亦可构建边
3、TopoDS_Wire
API函数BRepBuilderAPI_MakeWire创建wire
4、面TopoDS_Face
通过BRepBuilderAPI_MakeFace创建面
也可通过gp_Pln、gp_Cylinder、gp_Cone、gp_Sphere、gp_Torus等构造面
BRepBuilderAPI_MakeFace::Add 添加线
BRepBuilderAPI_MakeFace::IsDone 构成一个有效面则返还true
BRepBuilderAPI_MakeFace::Error 返还构建结果状态
BRepBuilderAPI_MakeFace::Face 返回构建的面
5、体TopoDS_Shape
BRepPrimAPI_MakeCylinder创建圆柱体
BRepPrimAPI_MakeCone创建圆锥体
BRepPrimAPI_MakeSphere创建球体
BRepPrimAPI_MakeTorus创建圆环体
BRepPrimAPI_MakeRevolution创建旋转体
TopoDS_Compound 复合体(没有实验效果)
BRep_Builder builder;
TopoDS_Compound Comp;
TopoDS_Shape S1, S2;
builder.Add(Comp, S1);
builder.Add(Comp, S2);
6. gp_Trsf 几何变换
gp_Trsf::SetMirror 镜像变换
gp_Trsf::SetRotation 角度旋转变换
gp_Trsf::SetScale 缩放变换
gp_Trsf::SetTranslation 平移变换
7. BRepAlgoAPI_BooleanOperation 图形布尔运算
7.1 BRepAlgoAPI_Fuse布尔并运算
7.2 BRepAlgoAPI_Common布尔交运算
7.3 BRepAlgoAPI_Cut布尔差运算
7.4 BRepAlgoAPI_Section 求交
OpenCASCADE构造一般曲面
OpenCASCADE构造一般曲面
Abstract. 本文主要介绍常见的曲面如一般柱面(拉伸曲面)、旋转面在OpenCASCADE中的构造方法,由此思考一般放样算法的实现。
Key Words. Common Surface, Extrusion, Revolution
1.Introduction
实体Solid就是由面组成,面中包含几何曲面,常见的几何曲面有平面,柱面,旋转面等。对几何曲面有一些功能要求:如计算指定参数u,v处的点,切线等,即求指定参数u,v处的0阶导数、1阶导数,N阶导数;获取参数空间等。
图1. 放样曲面
由类图可以看出,放样曲面Swept Surface有两种形式:Geom_SurfaceOfLinearExtrusion和Geom_SurfaceOfRevolution。一种是线性拉伸成形的曲面,一种是旋转成形的曲面。
图2. 拉伸曲面
如上图1所示,可以将一条曲线沿一方向拉伸一定的距离来构造曲面,被拉伸的曲线称为准线。
图3. 旋转曲面
如上图2所示,将一条曲线绕指定的轴线旋转一定的角度得到一个旋转面。
本文结合OpenCASCADE中源码来说明拉伸曲面及旋转曲面原理。
2.The Surface of Extrusion
OpenCASCADE中线性拉伸曲面的类名为:Geom_SurfaceOfLinearExtrusion,其参数方程如下:
其中参数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计算出准线上的点,再将点沿拉伸方向移动拉伸向量模的距离。
图4. 拉伸多边形
如上图4所示为将多边形准线沿着Z方向拉伸得到一个拉伸曲面。
3.The Surface of Revolution
OpenCASCADE中旋转曲面的类名为:Geom_SurfaceOfRevolution,其参数方程如下:
其中计算旋转曲面上对应参数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计算曲线上的点,再将点按指定的轴旋转变换。
图5. 旋转曲面
如上图5所示,将红色母线绕Y轴旋转90度得到的旋转曲面。线性拉伸曲面和旋转曲面都是特定条件下的放样曲面。拉伸曲面为沿直线放样得到的曲面,旋转曲面是沿圆放样得到的曲面。由此,可以思考一个问题,那就是如何将任意一个曲面沿任意路径来放样构造曲面呢?
图6. 放样曲面
以上是关于OpenCasCade一些常用的API的主要内容,如果未能解决你的问题,请参考以下文章
OpenCASCADE Make Face With Holes