Occt的3D Geometry的曲线和曲面表示

CAD 系统出于精度的要求,通常使用曲线和曲面对模型进行精确表示,因此曲线、曲面的几何表示,就是比较基础也比较重要的东西了。

通常,曲线、曲面的表示有三种方式:

显示表示:形如:曲线的 y = f(x)

隐式表示:行如: f(x,y) = 0

参数表示,形如: x(t) = u(t),y(t) = v(t)

习惯上,选择参数表示形式,优点是有比较明确的几何意义,方便构造和显示等。

OcctGeometry 曲线和曲面表示形式,符合 STEP 标准中的定义。如下使其继承图(下面以 3D 为主):

Geom_Geometry     

----Geom_AxisPlacement      

--------Geom_Axis1Placement  

--------Geom_Axis2Placement  

----Geom_Curve     

--------Geom_BoundedCurve     

----------------Geom_BezierCurve     

----------------Geom_BSplineCurve   

----------------Geom_TrimmedCurve 

--------Geom_Conic

----------------Geom_Circle      

----------------Geom_Ellipse      

----------------Geom_Hyperbola

----------------Geom_Parabola    

--------Geom_Line   

--------Geom_OffsetCurve      

--------ShapeExtend_ComplexCurve   

----Geom_Point      

--------Geom_CartesianPoint     

----Geom_Surface  

--------GeomPlate_Surface      

--------Geom_BoundedSurface 

----------------Geom_BezierSurface  

----------------Geom_BSplineSurface 

----------------Geom_RectangularTrimmedSurface      

--------Geom_ElementarySurface      

----------------Geom_ConicalSurface 

----------------Geom_CylindricalSurface   

----------------Geom_Plane      

----------------Geom_SphericalSurface     

----------------Geom_ToroidalSurface

--------Geom_OffsetSurface     

--------Geom_SweptSurface     

----------------Geom_SurfaceOfLinearExtrusion   

----------------Geom_SurfaceOfRevolution

--------ShapeExtend_CompositeSurface    

----Geom_Vector      

--------Geom_Direction   

--------Geom_VectorWithMagnitude

 

       这里主要看 CurveSurface

       Curve 是空间的曲线。主要四大类:直线、有界曲线、二次曲线、偏移曲线。

       直线很简单,由一点和方向定义。直线是无界曲线,向两端无限延伸。参数公式为:

       P (U) = O + U*Dir  其中, U 为参数, O 为一点, Dir 为方向。

       有界曲线,顾名思义是有界限的曲线。主要是三类曲线, BezierBspline 曲线定义容易知道,最后一个Geom_TrimmedCurve 是将一个 Curve 使用两个参数值界定后得到的裁减曲线,例如,如果要表示一个线段,则需要对直线使用参数范围进行界定,获得。

       二次曲线是空间的二次曲线,首先是平面上的曲线。在空间如何定义二次曲线?主要是定义一个坐标系,然后在坐标系内部,二次曲线的定义和平面二次曲线的定义一致。具体来说,各自的参数公式可以看出这点,如下:

Geom_Circle     

P(U) = O + R*Cos(U)*XDir + R*Sin(U)*Ydir

其中 O Xdir Ydir 构成了圆所在平面的坐标系, U 为参数,范围 [0,2PI], 下面类似。

Geom_Ellipse   

P(U) = O + MajorRad*Cos(U)*XDir + MinorRad*Sin(U)*Ydir     

Circle 类似,只是有长短半径的区别。

Geom_Hyperbola     

P(U) = O + MajRad*Cosh(U)*XDir + MinRad*Sinh(U)*Ydir

注意:是 sinHcoshU 范围从负无穷到正无穷。

Geom_Parabola

P(U) = O + U*U/(4.*F)*XDir + U*Ydir

U 范围从负无穷到正无穷。

 

       下面是偏移曲线,即将一条曲线,偏移一定的距离获得的曲线。首先,要求被偏移曲线是平面曲线,否则无法偏移。其次,偏移的方向,是曲线切矢和一个参考矢量叉乘后获取的矢量的方向,通常参考矢量为平面所在平面的法矢。

 

       下面来看曲面的表示。曲面分为四大类:有界曲面、基本曲面、偏移曲面和扫掠曲面。

下面依次来看:

      

       有界曲面:

       顾名思义,有界曲面是参数域有界的曲面。这里 bezierbspline 曲面定义比较清楚。Geom_RectangularTrimmedSurface 曲面是一个曲面由参数域 [u1,u2] × [v1,v2] 界定的部分,是最基本的裁剪曲面。

      

       基本曲面:

       基本曲面描述了定义在一个局部坐标系内部的参数曲面。下面列出各个曲面的参数公式:

       平面:

       P(u, v) = O + u*XDir + v*Ydir

这里, OXdirYdir 定义了局部坐标系。 Uv 为参数,平面是无界曲面,参数域为无穷大区域。

特别注意:局部坐标系不一定非要是右手坐标系,也可能是左手坐标系,主要用于拓朴中 TopoDS_Face 的方向为Reversed 是的曲面表示。这适用于所有基本曲面。

球面: Geom_SphericalSurface

P(u,v) = O + R*cos(v)*(cos(u)*XDir + sin(u)*YDir)+R*sin(v)*Zdir

参数 u 属于 [ 0, 2.*Pi ] v 属于 [ - Pi/2., + Pi/2. ] 。公式貌似复杂,但只要画个图,运用一点几何知识,公式是显而易见的。

柱面: Geom_CylindricalSurface    

P (U, V) = Loc + Radius * (cos (U) * XDir + sin (U) * YDir) + V * Zdir

锥面: Geom_ConicalSurface

P(u, v) = O + (R + v*tan(Ang)) * (cos(u)*XDir + sin(u)*YDir) + v*Zdir

Geom_ToroidalSurface

P(u, v) = O + (R + r*cos(v)) * (cos(u)*XDir + sin(u)*YDir ) + r*sin(v)*Zdir

 

偏移曲面

就是将一个曲面偏移一定的距离获得的曲面。这里仅仅是简单的表示,没有考虑曲面自交等复杂的情况。实际上,偏移曲面是一个很复杂的曲面,需要很多的处理。

 

扫掠面:

包括拉伸面和旋转面,两种最常使用的曲面,都通过将一个曲线沿另一个曲线扫掠获得的曲面。

       拉伸面,将一个曲线沿某个向量拉伸,获得的曲面。

       旋转面,将一个曲线绕某个方向旋转,获得的曲面。

 

       还有两个曲面类,是系统内部使用的,不是 STEP 的标准形式。。其中 GeomPlate_Surface 类是生成过渡面时使用的类,用于 N 边补洞等,比较复杂。

 

       上述就曲线和曲面做了一个简单的总结,只有掌握了基本的曲线曲面形式,才能够对很多算法有深入的理解,才能对后面的拓朴结构有比较深入的理解。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值