亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        陸承佳

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

        0 引 言

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

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

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

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

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

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

        2 主要算法思路

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

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

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

        3 軸遍歷

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

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

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

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

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

        圖1 幾何項(xiàng)數(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代碼直接從幾何項(xiàng)數(shù)據(jù)結(jié)構(gòu)體讀取邊緣半徑值再乘以2即可獲取孔直徑值。

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

        3.2 模型項(xiàng)→特征→邊緣→半徑

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

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

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

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

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

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

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

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

        4 特征遍歷

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

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

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

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

        完成過濾后,在ProGeomitemAction類型的回調(diào)函數(shù)中,先調(diào)用ProGeomitemToSurface()函數(shù)將受訪問的法蘭表面由幾何項(xiàng)對象轉(zhuǎn)換為表面對象,再通過ProSurfaceDataGet()函數(shù)讀取表面對象的幾何項(xiàng)數(shù)據(jù)結(jié)構(gòu)體,其定義已在第3節(jié)進(jìn)行過介紹。但“表面數(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)體中提取兩個(gè)半 徑值——radius1為法蘭特征孔的“小半徑”(Minor Radius),radius2為圓環(huán)“截面半徑 ”(Section Radius)。

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

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

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

        5.1 降低精度

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

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

        5.2 統(tǒng)計(jì)方法

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

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

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

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

        6 結(jié) 語

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

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

        猜你喜歡
        指令特征模型
        一半模型
        聽我指令:大催眠術(shù)
        重要模型『一線三等角』
        重尾非線性自回歸模型自加權(quán)M-估計(jì)的漸近分布
        如何表達(dá)“特征”
        不忠誠的四個(gè)特征
        ARINC661顯控指令快速驗(yàn)證方法
        LED照明產(chǎn)品歐盟ErP指令要求解讀
        電子測試(2018年18期)2018-11-14 02:30:34
        抓住特征巧觀察
        3D打印中的模型分割與打包
        中国一级黄色片久久久| 国产成人av在线影院无毒| 亚洲成片在线看一区二区| av新型国产在线资源| 亚洲爆乳无码专区www| 国产成人av免费观看| 九九在线精品视频xxx| 亚洲国产一区二区视频| 欧美精品欧美人与动人物牲交| 亚洲国产美女精品久久久| 色窝窝无码一区二区三区2022 | 中文字幕午夜AV福利片| 成人国产一区二区三区av| 疯狂做受xxxx高潮视频免费| 人妻丰满熟妇av无码处处不卡 | 丰满人妻无套内射视频| 精品精品久久宅男的天堂 | 杨幂AV污网站在线一区二区| 亚洲av综合日韩精品久久久| 亚洲精品98中文字幕| 亚洲小说图区综合在线| 国产精品美女久久久久久2018| 大肥婆老熟女一区二区精品| 久久伊人精品中文字幕有尤物| 国产人与zoxxxx另类| 午夜性刺激免费视频| av免费观看在线网站| 久久亚洲av成人无码国产最大 | 少妇三级欧美久久| 青青草国内视频在线观看| 免费久久久一本精品久久区| 在线人成免费视频69国产| 亚洲AV无码成人精品区网页| av有码在线一区二区三区| 亚洲成av人综合在线观看| 亚洲精品成人网站在线观看| 久久国产香蕉一区精品天美| 日韩精品视频高清在线| 成人欧美一区二区三区1314| 九色91精品国产网站| 亚洲精品天堂日本亚洲精品|