Open CASCADE基础介绍

更新时间:2023-06-17 21:14:09 阅读: 评论:0

Open CASCADE基础介绍(1)
us是什么意思 英语一直在用OCC作项目,但这方面的中文资料很少,看来OCC在中国还不是十分普及;
后来,项目中使用OCC和DirectX结合使用,取得了很好的效果;
随着OCC6.3版本的推出,Open CASCADE在速度方面已有了很大的改变。以下为一些OCC的基础知识,愿与各位OCC爱好者共同学习;
一:OCC中的基础类:gp_Pnt
在OCC中,gp_Pnt表示一个顶点,gp_Vec表示一个向量,可以用两个顶点来生成一个向量。
kinda比如:
gp_Pnt P1(0,0,0);
gp_Pnt P2(5,0,0);
gp_Vec V1 (P1,P2);
向量有一个方法.IsOpposite(),可以用来测试两个向量的方向是相对还是平行;
比如:
gp_Pnt P3(-5,0,2);
gp_Vec V2 (P1,P3);
Standard_Boolean result =V1.IsOpposite(V2,Precision::Angular());
另外向量还有一些重要方法:
privilege
--Standard_Real Magnitude() const;计算向量的大小;
--Standard_Real SquareMagnitude() const;计算向量的平方;
--向量的加减乘除操作;
--向量的单位化;
--通过一个点,线,面得出其镜像的向量;
--向量的旋转,平移,缩放;
具体的函数名称可以看OCC的头文件说明;
有时需要决定一组空间点是位于一个点;一条直线,或一个平面,或一个空间:
OCC中提供了相应的算法;
比如:
TColgp_Array1OfPnt array (1,5); // sizing array
array.SetValue(1,gp_Pnt(0,0,1));
array.SetValue(2,gp_Pnt(1,2,2));
array.SetValue(3,gp_Pnt(2,3,3));
ui设计学校array.SetValue(4,gp_Pnt(4,4,4));
wacarray.SetValue(5,gp_Pnt(5,5,5));
GProp_PEquation PE (array,1.5 );
                                                                 
if (PE.IsPoint()){ /* ... */
} //是否是同一个点
gp_Lin L;
if (PE.IsLinear()) {
L = PE.Line();
} //是否位于一条直线上;
if (PE.IsPlanar()){ /* ... */
}
//是否在一个平面内;
if (PE.IsSpace()) { /* ... */
}
gp_Dir类:
此类用来描述3D空间中的一个单位向量;
sgp是哪个国家的缩写常用方法:
(1):IsEqual(const gp_Dir& Other,const Standard_Real AngularTolerance) const;两个单位向量是否相等;
(2):IsNormal(const gp_Dir& Other,const Standard_Real AngularTolerance) const;两个单位向量的夹角是否是PI/2;
(3):IsOpposite(const gp_Dir& Other,const Standard_Real AngularTolerance) const;两个单位向量是否方向相反;
(4):IsParallel(const gp_Dir& Other,const Standard_Real AngularTolerance) const;两个单位向量夹角O或PI;
(5):Angle(const gp_Dir& Other) const;求两个向量之间的夹角;
(6):void CrossCross(const gp_Dir& V1,const gp_Dir& V2) ;计算三个向量之间的叉积;
(7):Standard_Real Dot(const gp_Dir& Other) const;计算点积;
(8):Standard_Real DotCross(const gp_Dir& V1,const gp_Dir& V2) const;计算叉积再点积;
(9):gp_Dir Reverd() const;得到反方向,
在OCC中用 gp_Lin2d 类,来生成一个二维空间的直线,有它的原点和单位向量;
gp_Ax2d 类:
通过原点和X方向单位和Y方向单位建立一个二维坐标系;利用n参数可以决定是右手系还是左手系;
可以利用平移、旋转、缩放、镜像来更改坐标系;
类似地,gp_Ax3类:
用来描述一个3D空间的坐标系。而gp_Ax2类用来表示一个二维空间坐标系;可以为右手系,也可以是左手系;
二、曲线类GeomAPI和GeomConvert包:
GeomAPI开发包提供了一个几何体的可编程应用程序接口;
比如:
求点P和曲线C的距离D:
D = GeomAPI_ProjectPointOnCurve(P,C);
或者
GeomAPI_ProjectPointOnCurve PonC(P,C); <br>
D = PonC.LowerDistance();
GeomConvert包提供了一些全局函数,可以用来实现转化一个Geom曲线为BSpline曲线等;
比如:
Handle(Geom_BSplineSurface) aPipeSurface =
Handle(Geom_BSplineSurface)::DownCast(aPipe.Surface());
Handle(Geom_BSplineSurface) anotherBSplineSurface =
GeomConvert::SplitBSplineSurface(aPipeSurface,1,2,3,6);
OCC中三维几何曲线的类型有:
--线
--园
--椭圆
--二次曲线
--抛物线
--Bezier曲线
--BSpline曲线
可以将一个二维的几何曲线转化为某个平面内的一个三维曲线:
比如:
Standard_Real radius = 5;
gp_Ax2d ax2d(gp_Pnt2d(2,3),gp_Dir2d(1,0));
//生成一个二维园
Handle(Geom2d_Circle) circ2d = new Geom2d_Circle(ax2d,radius);
gp_Ax2d circ2dXAxis = circ2d->XAxis();
// 然后,在这个平面里转化为三维曲线;
Handle(Geom_Curve) C3D = GeomAPI::To3d(circ2d,gp_Pln(gp_Ax3(gp::XOY())));
Handle(Geom_Circle) C3DCircle = Handle(Geom_Circle)::DownCast(C3D);
                                                       
gp_Ax1 C3DCircleXAxis = C3DCircle->XAxis();
另外,可以以将一个三维曲线,投影到一个平面内,从而生成一个二维曲线
gp_Pln ProjectionPlane(gp_Pnt(1,1,0),gp_Dir( 1,1,1 ));
Handle(Geom2d_Curve) C2D = GeomAPI::To2d(C3D,ProjectionPlane);
Handle(Geom2d_Circle) C2DCircle =Handle(Geom2d_Circle)::DownCast(C2D);
gp_Ax2d C2DCircleXAxis = C2DCircle->XAxis();
将一个基本几何图形进行空间变换可以使用它自带的函数:
比如:
Handle(Geom_Geometry) aRotatedEntity
= circle->Rotated(gp::OZ(),PI/4);
如果想获取图形的类型名称:
Standard_CString aRotatedEntityTypeName = aRotatedEntity->DynamicType()->Name();
gp_Parab2d类:
描述一个平面内的抛物线;
示例:
gp_Pnt2d P(2,3);
gp_Dir2d D(4,5);
gp_Ax22d A(P,D);
gp_Parab2d Para(A,6);
GCE2d_MakeParabola类:
生成一个抛物线图形;
Geom2d_BSplineCurve类:
描述样条曲线;
Geom2dAPI_Interpolate类:
通过一组点来修改一个样条曲线;
stringFairCurve_Batten类: 节哀顺变英文
用一个常量或线性增加的值来构造曲线;可以用来设计木纹或塑料板条;图形为二维的,可以模拟物理样条或板条.
Geom2d_TrimmedCurve类:
此类通过两个值,定义曲线的一部分,
--可以用来计算曲线的参数值和点坐标;
--可以得到曲线的一般特征,比如连续的等级,封闭特点,周期性,边界参数;
--当用一个矩阵应用于曲线或原始曲线转化后进行相应参数的改变;
所有的曲线必须几何连续,曲线至少一阶可导。一般来说,在生成一个曲线时,要先检查一下所应用的参数是否可以生成一个光滑曲线;否则会出现错误;
另外注意一点:不可以构造空长度的曲线或自相交的曲线;
此类的基类是Geom2d_BoundedCurve类:
它是一个抽象类;描述二维空间中的边界曲线的一般行为;除了Geom2d_TrimmedCurve是它的一个派生类外,它还有二个派生类:
-
Geom2d_BezierCurve
ideology
- Geom2d_BSplineCurve
Geom2d_BoundedCurve类的基类是Geom2d_Curve类:
报考类别

本文发布于:2023-06-17 21:14:09,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/978328.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:曲线   向量   空间   用来   方向   参数   转化
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图