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. javascript中如何获取对象名

    javascript中如何获取对象名 一.总结 一句话总结:将对象传入参数,看参数是否为函数(js中的对象和函数是一个意思么(函数肯定是对象)),对象参数.name属性即可获得 //版本4 funct ...

  2. P3227 [HNOI2013]切糕

    题目描述 经过千辛万苦小 A 得到了一块切糕,切糕的形状是长方体,小 A 打算拦腰将切糕切成两半分给小 B.出于美观考虑,小 A 希望切面能尽量光滑且和谐.于是她找到你,希望你能帮她找出最好的切割方案 ...

  3. 基于JavaSwing的例子-非连接数据库

    项目结构: Constant.java package com.mstf.test; import java.io.Serializable; public class Constant implem ...

  4. C# HashSet<T> 简单使用

    一个简单的HashSet<T> 的例子,介绍其简单的方法,深入学习可参考微软:https://msdn.microsoft.com/en-us/library/bb359438(v=vs. ...

  5. PostgreSQL Replication之第三章 理解即时恢复(4)

    3.4 重放事务日志 一旦我们创建了一个我们自己的初始基础备份,我们可以收集数据库创建的XLOG.当时间到时,我们可以使用所有这些XLOG 文件并执行我们所期望的恢复进程.这就像本节描述的一样工作. ...

  6. python ftp

    #fpt_server.py#__*__ encoding=utf-8 __*__ import socket ,os class MyClass(object): def __init__(self ...

  7. GoldenGate 日常监控

    正确启动数据库 源端启动数据库 SQL>  startup 源端启动goldengate GGSCI >  start mgr GGSCI >  start * 目标端启动数据库 S ...

  8. ios发布以后关键信息确认与nslog

    发布以后信息查看的路径: xcode->window->devices and …->查看如图的log. 通常在发布以后,处于安全和性能的考虑,会禁止打印log:但是在关键的信息需要 ...

  9. PHPSTORM+Xdebug断点调试代码

    如果没有安装 PHPSTORM 可以参考 phpstorm10安装并汉化 一.下载 XDEBUG 下载地址:https://xdebug.org/download.php 二.如何快速寻找适合自己PH ...

  10. NodeJS学习笔记 进阶 (12)Nodejs进阶:crypto模块之理论篇

    个人总结:读完这篇文章需要30分钟,这篇文章讲解了使用Node处理加密算法的基础. 摘选自网络 Nodejs进阶:crypto模块之理论篇 一. 文章概述 互联网时代,网络上的数据量每天都在以惊人的速 ...