OpenCascade Sweep Algorithm
Posted on 2018-04-26 21:22 eryar 閱讀(3126) 評(píng)論(0) 編輯 收藏 引用 所屬分類: 2.OpenCASCADEOpenCascade Sweep Algorithm
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
隨著計(jì)算機(jī)技術(shù)的發(fā)展和普及,計(jì)算機(jī)輔助設(shè)計(jì)與制造(CAD/CAM)技術(shù)也得到了迅猛發(fā)展,它們推動(dòng)許多領(lǐng)域的設(shè)計(jì)革命,計(jì)算機(jī)輔助設(shè)計(jì)與制造技術(shù)的發(fā)展和應(yīng)用水平已經(jīng)成為衡量一個(gè)國(guó)家現(xiàn)代化水平的重要標(biāo)志之一。
最近中興事件在國(guó)內(nèi)引起了大家的廣泛討論,由于目前國(guó)內(nèi)還制造不出能替代的芯片,所以可以從中找到與發(fā)達(dá)國(guó)家之間的差距,其實(shí)在CAD領(lǐng)域又何嘗不是這樣呢?不過在通用CAD方面,國(guó)內(nèi)有一些軟件廠家,有替代產(chǎn)品。而在行業(yè)CAD方面,一直是國(guó)外軟件的天下。
原來(lái)國(guó)內(nèi)有些聲音是“造不如買,買不如租”,引進(jìn)了許多國(guó)外軟件。這些國(guó)外軟件是很優(yōu)秀,極大地提高了生產(chǎn)力。如果一直買,不思進(jìn)取,結(jié)果應(yīng)該會(huì)像中興一樣。如果自己造,剛開始是需要投入很大的成本,但是后面優(yōu)勢(shì)是不言而喻的。
國(guó)際上的三維內(nèi)核目前功能相對(duì)齊全,開源的只有OpenCASCADE。國(guó)內(nèi)的相關(guān)內(nèi)核只從《計(jì)算機(jī)圖形學(xué)》的書上見過,沒有看過實(shí)物。還有一些軟件廠商收購(gòu)的國(guó)外內(nèi)核。開源的OpenCASCADE用來(lái)學(xué)習(xí)造型相關(guān)算法還是很不錯(cuò)的。通過學(xué)習(xí)源碼,不僅可以知其然,還可以做到知其所以然。
本文主要對(duì)OpenCASCADE中的Sweep掃掠算法的用法進(jìn)行介紹,先會(huì)正確使用。正確使用是研究其實(shí)現(xiàn)原理的基礎(chǔ)。
掃掠算法是圖形學(xué)中很常見的造型算法,就是將指定的輪廓Profile沿著一條路徑Path掃掠來(lái)得到模型。點(diǎn)掃掠得到邊;邊掃掠得到面;面掃掠得到體。
Figure 1. Generating a sweep
類BRepPrimAPI_MakeSweep是掃掠算法的基類,如下圖所示:
從其派生的幾個(gè)類分別用于:
l BRepPrimAPI_MakePrism:生成線性掃掠;
l BRepPrimAPI_MakeRevol:生成旋轉(zhuǎn)掃掠;
l BRepOffsetAPI_MakePipeShell: 生成通用的掃掠;
下面對(duì)這幾種情況分別進(jìn)行說明。
2.Prism
通過類BRepPrimAPI_MakePrism可以創(chuàng)建線性掃掠,也就是拉伸體。在Draw Test Harness中可以使用命令prism來(lái)創(chuàng)建拉伸體。
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中運(yùn)行上述命令,可以得到一個(gè)線性拉伸體,如下圖所示:
其中紅色為輪廓Profile,經(jīng)過線性掃掠得到右邊所示的拉伸體。
3.Revol
通過類BRepPrimAPI_MakeRevol可以創(chuàng)建旋轉(zhuǎn)掃掠,也就是旋轉(zhuǎn)體。在Draw Test Harness中可以使用命令revol來(lái)創(chuàng)建旋轉(zhuǎn)體。
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中運(yùn)行上述命令,可以得到一個(gè)旋轉(zhuǎn)體,如下圖所示:
其中紅色為輪廓Profile,經(jīng)過旋轉(zhuǎn)掃掠得到右邊所示的旋轉(zhuǎn)體。
4.Pipe Shell
通用的掃掠算法使用類BRepOffAPI_MakePipeShell,在Draw Test Harness中使用如下命令:
l mksweep
l addsweep
l deletesweep
l sestsweep
l buildsweep
其中setsweep命令有如下選項(xiàng):
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選項(xiàng):切矢和法向由Frenet標(biāo)架確定;
-CF選項(xiàng):切矢由Frenet標(biāo)架指定,法向通過計(jì)算最小扭轉(zhuǎn)來(lái)確定;
-DT選項(xiàng):切矢和法向由Darboux標(biāo)架確定;
-CN選項(xiàng):副法向由指定的dx, dy, dz確定;
-FT:切矢和法向是固定的;
下面通過例子來(lái)說明setsweep中這些標(biāo)架選項(xiàng)的原理。
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
運(yùn)行上述Draw Test Harness腳本得到如下圖所示模型:
通過setsweep -FX 1 0 0 使輪廓Profile沿著掃掠路徑Path移動(dòng)時(shí),法向始終為X軸方向。
將setsweep設(shè)置為FR,即使Profile沿著Path移動(dòng)時(shí)采用Frenet標(biāo)架,更改后的腳本如下:
mksweep p addsweep w setsweep -FR buildsweep r -C vdisplay p w r
由上圖可以看出,輪廓Profile沿著路徑Path移動(dòng)時(shí),輪廓的法向始終與路徑平行,即與路徑的切線一致。
通過上面命令的對(duì)比可以理解setsweep中的選項(xiàng)原理了。關(guān)于更多形式的標(biāo)架,如Darboux標(biāo)架之類的,可以自己搜索學(xué)習(xí)。
其中buildsweep命令有如下選項(xiàng):
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有指定不連續(xù)的處理方式及是否生成實(shí)體。其中
n -C:將路徑Path中不連續(xù)的地方通過延長(zhǎng)和相交進(jìn)行處理;
n -R:將路徑Path中不連續(xù)的地方通過相交和填充進(jìn)行處理;
下面通過例子來(lái)說明buildsweep中選項(xiàng)的用法。通過運(yùn)行下面的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時(shí)使用-C選項(xiàng),得到效果如下圖所示:
將上述腳本中更改一下buildsweep的選項(xiàng),由-C改為-R,即:
buildsweep r -R
得到的效果如下圖所示:
由上面兩個(gè)結(jié)果對(duì)比可以理解buildsweep的-C和-R選項(xiàng)了。
5.Conclusion
OpenCASCADE提供了掃掠造型的算法。對(duì)于掃掠造型的兩個(gè)特例Prism和Revol,提供了類BrepPrimAPI_MakePrism和BRepPrimAPI_MakeRevol來(lái)分別生成拉伸體和和旋轉(zhuǎn)體。
對(duì)于通用的掃掠造型算法,提供了類BRepOffsetAPI_MakePipeShell來(lái)生成。使用這個(gè)類的時(shí)候需要注意輪廓Profile在掃掠路徑Path上的標(biāo)架及掃掠路徑曲線不連續(xù)的處理。
6.References
1. OpenCASCADE Modeling Algorithms.
2. 詹海生. 李光鑫. 馬志欣. 基于ACIS的幾何造型技術(shù)與系統(tǒng)開發(fā). 清華大學(xué)出版社. 2002
3. 陳維桓. 微分幾何. 北京大學(xué)出版社.
為了方便大家在移動(dòng)端也能看到我的博文和討論交流,現(xiàn)已注冊(cè)微信公眾號(hào),歡迎大家掃描下方二維碼關(guān)注。
