国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Open CASECADE的自由曲面法向量計算算法*

2021-03-04 08:53:36汪雨蓉
甘肅科技 2021年22期
關(guān)鍵詞:函數(shù)庫樣條曲面

汪雨蓉

(楊凌職業(yè)技術(shù)學(xué)院機電工程分院,陜西 楊凌 712100)

Open CASCADE(簡稱OCC)是基礎(chǔ)類、建模數(shù)據(jù)、建模算法、應(yīng)用框架、可視化和數(shù)據(jù)交換6 大模塊[1-2]集于一體的一個軟件開發(fā)平臺,每個模塊由多個工具箱組成,每個工具箱由一個或者多個包組成,每個包則由若干個不同的類組成,比如一個幾何包包含點類、線類、面類等。

OCC 幾何功能豐富,擁有的開源函數(shù)庫使用免費,實現(xiàn)靈活,定義的函數(shù)算法能夠?qū)崿F(xiàn)面向?qū)ο蟮腃++編程,提供的OCAF(Open CASCADE Application Framework)能夠幫助開發(fā)人員通過搭建算法框架,從底層完成二維或三維模型的建模、各種曲線建模、各種曲面建模、布爾運算、模型標(biāo)準(zhǔn)化、模型顯示等功能,實現(xiàn)CAD/CAM/CAE 技術(shù)相關(guān)的快速開發(fā),為用戶使用和開發(fā)提供便利服務(wù)。但目前沒有專門針對該函數(shù)庫的學(xué)習(xí)書籍,開發(fā)難度相對較大,需要熟練運用相應(yīng)的程序開發(fā)工具,如C++,并能夠清楚了解如圖1 所示的結(jié)構(gòu)模塊。

用戶追求現(xiàn)代產(chǎn)品的外觀美感,使得自由曲面的設(shè)計生產(chǎn)應(yīng)運而生,但在實際工程中,高自由度和變化多樣的形狀對曲面的應(yīng)用增加了相當(dāng)?shù)碾y度,其中曲面上某點的法向量計算是自由曲面應(yīng)用的關(guān)鍵。學(xué)者們通常采用傳統(tǒng)的數(shù)學(xué)微分幾何法[3]、離散三角形面片法和棱邊分裂法[4]等研究曲面某點的法線方向。李都寧等[5]結(jié)合微分幾何法、曲面的離散化三角形法和Open CASCADE 中的曲面屬性,分析Open CASCADE 曲面法線方向的計算方法。本文運用OCC 函數(shù)庫,在OCC 和C++搭建的軟件平臺上用邊界表達法構(gòu)造B 樣條曲面,分析B 樣條曲面的曲率特征,根據(jù)高斯曲率在曲面上取點,計算該點的法向量,設(shè)計了自由曲面法向量計算算法,為自由曲面法向量的精確計算提供了可行思路如圖1 所示。

圖1 OCC 結(jié)構(gòu)模塊

1 OpenCASCADE 的自由曲面表達

OCC 函數(shù)庫中,建模數(shù)據(jù)模塊的Geom 幾何包,提供了能夠表達三維空間曲面及數(shù)學(xué)計算的各種幾何曲面類,主要包括有界曲面類Geom_BoundSurface,簡單曲面類Geom_ElementarySurface,偏置曲面類Geom_OffsetSurface,掃略曲面類Geom_ElementarySurface 等。文章用面向?qū)ο蟮木幊趟枷?,使用有界曲面類的子類Geom_BSplineSurface 研究自由曲面的法向量。

OCC 構(gòu)造的曲面對象是用邊界表示法表達的B樣條曲面(如圖2 所示),通常不采用有界曲面類生成B 樣條曲面,而是通過其他方法,比如通過建模算法模塊的幾何工具GeomAPI 類包,使用幾何造型算法類GeomAPI_PointsToBSplineSurface 輸入點組,以參數(shù)驅(qū)動構(gòu)造B 樣條曲面,再調(diào)用有界曲面類Geom_BSplineSurface 的方法訪問B 樣條曲面的屬性。建模算法模塊的拓撲算法包BRepBuilderAPI 提供了BRep 拓撲數(shù)據(jù)結(jié)構(gòu)的應(yīng)用程序編程接口,可將幾何對象轉(zhuǎn)換成拓撲對象,構(gòu)造出建模數(shù)據(jù)模塊TopoDS 拓撲類包的對象,形成拓撲數(shù)據(jù)結(jié)構(gòu),再通過數(shù)據(jù)交換模塊后實現(xiàn)構(gòu)造模型的可視化。

圖2 OCC 構(gòu)造的B 樣條曲面

2 算法實現(xiàn)流程

自由曲面法向量計算算法主要包括三維曲面造型、曲面上取點、計算點的法向量等,算法的實現(xiàn)流程如圖3 所示。

圖3 算法實現(xiàn)流程

首先,利用OCC 函數(shù)庫和微軟基礎(chǔ)類庫(MFC)框架在C++環(huán)境中搭建一個系統(tǒng)開發(fā)平臺;其次,通過該平臺選擇曲面類型,可以在軟件平臺讀入其他造型軟件生成的各種格式的三維模型,也可以根據(jù)OCC 的建模算法模塊,選擇合適的建模類函數(shù)在平臺上輸入驅(qū)動參數(shù)構(gòu)造模型,結(jié)合可視化模塊顯示出B 樣條曲面模型;然后,根據(jù)曲面模型的區(qū)域特征提取曲面點,計算曲面點的法向量并輸出。

3 自由曲面法向量計算算法

3.1 搭建系統(tǒng)平臺

在Visual Studio 編程環(huán)境中,基于Open CASCADE 函數(shù)庫,應(yīng)用OCC 提供的OCAF 應(yīng)用框架搭建開發(fā)系統(tǒng)平臺。OCC 搭建的系統(tǒng)平臺主要包括框架的搭建、功能界面的可視化和基本幾何功能的開發(fā)。開發(fā)的系統(tǒng)界面如圖4 所示,由上至下依次包括主框架、主菜單、快捷菜單欄、工具欄、顯示區(qū)和狀態(tài)欄,主菜單包含若干子菜單,開發(fā)者可以在該系統(tǒng)的已有框架中添加新功能,并在主菜單的下拉子菜單里使用相應(yīng)的功能命令。

圖4 OCC 開發(fā)的系統(tǒng)界面

3.2 構(gòu)造曲面模型

算法實現(xiàn)流程中,可以通過讀入各種格式的模型獲取曲面,也可通過構(gòu)造函數(shù)生成自由曲面。OCC 繪制曲面模型,需要調(diào)用函數(shù)庫提供的曲面構(gòu)造類函數(shù)GeomAPI_PointsToBSplineSurface,輸入一個點組arr,通過訪問實現(xiàn)方法輸出B 樣條曲面。為便于研究,考慮曲面的一般性,B 樣條曲面參數(shù)u、v 的取值范圍設(shè)為單位正方形,即0≤u≤1,0≤v≤1。實現(xiàn)圖2 所示的曲面模型,構(gòu)造的主要內(nèi)容有以下3 點。

(1)定義生成曲面的點組。根據(jù)需要聲明一個4×4 的二維數(shù)組變量,用數(shù)學(xué)工具箱的gp 包定義空間坐標(biāo)點,數(shù)組變量調(diào)用設(shè)置數(shù)值的函數(shù)來定義變量中的每一個元素。

(2)點組構(gòu)造幾何曲面。調(diào)用GeomAPI 包提供的點組構(gòu)造曲面的函數(shù),在公差E 允許范圍內(nèi),通過二維點組無限逼近或插值方式擬合構(gòu)建B 樣條曲面。該類的對象提供了一個框架:定義要構(gòu)建B樣條曲面的數(shù)據(jù),實現(xiàn)近似算法或插值算法,并返回結(jié)果。本文在構(gòu)造函數(shù)輸入點組參數(shù)時,設(shè)置E=1.0e-6,每個逼近點處至少二階連續(xù)可導(dǎo)。

(3)幾何對象轉(zhuǎn)換為拓撲對象。拓撲算法包BRep-BuilderAPI 將抽象拓撲類與幾何信息關(guān)聯(lián)起來,給定計算精度Tol(文中設(shè)定:Tol=1.0e-3),為BRep 拓撲數(shù)據(jù)結(jié)構(gòu)提供數(shù)據(jù)轉(zhuǎn)換接口,便于添加到應(yīng)用程序交互環(huán)境中實現(xiàn)對象的可視化。

主要算法代碼:

TColgp_Array2OfPnt arr(1,4,1,4);//聲明生成曲面的二維數(shù)組變量

arr.SetValue(1,1,gp_Pnt(0,0,0));//調(diào)用成員函數(shù)設(shè)置數(shù)組變量中的元素

GeomAPI_PointsToBSplineSurface PntToSurf(arr,3,8,GeomAbs_C2,1.0e-6);//輸入點組,設(shè)置參數(shù),函數(shù)構(gòu)造類的對象

Handle (Geom_BSplineSurface) BSplineSurf=PntToSurf.Surface();//調(diào)用成員函數(shù)構(gòu)建B 樣條曲面BRepBuilderAPI_MakeFace MakeF(BSplineSurf,1.0e-3);//B 樣條曲面構(gòu)造拓撲類的對象

TopoDS_Face aFace=MakeF.Face();//調(diào)用函數(shù)構(gòu)建拓撲曲面

Handle (AIS_Shape) ais_Face=new AIS_Shape(aFace);//拓撲曲面添加到應(yīng)用程序交互環(huán)境中

3.3 判別區(qū)域特征,取點計算法向量

接3.2 節(jié),構(gòu)造如圖2 所示B 樣條曲面具有一般性,包含凹、凸、鞍、平四種不同的區(qū)域。根據(jù)微分幾何,曲面上一點P 的高斯曲率K 定義為該點最大最小主曲率Kmax和Kmin的乘積,兩者的平均數(shù)定義為點P 的平均曲率M,K 和M 的數(shù)值符號決定曲面的區(qū)域類型。若K>0 且M<0,則曲面為凸區(qū)域;K>0且M>0,則曲面為凹區(qū)域;K≤0,則曲面為鞍區(qū)域。方法流程如下:

(1)定義雙重for 循環(huán)遍歷曲面的2 個參數(shù)U、V,確定對應(yīng)點的參數(shù)值。

(2)調(diào)用計算幾何曲面屬性的類GeomLProp_SLProps,輸入3.2 節(jié)構(gòu)造的B 樣條幾何曲面對象和本節(jié)(1)中確定的參數(shù)U、V,并設(shè)置允許誤差E=1.0e-6,用此類的構(gòu)造函數(shù)定義用于計算對應(yīng)點曲率值的對象。用構(gòu)造對象調(diào)用類的成員函數(shù)GaussianCurvature(),計算該點的高斯曲率K,調(diào)用函數(shù)MeanCurvature()計算平均曲率M;

(3)判別高斯曲率和平均曲率的數(shù)值符號。

if(K≤0)then 曲面區(qū)域為鞍型特征;

else if(M>0)then 曲面區(qū)域為凹特征;

else if(M<0)then 曲面區(qū)域為凸特征;

else 曲面區(qū)域為平特征。

(4)根據(jù)(3)中已判別的區(qū)域特征(如圖5 所示),分區(qū)域遍歷曲面點,計算點的法向量。此處列舉凸區(qū)域的取點(如圖6 所示),繼續(xù)應(yīng)用(2)中GeomLProp_SLProps 類構(gòu)造的對象,調(diào)用其成員函數(shù)Normal()定義一點的法向量,返回向量的三個坐標(biāo)值(如圖7 所示)。

圖5 判別區(qū)域類型

圖6 凸區(qū)域取點

圖7 曲面一點的法向量坐標(biāo)值

4 結(jié)論

基于Open CASCADE 開源函數(shù)庫,利用OCAF向?qū)Э蚣茉贑++編程環(huán)境中從底層搭建OCC 開發(fā)系統(tǒng)平臺,通過輸入輸出接口導(dǎo)入選定格式的曲面,或者在搭建平臺上調(diào)用建模算法直接構(gòu)造B 樣條曲面模型,再根據(jù)曲面的高斯曲率和平均曲率判別區(qū)域特征,分區(qū)域取點計算法向量,完成自由曲面法向量計算算法的設(shè)計。文章研究對豐富OCC 函數(shù)庫和探究自由曲面的屬性提供了便利,也為其他相關(guān)建模研究提供參考思路。

猜你喜歡
函數(shù)庫樣條曲面
一元五次B樣條擬插值研究
用于優(yōu)化雷達信號處理的VSIPL函數(shù)庫
基于Python的開源GIS應(yīng)用開發(fā)
Scratch求最值和平均值
電腦報(2020年34期)2020-09-12 14:03:42
基于BB60C的IQ數(shù)據(jù)采集與存儲系統(tǒng)設(shè)計
相交移動超曲面的亞純映射的唯一性
圓環(huán)上的覆蓋曲面不等式及其應(yīng)用
三次參數(shù)樣條在機床高速高精加工中的應(yīng)用
三次樣條和二次刪除相輔助的WASD神經(jīng)網(wǎng)絡(luò)與日本人口預(yù)測
軟件(2017年6期)2017-09-23 20:56:27
基于樣條函數(shù)的高精度電子秤設(shè)計
澄城县| 泰州市| 平原县| 汝州市| 龙江县| 师宗县| 桓台县| 清河县| 平原县| 商南县| 蛟河市| 彭山县| 塘沽区| 宁河县| 大余县| 成武县| 田阳县| 凯里市| 云浮市| 南江县| 汉源县| 东平县| 彭泽县| 金华市| 凤阳县| 花莲县| 越西县| 青州市| 观塘区| 枝江市| 延庆县| 长宁县| 交口县| 临沧市| 平阳县| 宜阳县| 屏山县| 庆城县| 蓝田县| 丹江口市| 驻马店市|