OpenCascade Primitives BRep - Box

OpenCascade Primitives BRep - Box

eryar@163.com

Abstract. BRep is short for Boundary Representation. Boundary Representation gives a complete description of an object by associating topological and geometric information for solid modeling. In this case, objects are described by their boundaries. There are two types of information in BRep: Topological information and Geometric information. This paper is concerned with the Box BRep in OpenCascade, and also show how to use Tcl script to dump box BRep info.

Key words. OpenCascade, BRep, Boundary Representation, Box, Winged-Edge Structure

1. Introduction

边界表示法(BRep: Boundary Representation)通过拓朴(Topology)和几何(Geometry)给出了一个物体完整的描述,即用边界来表示物体。

在OpenCascade中的拓朴实体有以下几种:

l Vertex: a zero-dimensional shape corresponding to a point in geometry;

l Edge: a shape corresponding to a curve, and bound by a vertex at each extremity;

l Wire: a sequence of edges connected by their vertices;

l Face: part of a plane(in 2D geometry) or a surface(in 3D geometry) bounded by a closed wire;

l Shell: a collection of faces connected by some of the edges their wire boundaries;

l Solid: part of 3D space bound by a shell;

l Compound solid: a collection of solids.

Figure 1.1 Topological Entities in OpenCascade

OpenCascade中的拓朴实体如上图所示,其中Compound可以包含很多Solid;Solid由Shell包围而成;Shell由相连的Face组成;Wire由相连的Edge组成;Edge对应一条曲线,且曲线的端点处由Vertex组成;Vertex对应空间中一个点。OpenCascade的拓朴结构的类层次关系如下图所示:

Figure 1.2 Topological Shape Hierarchy of OpenCascade

OpenCascade的BRep表示中几何曲线曲面是参数化表示的,即曲线上的点与一个参数u有关,曲面上的点与两个参数u,v来有关。因为是参数化表示的,所以曲线曲面是有向的(naturally orientated)。方向(Orientation)是重要的,对面而言方向是面上每个点处的法向。

Figure 1.3 Orientation of Faces

使用参数表示的曲线曲面还需要注意曲线曲面的有界性Bounded,奇异性Singularity(曲面上的奇点Singular Point),曲面上的曲线(PCurve: Curve on Surface)等概念。

本文通过使用Tcl脚本将OpenCascade中的基本形状长方体Box的边界表示BRep数据导出到文件,继而方便分析Box在OpenCascade中的边界表示。

2. Dump Box BRep Info by Tcl

为了得到长方体的边界表示数据,先要用类BRepPrimAPI_MakeBox来生成一个TopoDS_Shape,再使用BRepTools::Dump()可以将这个TopoDS_Shape的信息以便于理解的方式输出。如果用C++来编程,只有这两句,但是为了编译链接成功,需要包含相关的头文件及引用相关的库,需要编译工具来编译链接,还是比较麻烦的。本文使用Tcl脚本来输出,体验一下在OpenCascade中使用Tcl脚本编程的便利。

在Draw Test Harness中输入以下三行Tcl命令,即可以将Box的BRep信息输出到屏幕:

Figure 2.1 Dump Box BRep info in Draw Test Harness

考虑到输出内容过多,在命令窗口查看不便,有些信息被覆盖,于是将这些信息导出到文件,Tcl代码如下所示:

 

#
#    Copyright (c) 2014 eryar All Rights Reserved.
#
#           File : box.tcl
#         Author : eryar@163.com
#           Date : 2014-03-17 19:00
#        Version : 1.0v
#
#    Description : Dump OpenCascade primitive box topology info to file.
#
#      Key Words : OpenCascade, BRep, Tcl, Box
#                  
#

# Load Modeling algorithms.
pload MODELING

# Make the box.
box theBox 1.0 2.0 3.0
set boxInfo [dump theBox]

# Save box BRep info to file.
if [catch {open d:/box.txt w+} theFile] {
    puts "Cannot open d:/box.txt for writing: $theFile"
} else {
    puts $theFile $boxInfo
    flush $theFile
    close $theFile
}

puts "Dump Info Finished!"

将上述内容保存到文件box.tcl,并在Draw Test Harness中输入如下命令:

Figure 2.2 Run a Tcl File in Draw Test Harness

执行成功后会在D盘中生成一个box.txt的文件,文件部分内容如下所示:

Figure 2.3 Box BRep Info Generated by Tcl Script

为了方便读者测试及本文中分析的Box数据的准确性,box.tcl和box.txt都可通过文章后面的链接下载。

3. Box BRep in OpenCascade

翼边结构(Winged-Edge Structure)及其边的表格方式(Edge Table)可以清晰地表达出形状的拓朴关系,表中内容有:

l 边的名称,即边的编号Edge Name;

l 边的起止顶点Start vertex and end vertex;

l 相连的两个面 Left face and right face;

l 遍历左面时访问边的顺序The predecessor and successor edges when traversing its left face;

l 遍历右面时访问边的顺序The predecessor and successor edges when traversing its right face;

如下图所示为Edge Table表示的翼边结构:

Figure 3.1 Edge Table of Winged-Edge Structure

从上图可知,给出一个边a后,从表中可以清晰看出与边a相连的顶点及面的信息。

如下图所示为一个Edge Table的示例:

Figure 3.2 Complete Edge Table for Pyramid

由上可知,给出翼边结构表示中的一个边,可以很方便得到与之相连的顶点和面的信息。

但是OpenCascade中没有使用翼边结构来表示形状,可以从图1.2所示的类结构得出。因为每个形状只包含子形状的数据,不包含其父形状的数据,所以在OpenCascade中不能反向访问其父形状(In OpenCascade, there is no back pointer from sub-shapes to ancestor shapes.),所以若想得到与给定顶点或边相连的面或环等信息,必须使用这个工具:

TopExp::MapShapesAndAncestors()

如下图所示使用上述工具得到与指定边相连的所有面的信息:

Figure 3.3 Get Ancestor Shapes in OpenCascade

根据前面使用Tcl脚本生成的Box,尺寸分别为1.0,2.0,3.0:

Figure 3.4 The Box generated by Tcl Script

为了正确显示出Box,每个面的法向必须与上图中的箭头方向一致。下面通过box.txt中的拓朴信息的编号,从vertex开始来组装成一个Solid的形状。对应顶点的编号及其在空间中的坐标如下图所示:

Figure 3.5 Vertex of the Box BRep

Figure 3.6 Edges of the Box BRep

上图中根据边中的顶点的方向,标示出边的方向:从标号为+正的顶点到标号为-负的顶点。

Figure 3.7 Wire #4 of Box BRep

由图可知,由于Wire #4是由边E30,E9,E20,E13组成,由于30和9号边前有负号,所以需要反向,方向反向的边用红色箭头标示。其它Wire的处理与此类似。通过上面左右两幅图的对比,可以清楚知道哪些Edge在组成Wire时反向了。

Figure 3.8 Faces and Shells of Box BRep

由上图可知,每个Face由一个Wire组成。注意到由Face组成Shell时,Face前面有方向性。如Face 5#前面有负号,意思是面的法向与Wire的方向相反,其他类似。

最后的Solid由Shell组成。这样Box的拓朴数据就形成了。其中Face, Edge, Vertex中包含了几何数据。Face的参数表示的几何数据位于surfaces部分,如下图所示:

Figure 3.9 Parametric Surfaces of the Box

Edge中包含了多种曲线数据,在Box的Edge中就包含两种曲线数据,一种是三维曲线;一种是曲面上的曲线。如下图所示:

Figure 3.10 Curve info of the Edge in Box 

其中Curve3D对应的就是参数化的三维曲线,这个很好理解。PCurve为曲面上的曲线。下面以Edge#9为例,来说明边中的几何数据。三维曲线#12是原点为(0,2,3)方向为X方向的直线,在参数区间[0,1]的端点处,直线对应的两个点为(0,2,3)和(1,2,3),分别对应#31Vertex和#21Vertex。所以Vertex前面的-负号表示Edge中曲线终点,+正号表示Edge中曲线的起点。

PCurve为#4号平面上的#23号参数曲线,由下图可知#4号曲面对应的Face为#7,对应的Wire为#8:

Figure 3.11 Surface of Face

根据#23号二维参数曲线计算得出曲面上的U,V分别为(3, 0)和(3, 1),将得到U,V代入#4曲面中得出对应的曲面上的点,计算过程如下所示:

从中可以看出,PCurve表示的曲线与三维曲线#12相同,不过其中还保存了曲面的信息。

4. Conclusion

本文通过使用Tcl在OpenCascade中生成Box的边界表示信息,通过对数据的分析,得出Box在OpenCascade中的边界表示方式。并通过与翼边结构的对比,说明OpenCascade中的拓朴结构不是翼边结构。通过分析边界表示中的几何数据,来理解边界表示中几何数据的应用。

若对文中内容有任何意见、建议都可以与我取得联系,邮箱:eryar@163.com,欢迎讨论、交流、指导。

5. References

1. OpenCascade, Test Harness User’s Guide 2013

2. OpenCascade, BRep Format Description White Paper, 2013

3. John K. Ousterhout, Tcl and Tk Toolkit, 1993

PDF Version and Tcl Script: OpenCascade Primitives BRep-Box

时间: 2024-09-19 09:11:48

OpenCascade Primitives BRep - Box的相关文章

OpenCascade Primitives BRep - Sphere

OpenCascade Primitives BRep - Sphere eryar@163.com Abstract. BRep is short for Boundary Representation. Boundary Representation gives a complete description of an object by associating topological and geometric information for solid modeling. In this

OpenCascade Primitives BRep-Torus

OpenCascade Primitives BRep-Torus eryar@163.com Abstract. BRep is short for Boundary Representation. Boundary Representation gives a complete description of an object by associating topological and geometric information for solid modeling. In this ca

OpenCascade Primitives BRep-Cylinder

OpenCascade Primitives BRep-Cylinder eryar@163.com Abstract. BRep is short for Boundary Representation. Boundary Representation gives a complete description of an object by associating topological and geometric information for solid modeling. In this

OpenCASCADE Outline

OpenCASCADE Outline eryar@163.com      有网友反映blog中关于OpenCASCADE的文章比较杂乱,不太好找,最好能提供一个大纲,这样方便查找.于是决定将这些学习时写的文章整理下,方便对OpenCASCADE的学习理解.其实在http://www.cnblogs.com/opencascade中,已经将文章按目录重新发表了一遍.可以按OpenCASCADE的模块的顺序来学习,也可以挑选自己感兴趣的部分来学习.      由于本人水平所限,文中的错误不妥之处

OpenCASCADE Make Primitives-Sphere

OpenCASCADE Make Primitives-Sphere eryar@163.com Abstract. The sphere is the simplest topology shape of the BRep structure. But there are several import concept of the sphere edges, such as degenerated edge and seam edge. So construct a sphere by cod

OpenCASCADE BRep vs. OpenNURBS BRep

OpenCASCADE BRep vs. OpenNURBS BRep eryar@163.com Abstract. BRep short for Boundary Representation. First give the definition of the BRep, then compare the BRep mode between OpenCASCADE and OpenNURBS. There are 3 main representation method: use face/

Topology Shapes of OpenCascade BRep

Topology Shapes of OpenCascade BRep eryar@163.com 摘要Abstract:通过对OpenCascade中的BRep数据的读写,理解边界表示法的概念及实现.理解了拓朴形状的数据结构,就对ModelingData模块有了清晰认识,方便OpenCascade其他模块如ModelingAlgorithms和Visiualization模块的理解. 关键字Key Words:OpenCascade, BRep, Topology, BRep Format 一

Representation Data in OpenCascade BRep

Representation Data in OpenCascade BRep eryar@163.com 摘要Abstract:现在的显示器大多数是光栅显示器,即可以看做一个像素的矩阵.在光栅显示器上显示的任何图形,实际上都是一些具有一种或多种颜色的集合.数学上精确表示的图形在显示器中只能用逼近的方式显示出来.本文主要对OpenCascade的BRep文件中用来显示曲线和曲面的离散数据结构进行说明. 关键字:OpenCascade, BRep, Polygon, Triangulation,

Geometry Surface of OpenCascade BRep

Geometry Surface of OpenCascade BRep eryar@163.com 摘要Abstract:几何曲面是参数表示的曲面 ,在边界表示中其数据存在于BRep_TFace中,BRep_TFace中不仅包括了几何曲线,还包含用于显示的离散几何信息,如三角剖分数据.本文主要对OpenCascade的BRep表示中几何曲面进行说明,将在后面分析Topology部分的读写程序时来说明包含几何数据的三种拓朴结构中分别包括哪些几何信息. 关键字Key Words:OpenCasca