OCC类基础(整理)(一).pdfVIP

  • 336
  • 0
  • 约4.97万字
  • 约 45页
  • 2020-10-22 发布于广东
  • 举报
一直在用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)); 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;计算点积; 2 (8):Standard_Real DotCross(const gp_Dir V1,const gp_Dir V2) const;计算叉积再 点积; (9):gp_Dir Reversed() const;得到反方向, 在OCC 中用 gp_Lin2d 类,来生成一个二维空间的直线,有它的原点和单位向量; gp_Ax2d 类: 通过原点和X

文档评论(0)

1亿VIP精品文档

相关文档