--可以得到曲线得一般特征,比如连续得等级,封闭特点,周期性,边界参数; --当用一个矩阵应用于曲线或原始曲线转化后进行相应参数得改变;
所有得曲线必须几何连续,曲线至少一阶可导。一般来说,在生成一个曲线时,要先检查一下所应用得参数就是否可以生成一个光滑曲线;否则会出现错误; 另外注意一点:不可以构造空长度得曲线或自相交得曲线; 此类得基类就是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_Integer NbPoints() const;相交点数; --Standard_Integer NbSegments() const;切线相交数;
--void Segment(const Standard_Integer Index,Handle(Geom2d_Curve)& Curve1,Handle(Geom2d_Curve)& Curve2) const;返回其中一个线段;
下面得示例就是两个曲线相交得例子:
首先,生成第一个曲线,在这里,应用点数组来生成一个曲线; --定义数组
Handle(TColgp_HArray1OfPnt2d) harray = new TColgp_HArray1OfPnt2d (1,5); // sizing harray
--输入点数组得值
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_Interpolate anInterpolation(harray,Standard_False,0、01); --生成曲线
anInterpolation、
Perform();
Handle(Geom2d_BSplineCurve) SPL = anInterpolation、Curve();
--第二个曲线用两点来生
成
gp_Pnt2d P1(-1,-2);gp_Pnt2d P2(0,15);gp_Dir2d V1 =
gp::DY2d();
Handle(Geom2d_TrimmedCurve)
TC1= GCE2d_MakeSegment(P1,V1,P2);
--下面进行曲线得求
交 Standard_Real tolerance =
Precision::Confusion(); Geom2dAPI_InterCurveCurve ICC (SPL,TC1,tolerance);
--得到交点
Standard_Integer NbPoints =ICC、
NbPoints();
gp_Pnt2d
PK; for (Standard_Integer k =
1;k<=NbPoints;k++) {
PK = ICC、
Point(k);
// 针对每个交点,进行相应处理; }
Geom2d_OffsetCurve类: 此类用来实现偏移曲线; 比如:
--生成一个曲线
TColgp_Array1OfPnt2d array (1,5); // sizing array
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_Real dist =
1;
Handle(Geom2d_OffsetCurve) OC
=
new
Geom2d_OffsetCurve(SPL1,dist);
Standard_Boolean result = OC->IsCN(2); GccAna_Pnt2dBisec类 此类实现两点之间得等分线、 示例:
gp_Pnt2d P1(1,2); gp_Pnt2d P2(4,5); gp_Lin2d L; GccAna_Pnt2dBisec B(P1,P2);
if (B、IsDone()) { L = B、ThisSolution(); }
因为所生成得为直线,所以显示时要转化为线段: if (B、IsDone()) {
Handle(Geom2d_TrimmedCurve) aLine = GCE2d_MakeSegment(L,-8,8); Handle(ISession2D_Curve) aCurve = new ISession2D_Curve(aLine); aDoc->GetISessionContext()->Display(aCurve, Standard_False); } gce_MakeCirc2d类
用来创建园:创建园得方法很多,主要构造方法有: --园心与通过得一点;
--通过一个园与一个距离值,创建一个同心园; --三点决定一个园; --园心与半径; gp_Elips2d类:
可以生成一个椭园,也可以生成椭园上得一段园弧; 比如:
Standard_Real major =
12;
Standard_Real minor =
4;
gp_Ax2d axis =
gp::OX2d();
gp_Elips2d
EE(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_RectangularTrimmedSurface类: 用来生成一个有边界得平面; 比如:
Handle(Geom_Plane) aProjectionPlane = GC_MakePlane(ProjectionPlane)、Value(); Handle(Geom_RectangularTrimmedSurface) aProjectionPlaneSurface=
new
Geom_RectangularTrimmedSurface(aProjectionPlane,-8、,8、,-12、,12、); DisplaySurface(aDoc,aProjectionPlaneSurface); 此类得基类就是Geom_BoundedSurface类; 此类得兄弟类还有 - Geom_BezierSurface, - Geom_BSplineSurface