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. CMS系统简介(从简介到使用)

    CMS系统简介 1.简介 CMS是Content Management System的缩写,意为"内容管理系统". 在中国互联网的发展历程中,一直以来默默地为中国站长提供动力的CM ...

  2. [JSOI2008] [BZOJ1567] Blue Mary的战役地图 解题报告 (hash)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1567 Description Blue Mary最近迷上了玩Starcraft(星际争霸 ...

  3. Deleting elements

    There are several ways to delete elements from a list. If you know the index of the element you want ...

  4. laravel中的数据迁移和数据填充

    laravel中的数据迁移和数据填充 标签(空格分隔): php 生成迁移文件两种方式: 1 新建一个表的迁移文件 php artisan make:migration create_students ...

  5. 《剑指offer》二维数组中的查找

    一.题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 二.输入描述 ar ...

  6. vue 实现 点击取消监控内容是否发生修改 若修改提示 是否需要保存

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Windows Server 2012 r2 显示计算机图标

    在 Windows Server 2012 R2 系统中,微软取消了服务器桌面个性化选项,如何重新调出配置界面,在桌面上显示计算机图标,本文为大家介绍一下! Win2012我的电脑怎么显示到桌面? 一 ...

  8. 今日SGU 5.26

    #include<bits/stdc++.h> #define de(x) cout<<#x<<"="<<x<<endl ...

  9. 2014 CodingTrip - 携程编程大赛 (预赛第一场)

    1001: 可以证明(扩展欧几里得),只要卡片中有两个卡片互素,旁边点就是可达的. 因此只需要算出所有卡片不互素的情况有多少种,可用容斥原理. #include <cstdio> #inc ...

  10. ECNUOJ 2857 编辑距离

    编辑距离 Time Limit:5000MS Memory Limit:65536KBTotal Submit:314 Accepted:128 Description  有两个字符串(仅有英文小写字 ...