OpenCascade Sweep Algorithm

eryar@163.com

Abstract. Sweeps are the objects you obtain by sweeping a profile along a path. Sweep is a very useful modeling algorithm. The paper focus on the introduction of the sweep algorithms in the opencascade.

Key Words. Sweep, Prism, Revol, Pipe, Frenet Trihedron,

1. Introduction

随着计算机技术的发展和普及,计算机辅助设计与制造(CAD/CAM)技术也得到了迅猛发展,它们推动许多领域的设计革命,计算机辅助设计与制造技术的发展和应用水平已经成为衡量一个国家现代化水平的重要标志之一。

最近中兴事件在国内引起了大家的广泛讨论,由于目前国内还制造不出能替代的芯片,所以可以从中找到与发达国家之间的差距,其实在CAD领域又何尝不是这样呢?不过在通用CAD方面,国内有一些软件厂家,有替代产品。而在行业CAD方面,一直是国外软件的天下。

原来国内有些声音是“造不如买,买不如租”,引进了许多国外软件。这些国外软件是很优秀,极大地提高了生产力。如果一直买,不思进取,结果应该会像中兴一样。如果自己造,刚开始是需要投入很大的成本,但是后面优势是不言而喻的。

国际上的三维内核目前功能相对齐全,开源的只有OpenCASCADE。国内的相关内核只从《计算机图形学》的书上见过,没有看过实物。还有一些软件厂商收购的国外内核。开源的OpenCASCADE用来学习造型相关算法还是很不错的。通过学习源码,不仅可以知其然,还可以做到知其所以然。

本文主要对OpenCASCADE中的Sweep扫掠算法的用法进行介绍,先会正确使用。正确使用是研究其实现原理的基础。

扫掠算法是图形学中很常见的造型算法,就是将指定的轮廓Profile沿着一条路径Path扫掠来得到模型。点扫掠得到边;边扫掠得到面;面扫掠得到体。

Figure 1. Generating a sweep

类BRepPrimAPI_MakeSweep是扫掠算法的基类,如下图所示:

从其派生的几个类分别用于:

l BRepPrimAPI_MakePrism:生成线性扫掠;

l BRepPrimAPI_MakeRevol:生成旋转扫掠;

l BRepOffsetAPI_MakePipeShell: 生成通用的扫掠;

下面对这几种情况分别进行说明。

2.Prism

通过类BRepPrimAPI_MakePrism可以创建线性扫掠,也就是拉伸体。在Draw Test Harness中可以使用命令prism来创建拉伸体。

polyline p                

prism r p   

vdisplay p r

在Draw Test Harness中运行上述命令,可以得到一个线性拉伸体,如下图所示:

其中红色为轮廓Profile,经过线性扫掠得到右边所示的拉伸体。

3.Revol

通过类BRepPrimAPI_MakeRevol可以创建旋转扫掠,也就是旋转体。在Draw Test Harness中可以使用命令revol来创建旋转体。

polyline p                

revol r p       

vdisplay p r

在Draw Test Harness中运行上述命令,可以得到一个旋转体,如下图所示:

其中红色为轮廓Profile,经过旋转扫掠得到右边所示的旋转体。

4.Pipe Shell

通用的扫掠算法使用类BRepOffAPI_MakePipeShell,在Draw Test Harness中使用如下命令:

l mksweep

l addsweep

l deletesweep

l sestsweep

l buildsweep

其中setsweep命令有如下选项:

setsweep options [arg1 [arg2 [...]]] : options are :

   -FR : Tangent and Normal are given by Frenet trihedron

   -CF : Tangente is given by Frenet, the Normal is computed to minimize the torsion

   -DT : discrete trihedron

   -DX Surf : Tangent and Normal are given by Darboux trihedron,

       Surf have to be a shell or a face

   -CN dx dy dz : BiNormal is given by dx dy dz

   -FX Tx Ty TZ [Nx Ny Nz] : Tangent and Normal are fixed

   -G guide  |(Plan|ACR)  ||(no contact|contact|contact on border) : with guide

-FR选项:切矢和法向由Frenet标架确定;

-CF选项:切矢由Frenet标架指定,法向通过计算最小扭转来确定;

-DT选项:切矢和法向由Darboux标架确定;

-CN选项:副法向由指定的dx, dy, dz确定;

-FT:切矢和法向是固定的;

下面通过例子来说明setsweep中这些标架选项的原理。

polyline p             

circle c       0.2

mkedge e c

wire w e

mksweep p

addsweep w

setsweep -FX   

buildsweep r -C

vdisplay p w r

运行上述Draw Test Harness脚本得到如下图所示模型:

通过setsweep -FX 1 0 0 使轮廓Profile沿着扫掠路径Path移动时,法向始终为X轴方向。

将setsweep设置为FR,即使Profile沿着Path移动时采用Frenet标架,更改后的脚本如下:

mksweep p

addsweep w

setsweep -FR

buildsweep r -C

vdisplay p w r

由上图可以看出,轮廓Profile沿着路径Path移动时,轮廓的法向始终与路径平行,即与路径的切线一致。

通过上面命令的对比可以理解setsweep中的选项原理了。关于更多形式的标架,如Darboux标架之类的,可以自己搜索学习。

其中buildsweep命令有如下选项:

buildsweep result [-M/-C/-R] [-S] [tol] : options are

   -M : Discontinuities are treated by Modfication of

        the sweeping mode : it is the default

   -C : Discontinuities are treated like Right Corner

        Treatement is Extent && Intersect

   -R : Discontinuities are treated like Round Corner

        Treatement is Intersect and Fill

   -S : To build a Solid

buildsweep有指定不连续的处理方式及是否生成实体。其中

n -C:将路径Path中不连续的地方通过延长和相交进行处理;

n -R:将路径Path中不连续的地方通过相交和填充进行处理;

下面通过例子来说明buildsweep中选项的用法。通过运行下面的Draw 脚本:

polyline p                

circle c       0.2

mkedge e c

wire w e

mksweep p

addsweep w

buildsweep r -C

vdisplay p w r

在buildsweep时使用-C选项,得到效果如下图所示:

将上述脚本中更改一下buildsweep的选项,由-C改为-R,即:

buildsweep r -R

得到的效果如下图所示:

由上面两个结果对比可以理解buildsweep的-C和-R选项了。

5.Conclusion

OpenCASCADE提供了扫掠造型的算法。对于扫掠造型的两个特例Prism和Revol,提供了类BrepPrimAPI_MakePrism和BRepPrimAPI_MakeRevol来分别生成拉伸体和和旋转体。

对于通用的扫掠造型算法,提供了类BRepOffsetAPI_MakePipeShell来生成。使用这个类的时候需要注意轮廓Profile在扫掠路径Path上的标架及扫掠路径曲线不连续的处理。

6.References

1. OpenCASCADE Modeling Algorithms.

2. 詹海生. 李光鑫. 马志欣. 基于ACIS的几何造型技术与系统开发. 清华大学出版社. 2002

3. 陈维桓. 微分几何. 北京大学出版社.

OpenCascade Sweep Algorithm的更多相关文章

  1. OpenCASCADE Root-Finding Algorithm

    OpenCASCADE Root-Finding Algorithm eryar@163.com Abstract. A root-finding algorithm is a numerical m ...

  2. Apply Newton Method to Find Extrema in OPEN CASCADE

    Apply Newton Method to Find Extrema in OPEN CASCADE eryar@163.com Abstract. In calculus, Newton’s me ...

  3. Lua 架构 The Lua Architecture

    转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间 ...

  4. JVM自动内存管理学习笔记

    对于使用 C.C++ 的程序员来说,在内存管理领域,他们既是拥有最高权力的皇帝又是从事最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任.对于 Java 程 ...

  5. VRP相关知识整理

    一.扩展问题分类: ★ the capacitated vehicle routing problem (CVRP) , 即classical VRP ★ the vehicle routing pr ...

  6. 03 Go 1.3 Release Notes

    Go 1.3 Release Notes Introduction to Go 1.3 Changes to the supported operating systems and architect ...

  7. Attacking JavaScript Engines: A case study of JavaScriptCore and CVE-2016-4622(转)

    转:http://phrack.org/papers/attacking_javascript_engines.html Title : Attacking JavaScript Engines: A ...

  8. 1. 垃圾收集简介 - GC参考手册

    说明: 在本文中, Garbage Collection 翻译为 “垃圾收集”, garbage collector 翻译为 “垃圾收集器”; 一般认为, 垃圾回收 和 垃圾收集 是同义词. Mino ...

  9. Java 垃圾收集技术

    前言 在计算机科学中,垃圾收回(GC: garbage collection)是内存自动管理的一种方式,它并不是同 Java 语言一起诞生的,实际上,早在 1959 年为了简化 Lisp 语言的手动内 ...

随机推荐

  1. js中字符串下划线转为驼峰

    function camelCase(string){ // Support: IE9-11+ return string.replace( /-([a-z])/g, function( all, l ...

  2. Matlab函数编译成dll供c调用

    一 编译dll 在Command Window窗口中输入mbuild -setup,然后会出现语句,是否安装编译器,选择n,因为机子上已经安装了C/C++/C#的编译器,选择VS2010.

  3. [BZOJ1935][SHOI2007]Tree 园丁的烦恼(离线+树状数组)

    题意 给出第一象限的n个点,有m次询问,每次询问一个矩形中的点的个数.(0<=n,m<=500000,0<=xi,yi<=10000000) 题解 一眼望去不可做. 用二位前缀 ...

  4. CodeForces 363B Fence

    Fence Time Limit: 1000ms Memory Limit: 262144KB This problem will be judged on CodeForces. Original ...

  5. ArcGIS api for javascript——设置自定义范围和空间参考

    描述 这个示例展示了在创建地图时如果定义一个自定义的范围和空间参考. 在 ArcGIS JavaScript API的1.0和1.1版本,任何要使用的地图服务图层都需要和地图的空间参考一致.1.2版本 ...

  6. js实现复选框的操作-------Day41

    不知道之前的一篇为什么一直处于审核阶段.难道有哪个词语是敏感词被河蟹了? 无论了,又一次写了这篇,也算是加深记忆吧. 首先要写的是今天在进行表格数据操作时用到的对复选框checkbox的全选和全不选, ...

  7. bzoj1066【SCOI2007】蜥蜴

    1066: [SCOI2007]蜥蜴 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2512  Solved: 1238 [Submit][Statu ...

  8. Android资源之图像资源(状态图像资源)

    在上一篇博文中.我主要解说了XML图像资源中的图层资源,在此图像资源博文中我会给大家陆续解说XMl图像资源的图像状态资源.图像级别资源.淡入淡出资源.嵌入图像资源.剪切图像资源和外形资源. 1.图像状 ...

  9. AES加密解密在JAVA和ANDROID下互通

    <span style="font-family: Arial, Helvetica, sans-serif;">昨天外包安卓的那个人说AES的加解密结果不一样.于是百 ...

  10. NuGet配置代理

    https://stackoverflow.com/questions/9232160/nuget-behind-proxy nuget.exe config -set http_proxy=http ...