999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Open CASECADE的自由曲面法向量計(jì)算算法*

2021-03-04 08:53:36汪雨蓉
甘肅科技 2021年22期
關(guān)鍵詞:區(qū)域

汪雨蓉

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

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

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

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

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

1 OpenCASCADE 的自由曲面表達(dá)

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

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

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

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

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

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

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

3 自由曲面法向量計(jì)算算法

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

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

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

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

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

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

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

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

主要算法代碼:

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);//輸入點(diǎn)組,設(shè)置參數(shù),函數(shù)構(gòu)造類的對(duì)象

Handle (Geom_BSplineSurface) BSplineSurf=PntToSurf.Surface();//調(diào)用成員函數(shù)構(gòu)建B 樣條曲面BRepBuilderAPI_MakeFace MakeF(BSplineSurf,1.0e-3);//B 樣條曲面構(gòu)造拓?fù)漕惖膶?duì)象

TopoDS_Face aFace=MakeF.Face();//調(diào)用函數(shù)構(gòu)建拓?fù)淝?/p>

Handle (AIS_Shape) ais_Face=new AIS_Shape(aFace);//拓?fù)淝嫣砑拥綉?yīng)用程序交互環(huán)境中

3.3 判別區(qū)域特征,取點(diǎn)計(jì)算法向量

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

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

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

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

if(K≤0)then 曲面區(qū)域?yàn)榘靶吞卣鳎?/p>

else if(M>0)then 曲面區(qū)域?yàn)榘继卣鳎?/p>

else if(M<0)then 曲面區(qū)域?yàn)橥固卣鳎?/p>

else 曲面區(qū)域?yàn)槠教卣鳌?/p>

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

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

圖6 凸區(qū)域取點(diǎn)

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

4 結(jié)論

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

猜你喜歡
區(qū)域
分割區(qū)域
探尋區(qū)域創(chuàng)新的密碼
科學(xué)(2020年5期)2020-11-26 08:19:22
基于BM3D的復(fù)雜紋理區(qū)域圖像去噪
軟件(2020年3期)2020-04-20 01:45:18
小區(qū)域、大發(fā)展
商周刊(2018年15期)2018-07-27 01:41:20
論“戎”的活動(dòng)區(qū)域
區(qū)域發(fā)展篇
區(qū)域經(jīng)濟(jì)
關(guān)于四色猜想
分區(qū)域
公司治理與技術(shù)創(chuàng)新:分區(qū)域比較
主站蜘蛛池模板: 久久青草精品一区二区三区| 日本一区二区三区精品国产| 亚洲第一国产综合| 波多野结衣一区二区三区AV| 国产av无码日韩av无码网站| 青草视频久久| 这里只有精品在线播放| 欧洲免费精品视频在线| 男人天堂亚洲天堂| 丁香六月综合网| 色老头综合网| 嫩草国产在线| 超级碰免费视频91| 亚洲无码四虎黄色网站| 亚洲精品色AV无码看| 久久精品视频亚洲| 亚洲综合久久成人AV| 99久久亚洲综合精品TS| 国产免费久久精品99re丫丫一| 69免费在线视频| 亚洲电影天堂在线国语对白| 日本伊人色综合网| 91九色国产在线| 美女扒开下面流白浆在线试听| 免费看美女自慰的网站| 国产高颜值露脸在线观看| 亚欧美国产综合| 国产又色又爽又黄| 久久亚洲精少妇毛片午夜无码 | 19国产精品麻豆免费观看| 国产男人的天堂| 亚洲国产精品日韩欧美一区| 国产成人精品一区二区三在线观看| 欧美激情福利| 久久99国产综合精品女同| 欧美一区日韩一区中文字幕页| 国产福利拍拍拍| 精品久久久久久久久久久| 久久精品女人天堂aaa| 热九九精品| 先锋资源久久| 日韩在线播放中文字幕| 在线观看国产精品第一区免费 | a级毛片免费在线观看| 国产成人精品一区二区不卡| 亚洲人成网站18禁动漫无码| 欧美亚洲综合免费精品高清在线观看| 91精品国产一区自在线拍| 日韩欧美国产综合| 国产噜噜噜视频在线观看 | 少妇露出福利视频| 亚洲一级毛片免费观看| 亚洲精品777| 一级成人欧美一区在线观看| 日韩精品视频久久| 欧美日韩国产系列在线观看| 国产另类乱子伦精品免费女| 久久久91人妻无码精品蜜桃HD| 国产成人亚洲毛片| 一本视频精品中文字幕| 国产va视频| 亚洲自拍另类| 国产一区二区色淫影院| 午夜限制老子影院888| 欧美伦理一区| 72种姿势欧美久久久大黄蕉| 久久频这里精品99香蕉久网址| 精品国产中文一级毛片在线看| 亚洲日本精品一区二区| 91口爆吞精国产对白第三集| 亚洲成人在线免费| 日韩人妻少妇一区二区| 国内视频精品| 久久久久久久蜜桃| 成年午夜精品久久精品| 婷五月综合| 国产97视频在线观看| 毛片a级毛片免费观看免下载| 中文字幕无线码一区| 国产在线91在线电影| 亚卅精品无码久久毛片乌克兰 | 欧美A级V片在线观看|