BRep Shapes Based on Tessellated Geometry

eryar@163.com

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的更多相关文章

  1. Mesh BRep Shapes

    Mesh BRep Shapes eryar@163.com Abstract. 当对OpenCASCADE的BRep表示法的数据结构有了一定的理解后,建议可以自己实现一个显示数据生成的功能,即网格剖 ...

  2. Topology Shapes of OpenCascade BRep

    Topology Shapes of OpenCascade BRep eryar@163.com 摘要Abstract:通过对OpenCascade中的BRep数据的读写,理解边界表示法的概念及实现 ...

  3. 基于ACIS/HOOPS的3D应用开发简介 【转】

    (整理) 平台:                造型引擎——ACIS         显示引擎——Direct3D/OpenGL/GDI         应用框架——HOOPS   组件关系图     ...

  4. 行人检测(Pedestrian Detection)资源整合

    一.纸 评论文章分类: [1] D. Geronimo, and A. M.Lopez. Vision-based Pedestrian Protection Systems for Intellig ...

  5. paper 15 :整理的CV代码合集

    这篇blog,原来是西弗吉利亚大学的Li xin整理的,CV代码相当的全,不知道要经过多长时间的积累才会有这么丰富的资源,在此谢谢LI Xin .我现在分享给大家,希望可以共同进步!还有,我需要说一下 ...

  6. MYSQL 5.7 新增150多个新功能

    http://www.thecompletelistoffeatures.com/ There are over 150 new features in MySQL 5.7. The MySQL ma ...

  7. Using SetWindowRgn

    Using SetWindowRgn Home Back To Tips Page Introduction There are lots of interesting reasons for cre ...

  8. Actor::updateMassFromShapes

    unity报错Actor::updateMassFromShapes: Compute mesh inertia tensor failed for one of the actor's mesh s ...

  9. Gazebo機器人仿真學習探索筆記(四)模型編輯

    模型編輯主要是自定義編輯物體模型構建環境,也可以將多種模型組合爲新模型等,支持外部模型導入, 需要注意的導入模型格式有相應要求,否在無法導入成功, COLLADA (dae), STereoLitho ...

随机推荐

  1. sicily 1031 Campus(图算法)

    Description At present, Zhongshan University has 4 campuses with a total area of 6.17 square kilomet ...

  2. idea报错。Error:Failed to load project configuration: cannot parse xml file E:\project\.idea\workspace.xml: Error on line 1: 前言中不允许有内容。

    因为电脑卡死强制重启电脑后打开idea,进行junit单元测试报错: idea报错.Error:Failed to load project configuration: cannot parse x ...

  3. OpenGL编程逐步深入(七)旋转变换

    准备知识 这一节我们来看一下旋转变换.旋转变换指的是给我们一个指点的点和角度,我们需要绕着过该点的轴线將对象旋转对应的角度.这里我们只改变X/Y/Z中的两个分量,第三个分量保持不变.这意味着我们的图形 ...

  4. SSD-tensorflow-2 制作自己的数据集

    VOC2007数据集格式: VOC2007详细介绍在这里,提供给大家有兴趣作了解.而制作自己的数据集只需用到前三个文件夹,所以请事先建好这三个文件夹放入同一文件夹内,同时ImageSets文件夹内包含 ...

  5. 洛谷 P4148 简单题 KD-Tree 模板题

    Code: //洛谷 P4148 简单题 KD-Tree 模板题 #include <cstdio> #include <algorithm> #include <cst ...

  6. HTML图片映射

    <img>图片映射 <map>与<area>一起使用来定义一个图像映射(一个可点击的链接区域). <img src="cat.jpg" a ...

  7. 参考《深度学习之PyTorch实战计算机视觉》PDF

    计算机视觉.自然语言处理和语音识别是目前深度学习领域很热门的三大应用方向. 计算机视觉学习,推荐阅读<深度学习之PyTorch实战计算机视觉>.学到人工智能的基础概念及Python 编程技 ...

  8. 从终端运行python程序

    终端窗口运行.py程序 首先你要安装python,命令行输入 python 有python提示符 >>> 出现说明安装成功 程序第一行应该是 #! python3 #! python ...

  9. caioj 1081 动态规划入门(非常规DP5:观光游览)

    这道题和前面的分组的题有点像 就是枚举最后一组的长度. 然后组数可以在第一层循环也可以在第二层循环 我自己的话就统一一下在第一层循环吧 然后这道题题意我一直没理解清楚,浪费了很多时间,写复杂了 同时初 ...

  10. FPGA主要应用

    FPGA主要应用: 1.逻辑控制(逻辑接口领域) 传统方向,主要用于通信设备的高速接口电路设计,用FPGA处理高速接口的协议,并完成高速的数据收发和交换.FPGA最初以及到目前最广的应用就是在通信领域 ...