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

基于ProToolkit的Pro/E模型孔數(shù)據(jù)采集方法

2020-08-01 09:15:48陸承佳
機械工程師 2020年7期
關(guān)鍵詞:指令特征模型

陸承佳

(英格索蘭亞太工程技術(shù)中心,江蘇 太倉215400)

0 引 言

“孔”是指圓柱形內(nèi)表面,也包括其他內(nèi)表面中由單一尺寸確定的部分,其作為工業(yè)產(chǎn)品不可或缺的結(jié)構(gòu)特征,對產(chǎn)品的連接、密封、強度等性能均起到了至關(guān)重要的作用,因此工程師們必須在設計階段便確保在三維模型與工程圖中準確反映孔的類型、尺寸、數(shù)量等信息。

由于孔的種類繁多,Pro/E軟件針對不同孔亦提供了相應的建模指令。此外,即使是相同的孔,根據(jù)用戶不同的操作習慣也可能創(chuàng)建出相異的模型特征。然而,目前Pro/E軟件本身尚不具備完善的統(tǒng)計各類孔參數(shù)的功能,因此,工程師設計、修改含有大量孔特征的復雜模型時仍主要依靠人工核查,難免會產(chǎn)生疏漏且費時、費力。

本文旨在利用PTC公司提供的ProToolkit工具對Pro/E軟件進行二次開發(fā),自動統(tǒng)計模型內(nèi)所有圓孔特征的相關(guān)信息,從而幫助工程師降低產(chǎn)品設計的錯誤率,并提高工作效率。

1 開發(fā)環(huán)境簡介

Creo Parametric TOOLKIT是PTC官方針對C語言定制、采用面向?qū)ο笤O計風格的一款工具包。同時,它也是對于Creo Parametric 主要的“應用程序編程接口”(Application Programming Interface,API)。此外,其提供了大量可以接入Creo Parametric數(shù)據(jù)庫和用戶界面的C語言函數(shù)庫與外部應用,供用戶及第三方人員通過編寫C語言代碼進行二次開發(fā),最終將生成的應用功能無縫集成進Creo Parametric軟件內(nèi)部[1]。

本文以Visual Studio 2015為開發(fā)平臺編寫程序,通過TOOLKIT創(chuàng)建接口,進而提取Creo 4.0中三維模型的全部圓孔特征參數(shù)并進行分析判斷。最終,生成一個可以在Pro/E軟件中運行的“動態(tài)鏈接庫”(Dynamic Link Library,DLL),實現(xiàn)自動采集模型孔數(shù)據(jù)功能。

2 主要算法思路

產(chǎn)品設計過程中常用的孔包括:圓柱孔、腰型孔、拉伸孔、翻邊孔等。在Pro/E軟件中,這些圓孔在模型內(nèi)的創(chuàng)建方式各異,即使是同類孔亦可采用不同的指令,因此二次開發(fā)工具在進行自動檢查時,同樣有必要結(jié)合不同的遍歷函數(shù)以更高效、準確地搜集所有孔的參數(shù)。

程序運行時會基于模型孔的特性先后進行兩次遍歷:首先,因為任何圓孔在創(chuàng)建后均會自動生成一根軸線,所以可以通過訪問軸及其關(guān)聯(lián)對象,從而讀取孔徑值;其次,由于不是所有模型孔的參數(shù)都被儲存在與軸相關(guān)的對象中,故而需再遍歷并過濾出包含要求數(shù)據(jù)的特征,進而從中提取孔的直徑值。

下文便將詳細介紹如何在遍歷過程中搜集模型孔的類型、尺寸、數(shù)量信息。

3 軸遍歷

在獲取待測模型句柄并判斷其類型為“零件”(Part)后,首先可調(diào)用ProSolidAxisVisit()函數(shù)遍歷其中所有軸線,其次在進入ProAxisVisitAction類型的回調(diào)函數(shù)訪問“軸”(ProAxis)對象后,又有兩個方向可供選擇:獲取軸所屬“表面”(ProSurface)或“特征”(ProFeature)對象。下文將分別介紹如何通過這兩種途徑讀取模型孔的直徑值。

3.1 表面→輪廓→邊緣→半徑

首先,調(diào)用ProAxisSurfaceGet()函數(shù)可直接獲取遍歷過程中訪問的軸對象所屬的表面對象[2];其次,通過Pro-SurfaceContourVisit()函數(shù)進一步遍歷表面包含的所有“輪廓”(ProContour)對象。在進入ProSurfaceContourVisitAction類型的回調(diào)函數(shù)訪問輪廓后,需再調(diào)用ProContourEdgeVisit()函數(shù)執(zhí)行第三層的遍歷,訪問輪廓中的全部“邊緣”(ProEdge)對象。

需要注意的是,ProContourEdgeVisit()函數(shù)調(diào)用其回調(diào)函數(shù)時訪問的邊緣均為“幾何項”(ProGeomitem)類型,在使用邊緣相關(guān)函數(shù)前,應先通過ProGeomitemToEdge()函數(shù)將幾何項對象轉(zhuǎn)換為邊緣對象。此外,前兩次遍歷均未在進入訪問函數(shù)前過濾軸與輪廓對象,但因為邊緣的種類繁多且僅有“弧”(PRO_ENT_ARC)會記錄半徑信息,并且在建模過程中可能產(chǎn)生大量已失效的邊緣,所以在訪問前需先進入ProContourEdgeFilterAction類型的回調(diào)函數(shù),調(diào)用ProEdgeTypeGet()和ProGeomitemIsInactive()函數(shù)判斷并濾除多余的邊緣對象。

完成過濾后,在ProContourEdgeVisitAction類型的回調(diào)函數(shù)中調(diào)用ProEdgeDataGet()函數(shù)即可讀取邊緣對象的“幾何項數(shù)據(jù)”(ProGeomitemdata)結(jié)構(gòu)體,其定義如圖1所示[1]。

圖1 幾何項數(shù)據(jù)結(jié)構(gòu)體定義

其中“曲線數(shù)據(jù)”(ProCurvedata)聯(lián)合體的定義如圖2所示[1]。

圖2 曲線數(shù)據(jù)聯(lián)合體定義

最終從曲線數(shù)據(jù)中的“弧數(shù)據(jù)”(ProArcdata) 結(jié)構(gòu)體中可直接提取“半徑”(radius)。

綜上所述,通過p_data→data.p_curve_data-→arc.radius代碼直接從幾何項數(shù)據(jù)結(jié)構(gòu)體讀取邊緣半徑值再乘以2即可獲取孔直徑值。

然而,上述方法僅適用于使用“孔”(Hole)或“拉伸”(Extrude)指令創(chuàng)建的模型孔,對于由鈑金相關(guān)指令如“成型”(Form) 或“法蘭”(Flange) 生成的孔則無法通過ProAxisSurfaceGet()函數(shù)獲取軸線所屬表面。因此,必須再嘗試其他方式以搜集盡可能完整的模型孔信息。

3.2 模型項→特征→邊緣→半徑

在ProAxisVisitAction類型的回調(diào)函數(shù)中,先后調(diào)用ProAxisIdGet()和ProModelitemInit()函數(shù)可將訪問的軸對象轉(zhuǎn)換為“模型項”(ProModelitem) 對象,再通過ProGeomitemFeatureGet()函數(shù)獲取生成了該模型項(即軸線)的特征對象[3]。因為一個特征可能包含不只一組孔與軸,訪問不同軸線時會反復獲取同一特征,所以為了減少程序計算量同時避免重復統(tǒng)計,在進行參數(shù)讀取前應先根據(jù)特征ID判斷該特征對象是否已經(jīng)出現(xiàn)過,若是則直接終止本次訪問。

獲取特征對象后,調(diào)用ProFeatureTypeGet()函數(shù)讀取對象類型并判斷其是否為孔——孔指令對應PRO_FEAT_HOLE,拉伸(切除) 特征包含PRO_FEAT_CUT 和PRO_FEAT_CUT_SMT兩種情況,如圖3、圖4剖視圖所示的兩種孔特征類型分別為PRO_FEAT_PROTRUSION與PRO_FEAT_GEN_MERGE。

圖3 “伸出項”(Protrusion)指令生成孔

圖4 “成型”(Form) 指令生成孔

對于上述4種特征對象,程序?qū)⒗^續(xù)調(diào)用ProFeatureGeomitemVisit()函數(shù)(第二項變量填入“PRO_EDGE”)遍歷它們的邊緣對象。其后的幾何項轉(zhuǎn)換、邊緣過濾、半徑值讀取等步驟則與3.1小節(jié)完全相同。

因為孔、拉伸、伸出項這3種指令生成的孔結(jié)構(gòu)較為簡單,所以遍歷過程中提取的均為孔徑值(每個孔都含有不只一條弧邊緣,具體統(tǒng)計方法將在后文詳述)。但由鈑金模塊的成型指令生成的孔包含的不同弧邊緣較多,且目前PTC尚未開放能用以篩選半徑值的API ,故文中最終采用枚舉法將讀取的數(shù)值逐一和一個存有常用孔徑的集合進行比對,從而判斷成型特征是否為標準孔。

此外,使用鈑金模塊指令法蘭生成的翻邊孔如圖5所示。

鑒于翻邊孔的構(gòu)造特殊,其孔徑無法通過邊緣對象提取,并且法蘭的表面及特征對象亦無法在訪問其軸線時調(diào)用ProAxisSurfaceGet()和ProGeomitemFeatureGet()函數(shù)獲取,故而程序還應加入除軸遍歷之外的算法以進一步完善功能。

4 特征遍歷

在軸遍歷函數(shù)ProSolidAxisVisit()執(zhí)行完畢后,程序繼續(xù)調(diào)用ProSolidFeatVisit()函數(shù)遍歷模型的特征對象。

與第3 節(jié)的邊緣遍歷類似,在訪問前應先在ProFeatureFilterAction 類型的回調(diào)函數(shù)中通過ProFeatureTypeGet()函數(shù)提取特征類型并將法蘭以外的特征對象濾除。但經(jīng)測試發(fā)現(xiàn),圖5所示的翻邊孔不是任何一種名稱中帶有“Flange”的特征,而屬于“壁”(PRO_FEAT_WALL)類。隨后,在ProFeatureVisitAction類型的回調(diào)函數(shù)中調(diào)用ProFeatureGeomitemVisit()函數(shù)(第二項變量填入“PRO_SURFACE”)繼續(xù)遍歷法蘭(壁)特征的“表面”對象。

圖5 “法蘭”(Flange)指令生成孔

由于只需要提取最終生成模型的參數(shù),因此和第3節(jié)的邊緣遍歷同理,可在訪問前在ProGeomitemFilter類型的回調(diào)函數(shù)中調(diào)用ProGeomitemIsInactive()函數(shù)判斷并濾除已失效的表面對象。

完成過濾后,在ProGeomitemAction類型的回調(diào)函數(shù)中,先調(diào)用ProGeomitemToSurface()函數(shù)將受訪問的法蘭表面由幾何項對象轉(zhuǎn)換為表面對象,再通過ProSurfaceDataGet()函數(shù)讀取表面對象的幾何項數(shù)據(jù)結(jié)構(gòu)體,其定義已在第3節(jié)進行過介紹。但“表面數(shù)據(jù)”(ProSurfacedata)結(jié)構(gòu)體和“曲線數(shù)據(jù)”聯(lián)合體截然不同,其定義如圖6所示[1]。

圖6 表面數(shù)據(jù)結(jié)構(gòu)體定義

其中“表面外形數(shù)據(jù)”(ProSurfaceshapedata)聯(lián)合體的定義如圖7所示[1]。

圖7 表面外形數(shù)據(jù)聯(lián)合體定義

最終可從表面外形數(shù)據(jù)中的“環(huán)面數(shù)據(jù)”(Pro-Torusdata) 結(jié)構(gòu)體中提取兩個半 徑值——radius1為法蘭特征孔的“小半徑”(Minor Radius),radius2為圓環(huán)“截面半徑 ”(Section Radius)。

綜上所述,通 過p_data→data.p_surface_data →srf_shape.torus.radius1 代 碼 直 接從幾何項數(shù)據(jù)結(jié)構(gòu)體讀取表面小半徑值再乘以2即可獲取如圖8所示翻邊孔的“小直徑”(Minor Diameter)。

圖8 翻邊孔環(huán)面測量結(jié)果

5 孔數(shù)統(tǒng)計

5.1 降低精度

在前兩節(jié)已具體介紹了如何獲取不同模型孔的直徑值,下一步將統(tǒng)計不同類型及尺寸孔的數(shù)量。但在實際建模過程中,時常會由于操作失誤或格式轉(zhuǎn)換等因素導致同類孔尺寸出現(xiàn)細微差別。雖然部分誤差可以在圖樣標注和產(chǎn)品生產(chǎn)時忽略不計,但當程序自動對模型孔進行分析判斷時卻仍能敏銳地發(fā)現(xiàn)它們的孔徑差異。有些模型的尺寸精度甚至高于用以存放孔徑值的“雙精度浮點型”(double)數(shù)值變量,從而致使出現(xiàn)“盡管程序提取并顯示的兩孔直徑值完全相等,但依然判斷它們不同”的情況。

為防止上述問題的產(chǎn)生,程序中又添加了一句代碼用以降低精度:d=(int(radius*2*1000+0.5)) / 1000.0——即在將半徑轉(zhuǎn)換為直徑的同時,保留原數(shù)值三位小數(shù)四舍五入。

5.2 統(tǒng)計方法

如前文所述,各類模型孔直徑值的讀取過程大致由軸線與特征兩次遍歷組成,它們又分別包含邊緣和表面子遍歷。為了簡化算法,孔數(shù)統(tǒng)計應當和類型判斷及參數(shù)搜集同步進行。

首先,由于不是每根軸都屬于某一孔,一個特征也可能包含多個孔,因此孔數(shù)統(tǒng)計工作不宜在最外層遍歷進行;其次,為了便于統(tǒng)計不同孔徑的模型孔數(shù)量,可先在每次提取邊緣及表面半徑后記錄它們的數(shù)量,再將邊緣和表面數(shù)轉(zhuǎn)換為孔數(shù)。

無論是圓柱孔還是腰形孔,所有使用孔或拉伸指令創(chuàng)建的孔最終都只有共計4條有效弧邊緣。經(jīng)測試,圖3和圖5的兩種孔也分別有4條弧與4個環(huán)面。只有圖4的成型孔盡管包含了大量邊緣對象,但符合要求的弧邊緣僅有2條。

因而,只需在每次提取到某一半徑值后累加1,最后按照上述比例整除即可統(tǒng)計出不同類型模型孔的數(shù)量。并且,運用這種方法亦能反向核查采集的參數(shù)信息是否為孔徑。

6 結(jié) 語

本文詳細介紹了如何利用ProToolkit對Pro/E軟件進行二次開發(fā),通過軸線和特征遍歷搜集模型內(nèi)各類孔直徑值,以及統(tǒng)計不同種類、直徑孔數(shù)量的算法。程序最終能夠自動列出所有模型孔的類型、尺寸、數(shù)量信息,在幫助工程師檢查產(chǎn)品圖樣正確與否的同時,也節(jié)省了校驗設計時間、精力,后續(xù)可視實際需求進一步完善該工具,例如調(diào)用ProDrawingTableCreate()函數(shù)將采集到的三維模型參數(shù)信息以表格形式直接插入工程圖中。

最后,借助PTC為用戶提供的大量應用程序編程接口,相信Pro/E軟件仍有相當廣闊的二次開發(fā)空間,同時亦希望未來能有更多工程師開發(fā)出能令軟件操作愈加人性化的工具。

猜你喜歡
指令特征模型
一半模型
聽我指令:大催眠術(shù)
重要模型『一線三等角』
重尾非線性自回歸模型自加權(quán)M-估計的漸近分布
如何表達“特征”
不忠誠的四個特征
當代陜西(2019年10期)2019-06-03 10:12:04
ARINC661顯控指令快速驗證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
抓住特征巧觀察
3D打印中的模型分割與打包
主站蜘蛛池模板: 在线一级毛片| 72种姿势欧美久久久大黄蕉| 久久精品无码国产一区二区三区| 中文字幕无码av专区久久| 久草视频福利在线观看| 日韩av手机在线| 国产美女久久久久不卡| 成人在线亚洲| 在线观看亚洲人成网站| 尤物精品国产福利网站| 成人福利在线免费观看| 4虎影视国产在线观看精品| 国产在线精彩视频论坛| 久久综合五月婷婷| 亚洲精品图区| 中文字幕2区| 亚洲欧美成人| 亚洲AV电影不卡在线观看| 伦伦影院精品一区| 国产美女精品一区二区| 在线中文字幕日韩| 亚洲精品视频网| 国产精品香蕉| 精品福利国产| 色综合久久88色综合天天提莫| 美女免费黄网站| 97成人在线视频| 69免费在线视频| 精品人妻无码中字系列| 亚洲欧美成人影院| 欧美性天天| 激情国产精品一区| 美女高潮全身流白浆福利区| 国产午夜不卡| 精品一區二區久久久久久久網站| 女人毛片a级大学毛片免费 | 97视频免费看| 国产9191精品免费观看| 色婷婷电影网| 国产精品成| 精品人妻一区无码视频| 日本免费福利视频| 一级爆乳无码av| 亚洲国产欧美自拍| 91丝袜美腿高跟国产极品老师| 久久亚洲欧美综合| 国产专区综合另类日韩一区| 免费高清a毛片| 经典三级久久| 四虎成人精品在永久免费| 精品久久国产综合精麻豆| 四虎永久在线| 国产高清免费午夜在线视频| 无码国产偷倩在线播放老年人| 国产精品久久自在自2021| 毛片大全免费观看| 久久99国产乱子伦精品免| 欧美中文字幕在线二区| 精品福利视频网| 成人在线欧美| 久久国产精品电影| 欧美特黄一级大黄录像| 人妻少妇久久久久久97人妻| 日韩免费成人| 91探花国产综合在线精品| 九九热视频精品在线| 久久免费成人| 国产一区二区三区在线精品专区| 热伊人99re久久精品最新地| 人妻无码中文字幕一区二区三区| 国内丰满少妇猛烈精品播| 国产精品尤物在线| 秘书高跟黑色丝袜国产91在线 | 国产丝袜一区二区三区视频免下载| 免费又爽又刺激高潮网址| 国产亚洲精品精品精品| 自拍亚洲欧美精品| 亚洲精品va| 国产福利免费视频| 亚洲日韩图片专区第1页| jizz国产在线| 小蝌蚪亚洲精品国产|