BRep Shapes Based on Tessellated Geometry
BRep Shapes Based on Tessellated Geometry
Key Words. BRep Shape, Tessellated Geometry, Mesh, STL
1. Introduction
OCCT的TopoDS允许定义只包含显示数据的BRep体,如只包含边的显示数据:多段线;面的显示数据:网格,而不包含几何曲线和曲面。只包含显示数据的BRep体有时候很有用,如只需要显示一下而不对其做任何修改。但是OCC7.3.0版本之前是不支持这些显示数据的。这里说的不支持的意思是不支持显示数据的功能,如不能显示只包含显示数据的BRep体等等。
OCC7.3.0版本之后陆续想添加对只包含显示数据的BRep的支持,包括如下功能:
l 计算包围盒;
l 计算网格面积;
l 计算两个BRep之间的距离;
l 计算HLR(隐藏线消除);
相关的内容在其官网上,网址: https://tracker.dev.opencascade.org/view.php?id=28125
2. Display Mesh
OCC中支持的网格文件只有STL文件,在Draw Test Harness中提供了读取STL文件的命令readstl,命令参数如下图所示:

Figure 1. Draw readstl command
第一个参数shape是读取STL生成的BRep名称;
第二个参数file是STL文件名;
第三个参数triangulation是可选参数,如果输入triangulation,则采用新的方式即直接生成网格;否则采用原来的方式,即将网格的每个三角形生成一个TopoDS_Face;
下面将这些命令写在一个Tcl脚本文件中,把OCC数据data文件夹中的STL文件进行显示,
pload ALL readstl s [pwd]/data/stl/bearing.stl triangulation vdisplay s
下面对上述脚本进行解释。
第一行pload ALL是加载OCC所有的脚本命令;
第二行使用readstl命令,且设置成triangulation读取模式;
第三行是在三维视图窗口中显示读取的STL模型;
直接在Draw Test Harness中输入上述命令也可以,反正只有几行。或者把这几行命令保存成一个文件,再使用source命令来加载也可以。下面是在3D Viewer中显示读取的STL模型:

Figure 2. Shaded STL model in 3D Viewer
使用快捷键S/W来切换显示模式,S表示Shaded,是着色渲染模式;W表示Wireframe,是线框显示模式。下图为切换到线框显示模式的效果:

Figure 3. Wireframe STL model in 3D Viewer
从上图可知,采用直接显示网格的方式显示的STL模型在线框模式的时候,效果不是很理想。一般的三维软件对于这种网格的线框模式就是直接显示每个三角形。如下图所示:

Figure 4. Wireframe of the STL model
所以,如果有需要在OCC中显示STL模型的线框,则需要自己再作处理,可以选择一些边加到BRep体中,不一定像上图所示那样显示每一个网格三角形。
3. Source Code
根据原来介绍的通过Draw的命令查找其源实现的方法,找到readstl命令的源码在文件XSDRAWSTLVRML.cxx中,源码如下所示:
//=============================================================================
//function : readstl
//purpose : Reads stl file
//=============================================================================
static Standard_Integer readstl(Draw_Interpretor& theDI,
Standard_Integer theArgc,
const char** theArgv)
{
if (theArgc < )
{
theDI << "wrong number of parameters" << "\n";
return ;
}
else
{
if (theArgc == &&
strcmp("triangulation", theArgv[]) == )
{
// Read STL file to the triangulation.
Handle(Draw_ProgressIndicator) aProgress = new Draw_ProgressIndicator (theDI, );
Handle(Poly_Triangulation) aTriangulation = RWStl::ReadFile (theArgv[], aProgress); TopoDS_Face aFace;
BRep_Builder aB;
aB.MakeFace(aFace);
aB.UpdateFace(aFace, aTriangulation);
DBRep::Set(theArgv[], aFace);
}
else
{
TopoDS_Shape aShape;
Standard_DISABLE_DEPRECATION_WARNINGS
StlAPI::Read(aShape, theArgv[]);
Standard_ENABLE_DEPRECATION_WARNINGS
DBRep::Set(theArgv[], aShape);
}
} return ;
}
当使用选项triangulation时,采用新的读取STL函数得到网格数据,再用BRep体的底层函数生成一个TopoDS_Face,直接将网格数据aTriangulation设置在Face中。
当不使用选项triangulation时,还是采用老的方式来读取STL模型。老的方式读取速度慢,且将网格中每个三角形生成一个TopoDS_Face,占用大量内存,是效率不高的方式,所以标记为作废状态。开发者应尽量采用新的方式。
4. Conclusion
从OCC7.3版本开始支持只包含显示数据的BRep体,这样只包含显示数据的BRep体可以直接显示,与原来的将网格数据中的每个三角形都生成TopoDS_Face的方式相比,将会大大提高显示效率。
因为网格数据中没有包含线框的信息,所以直接显示的网格模型切换到线框模式的效果不好,有时甚至不显示线框。

Figure 5 Propeller STL model
上图所示的STL螺旋桨模型切换到线线框模式后,就没有了。这时OCC的选择功能也不能使用,即选不中这个模型了。
如果要显示网格模型的线框,需要自己根据实际情况添加一些Edge以达到理想效果。
5. References
1. https://tracker.dev.opencascade.org/view.php?id=28125
BRep Shapes Based on Tessellated Geometry的更多相关文章
- Mesh BRep Shapes
Mesh BRep Shapes eryar@163.com Abstract. 当对OpenCASCADE的BRep表示法的数据结构有了一定的理解后,建议可以自己实现一个显示数据生成的功能,即网格剖 ...
- Topology Shapes of OpenCascade BRep
Topology Shapes of OpenCascade BRep eryar@163.com 摘要Abstract:通过对OpenCascade中的BRep数据的读写,理解边界表示法的概念及实现 ...
- 基于ACIS/HOOPS的3D应用开发简介 【转】
(整理) 平台: 造型引擎——ACIS 显示引擎——Direct3D/OpenGL/GDI 应用框架——HOOPS 组件关系图 ...
- 行人检测(Pedestrian Detection)资源整合
一.纸 评论文章分类: [1] D. Geronimo, and A. M.Lopez. Vision-based Pedestrian Protection Systems for Intellig ...
- paper 15 :整理的CV代码合集
这篇blog,原来是西弗吉利亚大学的Li xin整理的,CV代码相当的全,不知道要经过多长时间的积累才会有这么丰富的资源,在此谢谢LI Xin .我现在分享给大家,希望可以共同进步!还有,我需要说一下 ...
- MYSQL 5.7 新增150多个新功能
http://www.thecompletelistoffeatures.com/ There are over 150 new features in MySQL 5.7. The MySQL ma ...
- Using SetWindowRgn
Using SetWindowRgn Home Back To Tips Page Introduction There are lots of interesting reasons for cre ...
- Actor::updateMassFromShapes
unity报错Actor::updateMassFromShapes: Compute mesh inertia tensor failed for one of the actor's mesh s ...
- Gazebo機器人仿真學習探索筆記(四)模型編輯
模型編輯主要是自定義編輯物體模型構建環境,也可以將多種模型組合爲新模型等,支持外部模型導入, 需要注意的導入模型格式有相應要求,否在無法導入成功, COLLADA (dae), STereoLitho ...
随机推荐
- thinkphp 中模型究竟是什么用?
thinkphp 中模型究竟是什么用? 问题 似乎所有的操作都能在控制器中就能完成,模型除了几种验证之外,究竟是干什么用的,这个问题一直没理解透 解答 解答一 要明白这个问题,必须了解 MVC 历史. ...
- BZOJ 3130 二分+网络流
思路: 不被题目忽悠就是思路 二分一下max 判一下等不等于最大流 搞定 7 9 1 1 2 3 1 3 3 2 3 3 3 4 2 3 5 2 3 6 1 4 7 2 5 7 2 6 7 2 这里有 ...
- Kali linux 2016.2(Rolling)里Metasploit的数据库
为什么要在Metasploit里提及到数据库? 大家都知道,这么多信息,我怎样才能把它们整理好并保存起来?怎么展现给老大看,最后怎么体现在要提交的渗透测试报告中呢? 你的担忧真的很有必要,因为啊, ...
- MyBatis、JDBC、Hibernate区别
从层次上看,JDBC是较底层的持久层操作方式,而Hibernate和MyBatis都是在JDBC的基础上进行了封装使其更加方便程序员对持久层的操作. 从功能上看, JDBC就是简单的建立数据库连接,然 ...
- css hover图片hover效果兼容ie8
例子: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...
- IDL build
For Developers > Design Documents > IDL build 目录 1 Steps 2 GYP 3 Performance 3.1 Details ...
- cmd 操作命令
1)cd 操作文件目录的 cd path #进入path cd / #返回到当前盘符的根目录 cd .. #返回到上级目录 2)dir 显示当前目录 dir #显示当前目录下的文件夹 dir path ...
- 紫书 习题 10-8 UVa 10622(gcd)
把这个数质因数分解然后求因子个数的gcd就ok了. 一些细节 (1)这道题的质因数不需要存下来,每一次做完取一次gcd就ok了 (2)判断奇偶用ans & 1的时候要加括号, 位运算要注意括号 ...
- main()函数的形参
main函数中的第一个参数argc代表的是向main函数传递的参数个数,第二个参数argv数组代表执行的程序名称和执行程序时输入的参数 #include <stdio.h> int mai ...
- Service绑定模式
Service绑定模式 使用绑定的Service能够实现组件与Service的通信. 组件与被绑定的Service能够不归属于同一个应用程序.因此通过绑定Service能够实现进程间通信. ...