1、概要
本文以创建椭圆封头为例,讲一下椭圆曲线构建、椭圆曲线裁剪和回转特征创建的实现方法。
2、效果图
创建完成的椭圆封头如下图所示:
3、实现逻辑
创建椭圆封头的逻辑路线为:
1、根据椭圆中心点和椭圆所在的平面,创建建椭圆曲线
2、根据椭圆曲线的参数裁剪获得四分之一的曲线
3、根据平面向量、长轴矢量,计算回转轴
4、创建回转特征
5、显示回转特征
4、实现过程
4.1 创建椭圆曲线
创建椭圆曲线,是采用Geom_Ellipse来实现的,其需要的参数是
a) 椭圆所在的轴向矢量
b) 长轴半径
c) 短轴半径(这里是短轴半径是长轴半径的一半)
gp_Ax2 ax2(origion, vector);
double radius = 40;
double scale = 2;
Handle(Geom_Ellipse) ellipse = new Geom_Ellipse(ax2,radius,radius*1.0/scale);
TopoDS_Edge ed1 = BRepBuilderAPI_MakeEdge(ellipse);
Handle(AIS_Shape)aisEdge = new AIS_Shape(ed1);
myContext->Display(aisEdge, true);
然后显示后的椭圆曲线为:
4.2 裁剪椭圆曲线
创建椭圆封头只需要椭圆曲线的四分之一,则可以通过裁剪来完成。
对于椭圆曲线,通过参数来获取长轴点和短轴点,但是对于椭圆曲线其参数范围为[0,2*pi],其代码为:
double u1 = 0;
double u2 = M_PI_2;
gp_Pnt pnt1, pnt2;
gp_Vec vec1, vec2;
ellipse->D1(u1, pnt1, vec1);
ellipse->D1(u2, pnt2, vec2);
gp_Vec vecZ(vector);
gp_Vec vecY = vecZ.Crossed(vec1);
gp_Pnt pntY(origion.X() + vecY.X() * radius / 2 + origion.Y() ,vecY.Y() * radius / 2 + origion.Z() ,vecY.Z() * radius / 2);
Handle(Geom_TrimmedCurve) trimmedCurve = new Geom_TrimmedCurve(ellipse,u1,u2);
TopoDS_Edge edge2 = BRepBuilderAPI_MakeEdge(trimmedCurve);
Handle(AIS_Shape)aisEdge2 = new AIS_Shape(edge2);
myContext->Display(aisEdge2, true);
显示结果如下:
4.3 创建回转轴
这里就不过多解释,是通过椭圆面法矢与长轴交叉相乘获取的,当然,可以直接通过短轴点来计算,根据实际需要来计算。
gp_Dir dir1(pnt2.X()-origion.X(), pnt2.Y() - origion.Y(), pnt2.Z() - origion.Z());
4.4 创建椭圆封头
直接上源码,就一行代码就行可以了,是利用BRepPrimAPI_MakeRevol来实现的
gp_Ax1 ax1(origion, dir1);
TopoDS_Shape shape1 = BRepPrimAPI_MakeRevol(edge2, ax1, M_PI * 2);
Handle(AIS_Shape)aisShape = new AIS_Shape(shape1);