您好,欢迎光临本网站![请登录][注册会员]  
文件名称: Open_CASCADE学习笔记-拓扑和几何.pdf
  所属分类: C++
  开发工具:
  文件大小: 3mb
  下载次数: 0
  上传时间: 2019-09-02
  提 供 者: godw****
 详细说明:大神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最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 输入关键字,在本站1000多万海量源码库中尽情搜索: