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

基于ProToolkit的Pro/E模型孔數據采集方法

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

陸承佳

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

0 引 言

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

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

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

1 開發環境簡介

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

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

2 主要算法思路

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

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

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

3 軸遍歷

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

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

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

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

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

圖1 幾何項數據結構體定義

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

圖2 曲線數據聯合體定義

最終從曲線數據中的“弧數據”(ProArcdata) 結構體中可直接提取“半徑”(radius)。

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

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

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

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

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

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

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

對于上述4種特征對象,程序將繼續調用ProFeatureGeomitemVisit()函數(第二項變量填入“PRO_EDGE”)遍歷它們的邊緣對象。其后的幾何項轉換、邊緣過濾、半徑值讀取等步驟則與3.1小節完全相同。

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

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

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

4 特征遍歷

在軸遍歷函數ProSolidAxisVisit()執行完畢后,程序繼續調用ProSolidFeatVisit()函數遍歷模型的特征對象。

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

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

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

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

圖6 表面數據結構體定義

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

圖7 表面外形數據聯合體定義

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

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

圖8 翻邊孔環面測量結果

5 孔數統計

5.1 降低精度

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

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

5.2 統計方法

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

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

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

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

6 結 語

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

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

猜你喜歡
指令特征模型
一半模型
聽我指令:大催眠術
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
如何表達“特征”
不忠誠的四個特征
當代陜西(2019年10期)2019-06-03 10:12:04
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
抓住特征巧觀察
3D打印中的模型分割與打包
主站蜘蛛池模板: 日本免费新一区视频| 国产成人精品2021欧美日韩| 亚洲自拍另类| 免费一级毛片完整版在线看| 亚洲第一极品精品无码| 人妻21p大胆| 欧美午夜精品| 亚洲AV无码久久天堂| 一级一毛片a级毛片| 国产黑丝视频在线观看| 一级一毛片a级毛片| 亚洲v日韩v欧美在线观看| 亚洲人成人无码www| 亚洲Va中文字幕久久一区| 小13箩利洗澡无码视频免费网站| 中文字幕欧美日韩高清| 狠狠综合久久| 亚洲国产成人无码AV在线影院L| 色偷偷一区二区三区| 狼友av永久网站免费观看| 亚洲an第二区国产精品| 国产精品高清国产三级囯产AV| 国产网友愉拍精品| 久久天天躁狠狠躁夜夜躁| 大陆国产精品视频| 在线欧美a| 久久黄色小视频| 88av在线播放| 日韩黄色大片免费看| 久综合日韩| 永久免费无码日韩视频| 青青久久91| 亚洲乱伦视频| 国产乱子伦精品视频| 欧美日韩亚洲国产主播第一区| 国内丰满少妇猛烈精品播| 亚洲日韩国产精品无码专区| 91免费国产高清观看| 日韩毛片免费| 日韩精品毛片| 欧美色伊人| 国产午夜精品一区二区三区软件| 久久综合九色综合97婷婷| 亚洲国产在一区二区三区| 成人午夜视频在线| 伊人丁香五月天久久综合| 高清国产在线| 综合久久五月天| 在线国产91| 婷婷六月综合网| 亚洲国产欧美中日韩成人综合视频| 一本一道波多野结衣av黑人在线| 欧美成人第一页| 欧美亚洲国产精品第一页| 亚洲人成人无码www| 97视频免费在线观看| 亚洲天堂区| 四虎影视国产精品| 亚洲人精品亚洲人成在线| 成人国产精品网站在线看| 亚洲国产成人自拍| 久久一日本道色综合久久| 一级全黄毛片| 国产迷奸在线看| 欧美天堂久久| 亚洲天堂精品在线| 人妻精品全国免费视频| 欧美国产日韩在线观看| 五月激情婷婷综合| 日本黄网在线观看| 无码内射在线| 欧美日本在线播放| 国产精品视频久| 亚洲无码精彩视频在线观看| 国产免费网址| 精品人妻无码区在线视频| 精品国产香蕉伊思人在线| 激情无码字幕综合| 午夜日本永久乱码免费播放片| 97视频免费看| 99视频免费观看| 真实国产乱子伦视频|