Opencascade(OCC)曲面造型 第一部分(翻译Roman Lygin Blog)

    曲面造型在任何三维几何造型引擎中都是一个很基础的部分。就像大家知道的一样,OCC提供了一系列的基本曲面(平面、圆锥面、球面等等),Bezire曲面和BSpline曲面,旋转曲面,拉伸曲面和偏移曲面。通常还会有裁剪曲面,它是通过在参数域内裁剪基本曲面所得到的。

OCC在几何和拓扑实体的实现方面是STEP文件的一个子集(ISO 标准10303,第42部分),尽管在某些方面有一些细微的差别。

曲面通常仅仅包含最终的几何表达,并不提供任何创建它的信息。但有时候也会有例外,例如在ACIS中就有过程化曲面这样的概念,在这类曲面中它可能包含创建它的信息,同时也会有一些最终的近似几何表达。例如,蒙皮曲面就会有一系列截面线的信息并且记录了曲面是由“蒙皮”这个操作所产生的,同时它可以最终近似表达成NURBS。这样一种概念就会使得造型器增加越来越多的实体类型,同时还有应用在这些实体类型上的复杂建模算法。(这也使得我在开发CAD Exchanger的过程中会很痛苦,我不得不写出许多特定的类来对应这些不同的实体类型,来达到它们与OCC间的数据转换。现在我已经能够成功的导入所有SAT类型的文件并且输出为OCC数据文件,但是并不能支持所有SAT中实体类型)。顺便说一句,如果大伙中有谁对ACIS比较熟悉的,可以多发表发表评论,来比较一下ACISOCC的优缺点。

      OCC提供了很多不同的造型算法。B-Rep数据模型中仅仅包括了这些算法操作的一个结果,所以它是更紧凑的。

    另外OCC中还提供了两个不同层次的构造算法,几何层次(处理Geom_SurfaceGeom_Curve实体);拓扑层次(TopoDS_Shape和它的继承类)。拓扑层次通常会使用到几何层次的算法,但是OCC中并不会在拓扑和几何层次都提供相应的API接口。有些算法是针对几何层次的,而有些就只有在拓扑层次使用。(如果你对这些区别不是很了解,可以温习一下以前的一些文章)。

    现在让我们看看,在OCC中我们可以使用哪些建模技术。我敢打赌对一些基本曲面的构建方法肯定不需要我去详细描述。通过OCC提供的PDF文档和头文件,你就会很好的掌握这些构建方法。而我这里所谈到的是OCC中的一些高级曲面的构建方法。

 

直纹曲面(Ruled Surfaces

    直纹曲面是通过连接两条线构造出来的(沿着两条线上的点)。平面是一种特殊的直纹曲面(它是通过两条平行线创建出来的)。如果你用两条平行的圆来创建直纹曲面,可以构造出圆柱面或者圆锥面。

 

下图是一个最普通的示例:

 

 

 

 

    你可以用如下的方式在几何层次创建直纹曲面:

    如果想在拓扑层次,通过两条边创建面,或者通过两个Wire创建Shell,你需要使用到BRepFill这个类:

 

下图是一个用直纹曲面方式创建出来的Shell,这个Shell由两个Face组成:

 

 

 

 

    当使用BRepFill::Shell()创建Shell时,Wires必须包含相同数目的edge。如果wire上的边数不等,你就需要对边进行拟合。例如你可以使用ShapeAlgo_Container::HomoWires()或者创建一些例似的算法,或者你可以使用BRepAdaptor_ComCurveApprox_Curve3d重新拟合wire。后面一个类可以从一个wire拟合出单个的BSpline线,然后你就可以使用GeomFill创建曲面或者先创建出TopoDS_Edge再通过BRepFill在拓扑层次创建面。

 

 

增加的文章注释:

ShapeAlgo_AlgoContainer::HomoWires

传入两个Wire(这两个Wire所包含的Edge不等),输出两个Wire,这两个Wire所包含的Edge数目相等。

Approx_Curve3d and BRepAdaptor_CompCurve

   如何用这两个类来重新拟合一个wire创建出单个的BSpline线,给大家一个简单的流程,一看就能明白。

TopoDS_Wire->BRepAdaptor_CompCurve->BRepAdaptor_HCompCurve -> Adaptor3d_HCurve -> Approx_Curve3d -> Geom_BSplineCurve

 

BRepFill and GeomFill

这两个类的使用比较简单,就是几个static函数:

BRepFill::Face, BRepFill::Shell, GeomFill::Surface

 

 

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值