OpenCASCADE 曲面展開
eryar@163.com
Abstract: There is a common need in industries dealing with sheet material products (shipbuilding in the sphere of vessel design, construction, aerospace, manufacturing (for example, in clothes fitting software), etc.) to accurately calculate the shape of a sheet material blank to be used for production of a particular detail of the product (a plate).
Keywords: BRep, Unfolding, Developable Surface
1 Introduction
這幾天發(fā)布了OpenCASCADE中投影相關(guān)的理論實(shí)現(xiàn),很多人問到了曲線包覆Wrap的功能。在Solidworks中叫Wrap,其效果如下圖所示:


其要求曲線保持形狀和長度不變??瓷先ズ屯队安僮黝愃疲瑢?shí)際上原理是不同的,包覆Wrap更像是模型的圖片貼圖,把一個(gè)二維圖片貼到三維曲面表面。
其實(shí)OpenCASCADE有一個(gè)收費(fèi)模塊叫Unfolding Component,已經(jīng)實(shí)現(xiàn)此功能。OpenCASCADE的付費(fèi)模塊是不開源組件,但是可以聯(lián)系官方試用。
2 Unfolding Component
曲面展開在制造業(yè)中應(yīng)用廣泛,如造船中的船體曲面鋼板展開才能加工,如制衣中的服裝打版,還有建筑中的通風(fēng)管道板材的加工等。
在機(jī)械或設(shè)備中,常有用金屬板材制作成各種形狀的制件。為了方便加工制造,往往要畫出它們的放樣圖。例如建筑上用到的通風(fēng)管道都是用鐵皮制成的。制造時(shí),一般先按零件圖的尺寸,在板材上畫成1:1的視圖;然后根據(jù)實(shí)樣圖畫出放樣圖,再經(jīng)下料、彎卷、焊接而成。畫放樣圖的關(guān)鍵問題是把制件的表面展開。所謂立體表面展開是指:將立體表面的真實(shí)形狀和大小順次連續(xù)地展開在一個(gè)平面內(nèi)。由展開得到的圖形,叫做展開圖。畫展開圖時(shí),如果考慮設(shè)計(jì)和加工制造的要求,就是放樣圖。這些概念在造船中同樣適用。
畫立體表面展開圖的一個(gè)基本問題是如何求出立體表面的實(shí)形?即曲面與平面的一個(gè)映射關(guān)系。

https://www.opencascade.com/components/unfolding-component/

OpenCASCADE的Unfolding部件的功能如下:
3D曲面展開的過程是與生產(chǎn)中將平面板加工成曲面板相反的過程。如果模型的曲面是可展曲面(Developable Surface),那么曲面板完全可以通過彎曲得到,這種情況下展開的結(jié)果也沒有變形(Distortions)。
若模型的曲面是不可展開曲面(Not Developable Surface),即在曲面的一些區(qū)域的高斯曲率非0(i.e. has non-zero Gaussian curvature in some areas)。展開結(jié)果盡量產(chǎn)生變形。

可以看到展開后,還可以將展開得到的平面與原曲面建立映射Map。有這個(gè)功能的話,對(duì)于前面提到的曲線包覆有了一個(gè)處理思路:
首先,將要包覆的曲面展開成平面;
其次,將要包覆的曲線投影到展開平面上;
最后,將展開平面上的投影線映射回曲面,即可以得到包覆線。
這樣就可以保證曲線的形狀和長度保持不變。這個(gè)思路是我的個(gè)人建議,歡迎大家討論交流,可能會(huì)有更好的辦法。
3 Unwrap Mesh
如果只是想將曲面展開,F(xiàn)reeCAD中提供了曲面展開的實(shí)現(xiàn),在MeshPart工作區(qū)中選擇Meshes->Unwrap Mesh或Unwrap Face,可以將網(wǎng)格或曲面展開。


對(duì)曲面展開算法感興趣的可以查看FreeCAD中相關(guān)功能的源碼。