文档章节

OpenCascade Primitives BRep - Box

eryar
 eryar
发布于 2014/11/23 12:33
字数 2181
阅读 39
收藏 0

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. 

wps_clip_image-29668

Figure 1.1 Topological Entities in OpenCascade 

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

wps_clip_image-26079

Figure 1.2 Topological Shape Hierarchy of OpenCascade 

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

wps_clip_image-21272

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信息输出到屏幕: 

wps_clip_image-17115

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中输入如下命令: 

wps_clip_image-2683

Figure 2.2 Run a Tcl File in Draw Test Harness 

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

wps_clip_image-30549

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表示的翼边结构: 

wps_clip_image-3145

Figure 3.1 Edge Table of Winged-Edge Structure 

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

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

wps_clip_image-1751

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() 

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

wps_clip_image-18209

Figure 3.3 Get Ancestor Shapes in OpenCascade 

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

wps_clip_image-8661

Figure 3.4 The Box generated by Tcl Script 

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

wps_clip_image-31918

Figure 3.5 Vertex of the Box BRep 

wps_clip_image-12851

Figure 3.6 Edges of the Box BRep 

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

wps_clip_image-27297

wps_clip_image-29905

Figure 3.7 Wire #4 of Box BRep 

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

wps_clip_image-16517

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部分,如下图所示: 

wps_clip_image-20622

Figure 3.9 Parametric Surfaces of the Box 

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

wps_clip_image-28981

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: 

wps_clip_image-24170

Figure 3.11 Surface of Face 

wps_clip_image-9467

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

wps_clip_image-29612

从中可以看出,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

© 著作权归作者所有

eryar
粉丝 22
博文 127
码字总数 227012
作品 0
武汉
私信 提问
OpenCASCADE Make Primitives-Box

OpenCASCADE Make Primitives-Box eryar@163.com Abstract. By making a simple box to demonstrate the BRep data structure of the OpenCASCADE. The construction method is different fr......

eryar
2014/11/23
242
0
FreeCAD 0.16 发布,开源 CAD/CAE 工具

FreeCAD 0.16 发布了,FreeCAD是一个基于OpenCASCADE的开源CAD/CAE工具。 OpenCASCADE是一套开源的CAD/CAM/CAE几何模型核心,来自法国Matra Datavision公司,是著名的CAD软件EUCLID的开发平台...

oschina
2016/04/21
3K
2
Building OpenCascade on Windows with Visual Studio

Building OpenCascade on Windows with Visual Studio eryar@163.com 摘要Abstract:详细说明OpenCascade的编译配置过程,希望对你编译OpenCascacde有所帮助。本文内容来自OCCT的Overview文档...

eryar
2013/09/23
518
0
如何将openCASCADE和c++结合起来,哪位牛人能不能给我指点指点啊.

如何将openCASCADE和c++结合起来,哪位牛人能不能给我指点指点啊.我现在正想用openCASCADE和c++结合起来做一个像cad软件的东西。

chenchenxixi
2012/07/09
1K
2
FreeCAD 0.17Pre 发布,开源 CAD/CAE 工具

FreeCAD 0.17Pre 发布了。 FreeCAD是一个基于OpenCASCADE的开源CAD/CAE工具。 OpenCASCADE是一套开源的CAD/CAM/CAE几何模型核心,来自法国Matra Datavision公司,是著名的CAD软件EUCLID的开发...

达尔文
2016/10/10
2.3K
3

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
9
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
9
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
9
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部