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 0 0 0 1 0 0 1 2 0 0 1 0 0 0 0
prism r p 0 0 1
vdisplay p r
在Draw Test Harness中運行上述命令,可以得到一個線性拉伸體,如下圖所示:

其中紅色為輪廓Profile,經過線性掃掠得到右邊所示的拉伸體。
3.Revol
通過類BRepPrimAPI_MakeRevol可以創建旋轉掃掠,也就是旋轉體。在Draw Test Harness中可以使用命令revol來創建旋轉體。
polyline p 0 0 0 1 0 0 1 2 0 0 1 0 0 0 0
revol r p 3 0 0 0 1 0 280
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 0|1(Plan|ACR) 0|1|2(no contact|contact|contact on border) : with guide
-FR選項:切矢和法向由Frenet標架確定;
-CF選項:切矢由Frenet標架指定,法向通過計算最小扭轉來確定;
-DT選項:切矢和法向由Darboux標架確定;
-CN選項:副法向由指定的dx, dy, dz確定;
-FT:切矢和法向是固定的;
下面通過例子來說明setsweep中這些標架選項的原理。
polyline p 0 0 0 1 0 0 1 2 0 0 1 0
circle c 0 0 0 1 0 0 0.2
mkedge e c
wire w e
mksweep p
addsweep w
setsweep -FX 1 0 0
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 0 0 0 1 0 0 1 2 0 0 1 0 0 0 0
circle c 0 0 0 1 0 0 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的-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. 陳維桓. 微分幾何. 北京大學出版社.
為了方便大家在移動端也能看到我的博文和討論交流,現已注冊微信公眾號,歡迎大家掃描下方二維碼關注。
