好文档 - 专业文书写作范文服务资料分享网站

OCC类基础

天下 分享 时间: 加入收藏 我要投稿 点赞

一直在用OCC作项目,但这方面得中文资料很少,瞧来OCC在中国还不就是十分普及; 后来,项目中使用OCC与DirectX结合使用,取得了很好得效果;

随着OCC6、3版本得推出,Open CASCADE在速度方面已有了很大得改变。以下为一些OCC得基础知识,愿与各位OCC爱好者共同学习; 一:OCC中得基础类: gp_Pnt

在OCC中,gp_Pnt表示一个顶点,gp_Vec表示一个向量,可以用两个顶点来生成一个向量。 比如:

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());

另外向量还有一些重要方法:

--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));

array、

SetValue(4,gp_Pnt(4,4,4));

array、

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空间中得一个单位向量; 常用方法:

(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 Reversed() const;得到反方向,

在OCC中用 gp_Lin2d 类,来生成一个二维空间得直线,有它得原点与单位向量;

gp_Ax2d 类:

通过原点与X方向单位与Y方向单位建立一个二维坐标系;利用sense参数可以决定就是右手系还就是左手系;

可以利用平移、旋转、缩放、镜像来更改坐标系; 类似地,gp_Ax3类:

用来描述一个3D空间得坐标系。而gp_Ax2类用来表示一个二维空间坐标系;可以为右手系,也可以就是左手系; 二、曲线类

GeomAPI与GeomConvert包:

GeomAPI开发包提供了一个几何体得可编程应用程序接口; 比如:

求点P与曲线C得距离D:

D = GeomAPI_ProjectPointOnCurve(P,C); 或者

GeomAPI_ProjectPointOnCurve PonC(P,C); 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类: 通过一组点来修改一个样条曲线;

FairCurve_Batten类:

用一个常量或线性增加得值来构造曲线;可以用来设计木纹或塑料板条;图形为二维得,可以模拟物理样条或板条、 Geom2d_TrimmedCurve类:

此类通过两个值,定义曲线得一部分, --可以用来计算曲线得参数值与点坐标;

OCC类基础

一直在用OCC作项目,但这方面得中文资料很少,瞧来OCC在中国还不就是十分普及;后来,项目中使用OCC与DirectX结合使用,取得了很好得效果;随着OCC6、3版本得推出,OpenCASCADE在速度方面已有了很大得改变。以下为一些OCC得基础知识,愿与各位OCC爱好者共同学习;一:OCC中得基础类:gp_Pnt在OCC中,gp_Pnt表示一个顶点
推荐度:
点击下载文档文档为doc格式
4cogn6cglz58u602x74s2b61z97lf1017hq
领取福利

微信扫码领取福利

微信扫码分享