文件名称:
Open_CASCADE学习笔记-拓扑和几何.pdf
开发工具:
文件大小: 3mb
下载次数: 0
上传时间: 2019-09-02
详细说明:大神Roman Lygin写的,介绍Opencascade拓扑结构实现与几何描述的文章,相当经典,论述深入,是难得的好文章。与几何数据( Geometry)的关系
现在考虑该抽象拓扑类是如何与几何信息关联起来的。
这是通过继承 TopoDS包中的抽象拓扑类实现的,在BRep包中通过这些类实现
了对具有边界的模型描述。只有三种类型的拓扑体具有几何特征,顶点( vertex)、
边(edge)、面(face),如图3所示。
TopoDS SHape
匚 TopoDS TVertex TepoDS TEdge匚 TopoDS FAce□ TopoDS TWre
BRep TVertex BRep EDge[ BRep TAce
Tolerance Tolerance Tolerance
7/370nl
L5]
SD point
List of representations
opencascade blogspot. com
图3抽象拓扑类与几何信息的关系
docIn. com
下面将会更为详细的描述它们。
待续
第2节顶点
接上#…
顶点( Vertex)的基本概念
顶点具有基本的几何表示,其几何表示是在三维空间中用类gp_Pnt描述的一个
点。它也有其他的表示方式,但是这些表示方式在实际中几乎不会用到。
顶点的另一个重要的属性是误差( tolerance),用来描述其位置的精确度。顶点误
差的几何意义是在顶点精确位置处具有半径为T的圆球。这些误差圆球必须通
过所有在该点相连接的曲线端部
vertex tolerance must encopmass edge
curves ends
图4误差圆球必须通过所有在该点相连接的曲线端部
误差( Tolerances)
下面将更为详细的介绍误差。
不像其他的几何库,一般都具有全局的精度误差(例如,模型包围盒大小的
l/1000, Open CAsCade将误差作为一种局部属性( ocal properties)。正如在
第一节的图3中介绍的,误差是顶点( vertex)、边(edge)、面(face的成员变量。
一般来说,这种方法能够以更高的精度描述模型。如图5所示:
crocin. com
图5具有误差的连接边
各个拓扑类具有各自独立的误差使得它们从模型中分离出来后,仍然可以设置局
部精度。假如你要从底层构造形体( shape),最好的方法是设置最小的允许误差。
误差缺省值是 Precision: Confusion,1e-07。
般来说,一些建模算法对误差非常的敏感,特别是当这些算法不得不使用用户
设置的某个值时,就变得更加敏感。例如,从另外的三维几何内核(包括IGES、
STEP格式,或者其他内核或者CAD系统的特有格式)中导入模型,这涉及到在
文件头( file header)设置的全局精度。导入程序尽力为了保持健壮而忽略了那个
值,而不管这个全局误差是多大(例如,全局误差可以非常大,以至于某些小的
面被它们的边界穿越了,这甚至违背了标准)。
另外一个例子是缝合( Sewing)(将不相连的面粘合到一个壳体(shel)里)。在不同
的模型中,面与面之间的缝隙差别非常大。设置太小的误差会导致结果中出现许
多不相连的面,设置的误差太大又会导致间距很大的面连接到一起(即使用户故
意设置为不相连的面也连接到了一起,例如小的孔)。
下面讨论顶点的朝向属性。它没有直接的几何意义,但是连接的顶点具有朝向
Top Abs_ FORWARD时,必须与曲线( curve)端部的较小参数值对应( the smaller
parameter,说明:三维曲线可以使用参数来描述其上的点,一般起始点参数为
First value或者 Start value,终止点参数为 Last value或者 End value,起始点
的参数值要小于终止点的参数值,这样较小的参数值应是起始点的参数值)。相
对应的,具有 Top Abs_ReⅤ ERSED属性的顶点具有较大的参数值。例如,假如
有一条边(Edge),在一个圆弧曲线之上,该圆弧半径为1,位于平面Z=0上,其
起始点 point(1,0,0),绕着Z轴逆时针旋转90度,那么具有向前属性的点在(1,
0,0)处,具有反向属性的点在(0,1,0)处。如图6所示。
Test 3d
□回网
t的4REER5
orientation
edge 's curve goes
anti-clockwise
vertex w的
TOpAbs_ FORWARD
orientatin
图6设置顶点的朝向属性值的一个示例
从底层构建顶点
BRep_ Builder实际上是一个进行底层操作的工具。
gp_Pnt aPoint (100, 200.,300.)
BRep builder builder;
TopoDs Vertex a vertex;
a Builder. Make Vertex(a vertex, a Point, Precision: Confusion o);
a Vertex Orientation (Top Abs_ REVERSED);
有一个非常方便的生成顶点的类 BRepBuilder APi Make Vertex,该类最终在内
部使用BRep_ Builder生成顶点。所以如果不得不从底层开始构造拓扑结构,你
就必须对BRep_ Builder非常熟悉。
获得顶点的信息的方法
BRep_Tol提供了访间拓扑体的几何信息的方法,其内的很多方法都是静态
( static类型的。
Standard_ Real tOlerance= BRep- Tool: Tolerance(a vertex
gp_ Pnt aPoint= BRep Tool: Pnta Vertex)
待续
第3节边
接上
好了,让我们继续一点一点的啃这个大象。下面讲边dge),希望你不要觉得它太难。
边(Edge)
边是一种拓扑体,它对应于一维对象obje.曲线( curve)。它可以用来指定
面(race)的边界(例如个盒子有12条边)或者仅仅是悬空的( latin g)边,即不
属于任何面的边(想象一下在构建锥形体或者扫略体之前的初始轮廓线)。属于面
(Face)的边可以在两个或者更多的面之间共享(例如,印章模型中它们是面之间
的连接线)或者可以只属于一个面(在印章模型种这属于边界边)。我想你一定看
到了这些类型的边—在缺省的视图的线框模式下,它们分别显示为红色(悬空
边)、黄色(面之间的连接边)、绿色(边界边)。如图7所示。
6
Tested
□回冈
lootunecoe
aoy lace
△e
hred eog
faces)
图7印章模型的线框模式
边有几种几何表示方式(参考第一节中的图3, BRep ledge之下有一个节点List
Of Edge Representions):
(1)三维空间的曲线C(t),用类Geom_ Curve实现。这是一种基础表示方式。
(2)曲线P(t)为二维空间的参数曲线,用于描述位于曲面上的曲线。它们经常
被称为 curves,在类Geom2d_ Curve来实现。
(3)多边形表示( Polygon al representation),使用一组三维点来描述,在类
Poly- polygon3D实现。
(4)多边形表示( Polygonal representation),也可以使用一组三维点的编号来
描述,在类 Poly_ Plygon On Trian gulation实现。
后两种表示方式在前面两种的帮助下用面片描述模型。
这些表示方式可以使用 BRep_ tool来获取必要的信息,例如
Standard Real aFirst alast aFIrst. aplast
Handle(geom_Curve)a Curve3d= BRep_Tool: Curve(anEdge, a First, aLast)
Handle(Geom 2d_ Curve)aPCurve= BRep Tool: CurveOn Surface(an Edge,
a Face, aPFirst, a PLast)
每一个边必须有其所在的曲面上的所有参数曲线( curves),只有在平面上可以
没有参数曲线,因为在平面上参数曲线可以在悬空状态下计算。
边的所有曲线表示方式必须相互之间保持一致,例如,Ct)和P(t)表示的曲线在
朝向必须一致。这样边上的点可以使用任意表示方式计算得到,可以使用C(t)
在[ first,last取值得到;也可以u在[ first l,last1]取值得到曲面Sl(Plx(u)
Ply(u)上的点Pi,这里Pi是曲面Si上的参数曲线 curve的一点。
边的标志位( Edge flags)
边具有两种比较特殊的标志
(1)" same ran ge"(BRep_Tool: Samerangeo),相同的取值区间,当frst=
first_ i and last=last_i时,该标志位为true,例如,所有的几何表示都在相同
的表示区间内
(2)" same parameter"(BRep_Too: SameParameterO),相同的参数,当C(t)=
Sl(Plx(t),Ply(t)时,即对于同样的参数t,C(t)和曲面S1上的点P11)能够得到
相同的点,此时该位为true,也就是说,任何边上的点都对应参数曲线上相同的
参数值的点。
许多算法假定设置了这两个标志位,因此建议你注意这种情况,一定要设置这些
标志位。
误差( Tolerance)
边的误差是其三维曲线和其他任何表示方式之间的最大偏差。这样,它的几何意
义就是一根沿着三维曲线的具有半径的管子,这个管子将从其他表示方式中获取
的曲线包围。
Tested
□区
coiN. C
图8具有孔隙(vod)的体
特殊类型的边
有两种特殊类型的边。分别是:
缝合边( seam edge)。一种被同一个面使用两次的边(例如,在同一个面上具有2
个参数曲线)。
退化边 (degenerated edge)。这种边位于曲面的奇异点位置处,在三维空间中
为一个点。
球面中这两种类型的边都有。缝合边位于经线( U iso-lines),参数为0和2*PI
退化边位于南北极,对应于纬线(Viso- -lines),参数为-PI2和PI/2。
1:AXON-Z00m86559313
回区
2:2D-Z00m59205639
degenerated edge 1
degenerated edge 1 pcurve
seam-edge purves(two丿
sean-eage degenerated edge 2 curve
degenerated edge
图9具有孔隙(vod)的体
其他例子环形体 torus)、圆柱体( cylinder)、锥体(cone)。环形体有两条缝
合边,对应于它的参数空间的边界:圆柱体有一条缝合边。退化宾出现在锥体的
顶点。
要检测边是缝合边或者退化边,使用函数 BRep tool: Is Closed和
BRep Tool: Degenerated
边的朝向( Edge orientation)
边的方向向前,意味着边(edge)的逻辑方向与曲线( curve)的方向相同。反向意味
着逻辑方向与曲线方向相反。因此,缝合边在一个面中总是有2个朝向
相反,另一个向前
待续
第4节面
接上方
虽然在边之后的拓扑类型是环,但是下面将先讲面,它是包含几何信息( geometry)
的最后一种拓扑体。我们将在之后的章节中把环和其他拓扑类型放到一起讨论
坦白说,我本来没有打算讲环和其他拓扑类型,但是有好几个人在博客中要求讲
它们
面
面是一种拓扑体,用于描述三维实体的边界部分。面是由底层的曲面以及一个或
者多个环来描述的。例如,圆柱体包含3个面—底面、顶面和侧面。每一个面
的底层曲面都是无限大的 Geom plane和Geom_ CylindricaISurface),同时每
个面由一个环限定其在曲面上的范围,其中两个环是位于Geom_ Circle上
条边,侧面包含4条边,其中两条边与顶面与底面共享,剩下的两条边是缝合边
(参见之前对于边的讨论),例如面在环中包含缝合边两次(两条缝合边具有不同
的朝向)。
曲面( Surface)
让我们简要回想一下什么是曲面。假如你在高中的时候上过数学分析
( mathematical analysis),你可能记得很清楚,假如你忘了,就自学一下。在维
基百科( wikipedia)上关于曲面的第一部分给出了参数曲线的简单例子。
曲面将二维参数空间{U,V映射到三维空间的物体上(虽然还是二维)。与压模(
块平面铁皮可以被压成弯曲的相比,参数空间可以是有界的也可以是无界的,
或者仅仅在某个方向上有界。例如,平面参数空间是无界的,但是 NURBS曲面
是有界的,圆柱曲面在U方向是有界的(从0到2P1,在V方向上是无界的
(-infinity, +infinity)
Geom_ Surface: valued返回参数空间中(U,V的三维点(X,Y,Z)。例如,地球上
的任意一点都可以由纬度(V)和经度(U)表示,但是在世界坐标系中可以看作三维
点(假如地球的中心定义为原点)。
让我们回想一下,边必须具有三维曲线(a3 D curve)和曲面空间中的参数曲线(a
curve) Open CASCADe要求面的边界(环)在三维和二维空间中必须是闭合的
因此,圆柱的侧面是采用前面我们讨论的那样描述的。
并非所有的建模核心模块要求这样。我记得从 Unigraphics(通过STEP格式)导
出的圆柱,它的侧面是由两个环(wire)描述的,每一个环包含一个圆形边( circular
edge)。我与来自数据交换( Data Exchange)组的同事讨论过好儿次这个问题,怎
么样才能识别出这种情况,怎么样才能将它们转换到 Open CASCaDe中并具有
合法的环。作为讨论的结果,在 Shape healing的 Shapefix_Face中添加了
FixMissingSeam(。
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.