OCC类基础.docx

上传人:b****6 文档编号:13685813 上传时间:2023-06-16 格式:DOCX 页数:63 大小:35.63KB
下载 相关 举报
OCC类基础.docx_第1页
第1页 / 共63页
OCC类基础.docx_第2页
第2页 / 共63页
OCC类基础.docx_第3页
第3页 / 共63页
OCC类基础.docx_第4页
第4页 / 共63页
OCC类基础.docx_第5页
第5页 / 共63页
OCC类基础.docx_第6页
第6页 / 共63页
OCC类基础.docx_第7页
第7页 / 共63页
OCC类基础.docx_第8页
第8页 / 共63页
OCC类基础.docx_第9页
第9页 / 共63页
OCC类基础.docx_第10页
第10页 / 共63页
OCC类基础.docx_第11页
第11页 / 共63页
OCC类基础.docx_第12页
第12页 / 共63页
OCC类基础.docx_第13页
第13页 / 共63页
OCC类基础.docx_第14页
第14页 / 共63页
OCC类基础.docx_第15页
第15页 / 共63页
OCC类基础.docx_第16页
第16页 / 共63页
OCC类基础.docx_第17页
第17页 / 共63页
OCC类基础.docx_第18页
第18页 / 共63页
OCC类基础.docx_第19页
第19页 / 共63页
OCC类基础.docx_第20页
第20页 / 共63页
亲,该文档总共63页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

OCC类基础.docx

《OCC类基础.docx》由会员分享,可在线阅读,更多相关《OCC类基础.docx(63页珍藏版)》请在冰点文库上搜索。

OCC类基础.docx

OCC类基础

一直在用OCC作项目,但这方面的中文资料很少,瞧来OCC在中国还不就是十分普及;

后来,项目中使用OCC与DirectX结合使用,取得了很好的效果;

 随着OCC6、3版本的推出,OpenCASCADE在速度方面已有了很大的改变。

以下为一些OCC的基础知识,愿与各位OCC爱好者共同学习;

一:

OCC中的基础类:

gp_Pnt

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

比如:

gp_PntP1(0,0,0);                       

gp_PntP2(5,0,0);                       

gp_VecV1(P1,P2);

向量有一个方法、IsOpposite(),可以用来测试两个向量的方向就是相对还就是平行;

比如:

                                        

gp_PntP3(-5,0,2);

gp_VecV2(P1,P3);                                          

Standard_Booleanresult=V1、IsOpposite(V2,Precision:

:

Angular());

 

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

--Standard_RealMagnitude()const;计算向量的大小;

--Standard_RealSquareMagnitude()const;计算向量的平方;

--向量的加减乘除操作;

--向量的单位化;

--通过一个点,线,面得出其镜像的向量;

--向量的旋转,平移,缩放;

具体的函数名称可以瞧OCC的头文件说明;

 

有时需要决定一组空间点就是位于一个点;一条直线,或一个平面,或一个空间:

OCC中提供了相应的算法;

比如:

TColgp_Array1OfPntarray(1,5);//sizingarray                 

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_PEquationPE(array,1、5);                                

                                                                

if(PE、IsPoint()){  }//就是否就是同一个点   

gp_LinL;                                                       

if(PE、IsLinear()){  L=PE、Line();    }//就是否位于一条直线上;                    

if(PE、IsPlanar()){  }   //就是否在一个平面内; 

if(PE、IsSpace()){  } 

 

gp_Dir类:

此类用来描述3D空间中的一个单位向量;

常用方法:

(1):

IsEqual(constgp_Dir&Other,constStandard_RealAngularTolerance)const;两个单位向量就是否相等;

(2):

IsNormal(constgp_Dir&Other,constStandard_RealAngularTolerance)const;两个单位向量的夹角就是否就是PI/2;

(3):

IsOpposite(constgp_Dir&Other,constStandard_RealAngularTolerance)const;两个单位向量就是否方向相反;

(4):

IsParallel(constgp_Dir&Other,constStandard_RealAngularTolerance)const;两个单位向量夹角O或PI;

(5):

Angle(constgp_Dir&Other)const;求两个向量之间的夹角;

(6):

voidCrossCross(constgp_Dir&V1,constgp_Dir&V2);计算三个向量之间的叉积;

(7):

Standard_RealDot(constgp_Dir&Other)const;计算点积;

(8):

Standard_RealDotCross(constgp_Dir&V1,constgp_Dir&V2)const;计算叉积再点积;

(9):

gp_DirReversed()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_ProjectPointOnCurvePonC(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_Realradius=5;                               

gp_Ax2dax2d(gp_Pnt2d(2,3),gp_Dir2d(1,0));             

//生成一个二维园                                                      

Handle(Geom2d_Circle)circ2d=newGeom2d_Circle(ax2d,radius);                    

                                                        

gp_Ax2dcirc2dXAxis=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_Ax1C3DCircleXAxis=C3DCircle->XAxis();            

                                                       

另外,可以以将一个三维曲线,投影到一个平面内,从而生成一个二维曲线

gp_PlnProjectionPlane(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_Ax2dC2DCircleXAxis=C2DCircle->XAxis();

 

将一个基本几何图形进行空间变换可以使用它自带的函数:

比如:

Handle(Geom_Geometry)aRotatedEntity  =circle->Rotated(gp:

:

OZ(),PI/4);

如果想获取图形的类型名称:

            

Standard_CStringaRotatedEntityTypeName=aRotatedEntity->DynamicType()->Name();

 

gp_Parab2d类:

描述一个平面内的抛物线;

示例:

gp_Pnt2dP(2,3);                         

gp_Dir2dD(4,5);                         

gp_Ax22dA(P,D);                         

gp_Parab2d Para(A,6);

 

GCE2d_MakeParabola类:

生成一个抛物线图形;

 

Geom2d_BSplineCurve类:

描述样条曲线;

 

Geom2dAPI_Interpolate类:

通过一组点来修改一个样条曲线;

 

FairCurve_Batten类:

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

Geom2d_TrimmedCurve类:

此类通过两个值,定义曲线的一部分,

--可以用来计算曲线的参数值与点坐标;

--可以得到曲线的一般特征,比如连续的等级,封闭特点,周期性,边界参数;

--当用一个矩阵应用于曲线或原始曲线转化后进行相应参数的改变;

所有的曲线必须几何连续,曲线至少一阶可导。

一般来说,在生成一个曲线时,要先检查一下所应用的参数就是否可以生成一个光滑曲线;否则会出现错误;

另外注意一点:

不可以构造空长度的曲线或自相交的曲线;

此类的基类就是Geom2d_BoundedCurve类:

它就是一个抽象类;描述二维空间中的边界曲线的一般行为;除了Geom2d_TrimmedCurve就是它的一个派生类外,它还有二个派生类:

-Geom2d_BezierCurve

-Geom2d_BSplineCurve

Geom2d_BoundedCurve类的基类就是Geom2d_Curve类:

Geom2d_Curve:

抽象类;此抽象类描述了2D空间的曲线的一般特征;派生出的类有多个:

包括直线,园,二次曲线,Bizier,BSpline曲线等;这些曲线的特点就是可以参数化;

 

Geom2d_Curve类的基类就是Geom2d_Geometry类;

此抽象类主要定义了曲线的变换,平移,旋转,缩放及拷贝等方法;

 

Geom2d_Geometry类的基类就是MMgt_TShared类;

此抽象类为管理对象的基类,可以引用计数,及删除方法;

 

Standard_Transient:

此抽象类为所有类共同的基类;

Geom2dAPI_InterCurveCurve类:

此类用来实现二维曲线的相交;

一种情况就是曲线与曲线的相交,另外一种情况就是曲线自身的相交;

主要方法有:

--Standard_IntegerNbPoints()const;相交点数;

--Standard_IntegerNbSegments()const;切线相交数;

--voidSegment(constStandard_IntegerIndex,Handle(Geom2d_Curve)&Curve1,Handle(Geom2d_Curve)&Curve2)

const;返回其中一个线段;

 

下面的示例就是两个曲线相交的例子:

首先,生成第一个曲线,在这里,应用点数组来生成一个曲线;

--定义数组

Handle(TColgp_HArray1OfPnt2d)harray=  newTColgp_HArray1OfPnt2d(1,5);//sizingharray              

--输入点数组的值

harray->SetValue(1,gp_Pnt2d(0,0));                                

harray->SetValue(2,gp_Pnt2d(-3,1));                               

harray->SetValue(3,gp_Pnt2d(-2,5));                                

harray->SetValue(4,gp_Pnt2d(2,9));                                

harray->SetValue(5,gp_Pnt2d(-4,14));                              

 

--检测一下点与点之间就是否为同一点;0、01为公差值,依实际需要可以更改此参数;                                                                 

Geom2dAPI_InterpolateanInterpolation(harray,Standard_False,0、01); 

--生成曲线

anInterpolation、Perform();                                        

Handle(Geom2d_BSplineCurve)SPL=anInterpolation、Curve();         

 

--第二个曲线用两点来生成                                                                    

gp_Pnt2dP1(-1,-2);gp_Pnt2dP2(0,15);gp_Dir2dV1=gp:

:

DY2d();                                          

Handle(Geom2d_TrimmedCurve)TC1=  GCE2d_MakeSegment(P1,V1,P2);                                   

  

--下面进行曲线的求交                                                                 

Standard_Realtolerance=Precision:

:

Confusion();                  

Geom2dAPI_InterCurveCurveICC(SPL,TC1,tolerance); 

 

--得到交点               

Standard_IntegerNbPoints=ICC、NbPoints();                          

gp_Pnt2dPK;                                                       

for(Standard_Integerk=1;k<=NbPoints;k++)                       

  {

                                                              

    PK=ICC、Point(k);                                              

    // 针对每个交点,进行相应处理;                  

  }                                                                

 

Geom2d_OffsetCurve类:

此类用来实现偏移曲线;

比如:

--生成一个曲线

TColgp_Array1OfPnt2darray(1,5);//sizingarray                     

array、SetValue(1,gp_Pnt2d(-4,0));array、SetValue(2,gp_Pnt2d(-7,2)); 

array、SetValue(3,gp_Pnt2d(-6,3));array、SetValue(4,gp_Pnt2d(-4,3)); 

array、SetValue(5,gp_Pnt2d(-3,5));                                    

Handle(Geom2d_BSplineCurve)SPL1=Geom2dAPI_PointsToBSpline(array);   

 

--生成一个偏移曲线                                                                     

Standard_Realdist=1;                                               

Handle(Geom2d_OffsetCurve)OC=                                       

       newGeom2d_OffsetCurve(SPL1,dist);                             

Standard_Booleanresult=OC->IsCN

(2); 

 GccAna_Pnt2dBisec类

此类实现两点之间的等分线、

示例:

gp_Pnt2dP1(1,2);           

gp_Pnt2dP2(4,5);           

gp_Lin2dL;                 

GccAna_Pnt2dBisecB(P1,P2); 

if(B、IsDone())             

{L=B、ThisSolution();}

因为所生成的为直线,所以显示时要转化为线段:

if(B、IsDone())

         {

        Handle(Geom2d_TrimmedCurve)aLine=GCE2d_MakeSegment(L,-8,8);

        Handle(ISession2D_Curve)aCurve=newISession2D_Curve(aLine);

        aDoc->GetISessionContext()->Display(aCurve,Standard_False);

      }

gce_MakeCirc2d类

用来创建园:

创建园的方法很多,主要构造方法有:

--园心与通过的一点;

--通过一个园与一个距离值,创建一个同心园;

--三点决定一个园;

--园心与半径;

gp_Elips2d类:

可以生成一个椭园,也可以生成椭园上的一段园弧;

比如:

Standard_Realmajor=12;                                               

Standard_Realminor=4;                                               

gp_Ax2daxis=gp:

:

OX2d();                                             

gp_Elips2dEE(axis,major,minor);;                                          

Handle(Geom2d_TrimmedCurve)arc=GCE2d_MakeArcOfEllipse(EE,0、0,PI/4); 

上面就是利用长短轴的方法构造椭圆,也可以用二次方程的方式来构造椭园;

其中椭园类中方法可以求出焦点1与焦点2的位置,两焦点之间的位置,离心率;旋转,平移,缩放等操作、

 

三、关于面的类

gp_Pln类:

定义一个平面,构造的方法可以就是点法式,或通过ABCD系数;

另外,还提供了一些常用的方法,比如:

--求点到平面,线到平面,平面与平面的距离及平方距离;

--点就是否在平面内,线就是否在平面内;

--通过一个点,一个轴的镜像平面;

--平面的旋转,缩放与平移;

Geom_ElementarySurface类:

此类用来描述一个表面,此类的派生类有:

平面;园柱面;锥面;球面;园环面;

它的基类就是Geom_Surface,就是一个抽象类;

Geom_Surface类的基类就是Geom_Geometry类;

 

Geom_Rectan

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2