長(zhǎng)春理工大學(xué)機(jī)電工程學(xué)院 于 洋
本文論述了NX二次開發(fā)的方法,開發(fā)了與NX界面一體化的特征識(shí)別與提取功能模塊。通過調(diào)用NX Open API函數(shù),實(shí)現(xiàn)了箱體零件模型中幾何信息的獲?。活A(yù)先建立自定義的加工特征映射庫(kù),引入解決子圖同構(gòu)問題的VF2算法,實(shí)現(xiàn)了箱體零件模型中特征的識(shí)別與提取。最后,通過實(shí)例驗(yàn)證了此功能模塊的有效性。
CAPP是利用計(jì)算機(jī)的數(shù)值計(jì)算、邏輯判斷和推理等功能來(lái)制定零件機(jī)械加工工藝過程的一種技術(shù)。零件機(jī)械加工工藝的研究主要是通過零件設(shè)計(jì)模型,運(yùn)用特征識(shí)別技術(shù)自動(dòng)識(shí)別零件待加工特征,結(jié)合加工特征抑制技術(shù)得到零件工序模型,然后通過必要的人機(jī)交互完成工藝路線、工藝規(guī)程的編制,最后輸出零件三維工藝卡片及對(duì)應(yīng)的NC代碼。采用軟件對(duì)零件進(jìn)行工藝分析與決策的過程中,最核心的技術(shù)難題是確定加工特征和讀取加工特征的屬性,而現(xiàn)行的工藝設(shè)計(jì)過程又無(wú)法有效地和商業(yè)三維CAD軟件無(wú)縫集成?;诖?,對(duì)NX軟件進(jìn)行二次開發(fā),以箱體零件為研究對(duì)象,將自己定制的特征識(shí)別與提取功能模塊與NX界面融成一體,運(yùn)用基于子圖同構(gòu)的特征匹配技術(shù),使工藝設(shè)計(jì)人員參與程度大大降低,系統(tǒng)的運(yùn)行效率顯著提高。
本文運(yùn)行平臺(tái)為Windows 10,開發(fā)平臺(tái)為NX 10.0,與NX 10.0集成的開發(fā)平臺(tái)為Visual Studio 2017。主要應(yīng)用NX工具包中的NX Open MenuScript創(chuàng)建用戶自己的菜單及工具條,NX Open Block UI Styler用來(lái)開發(fā)NX對(duì)話框,NX Open API是NX與外部應(yīng)用程序之間的接口,并提供一系列函數(shù)的集合,有助于實(shí)現(xiàn)所要開發(fā)的功能。
構(gòu)造三維實(shí)體模型的屬性化面鄰接圖,主要考慮的幾何元素是面和面與面相交構(gòu)成的邊,將圖定義為,其中V表示模型中面的集合,E表示模型中邊的集合,p為面的屬性集合,即面的類型:平面,柱面,錐面等;q為邊的屬性集合,包括邊的類型及凹凸性,邊的類型包括線性,圓弧,橢圓等。
箱體設(shè)計(jì)模型中的幾何元素具有無(wú)向性,可以抽象為無(wú)向圖,所以子圖同構(gòu)算法適用于解決幾何拓?fù)淦ヅ鋯栴}。把輸入模型作為大圖,把加工特征映射庫(kù)中的每個(gè)加工特征作為小圖,特征識(shí)別問題即轉(zhuǎn)化為在大圖中尋找存在哪些小圖的過程。
解決子圖同構(gòu)問題的常用算法有Ullmann算法與VF2算法,當(dāng)節(jié)點(diǎn)數(shù)目相同時(shí),在時(shí)間復(fù)雜度和空間復(fù)雜度方面VF2算法更具優(yōu)勢(shì)。VF2算法的目標(biāo)是,給定小圖Gq和大圖Gt,找出在Gt中所有與Gq同構(gòu)的子圖。在查詢過程中,引入中間狀態(tài)s,用來(lái)存儲(chǔ)Gt與Gq成功匹配的節(jié)點(diǎn)對(duì)P(s),從Gq的任意節(jié)點(diǎn)出發(fā),在Gt中尋找到與之匹配的節(jié)點(diǎn)后,繼續(xù)在其鄰居節(jié)點(diǎn)進(jìn)行擴(kuò)展匹配,直到s中包含所有Gq中的節(jié)點(diǎn)時(shí),則說(shuō)明在Gt中找到了一個(gè)與Gq同構(gòu)的子圖。
運(yùn)用VF2算法尋找匹配點(diǎn)對(duì),在開始尋找時(shí)是隨機(jī)的,為了提高匹配效率,對(duì)大圖中不存在的小圖特征盡早舍棄,減少多余的空間搜索,降低時(shí)間復(fù)雜度,因此將小圖中第一個(gè)參加匹配的節(jié)點(diǎn)進(jìn)行人為規(guī)定,并命名為源節(jié)點(diǎn)。源節(jié)點(diǎn)就是小圖中比較特殊的節(jié)點(diǎn),即比較特殊的面:非平面屬性的面,含有內(nèi)環(huán)數(shù)最多的面,有最多鄰接邊的面,組成該面的邊的凹凸轉(zhuǎn)換數(shù)量最多的面。
由于自定義的加工特征映射庫(kù)并不能完全包括所有待識(shí)別零件模型的特征,在使用時(shí)可能需要進(jìn)一步完善特征庫(kù),所以此特征庫(kù)應(yīng)該是開放式的,可以對(duì)其中的特征進(jìn)行新建添加、更改等操作,便于管理使用。
在NX軟件的菜單欄中添加自定義菜單,菜單界面顯示如圖1所示。
圖1 自定義菜單界面
首先對(duì)實(shí)體模型進(jìn)行遍歷,獲取面、邊的幾何信息,并分別存儲(chǔ)在面、邊列表中。主要函數(shù)如下:
int scope = UF_UI_SEL_SCOPE_WORK_PART;
uf_list_p_t face_list;
UF_MODL_create_list(&face_list);
UF_MODL_ask_body_faces(object_tag,&face_list);
int b=0;
UF_MODL_ask_list_count(face_list,&b);
UF_MODL_ask_face_data(face_tag,&type,point,dir,box,&radius,&rad_data,&norm_dir); //輸入面的tag值,輸出面的相關(guān)數(shù)據(jù),例如面的類型:16=圓柱面,17=圓錐面,23=倒圓角面,等
UF_MODL_ask_face_edges(face_tag,&edge_list);
UF_MODL_ask_edge_type(edge_id,&edge_type); //獲得邊的屬性類型信息,如UF_MODL_LINEAR_EDGE為線性,UF_MODL_ELLIPTICAL_EDGE為橢圓形,等
UF_MODL_ask_face_props(face_tag,face_param,face_point,face_u_deriv1,face_v_deriv1,face_u_deriv2,face_v_deriv2,face_normal,face_radii); //獲得面的法向量
UF_VEC3_cross(vec1,vec2,vec_ccw);//輸出vec_ccw=vec1*vec2
UF_VEC3_angle_between(vec1,vec2,vec_ccw,&angle); //輸出兩個(gè)向量的夾角
完成對(duì)實(shí)體模型的分析后,接下來(lái)實(shí)現(xiàn)與加工特征映射庫(kù)中加工特征的匹配,運(yùn)用VF2算法循環(huán)匹配,直到映射庫(kù)中的特征被完全遍歷,提取出輸入模型中包含的所有庫(kù)中的特征為止。由于輸入模型中可能存在庫(kù)中所沒有的特征,而為了更快的區(qū)分出這些特征,在匹配過程中,對(duì)于輸入模型中已經(jīng)匹配到的特征通過高亮顯示,然后改變特征對(duì)象的顏色來(lái)加以區(qū)分。首先調(diào)用函數(shù)UF_DISP_set_highlight(object_tag,1),為高亮顯示,然后將其設(shè)定為其他顏色,UF_OBJ_set_color(object_tag,color),其中int color的數(shù)值范圍在1-216之間有效。
最后,以減速箱體為例,對(duì)NX二次開發(fā)擴(kuò)充的特征識(shí)別與提取模塊進(jìn)行驗(yàn)證,給出實(shí)例進(jìn)行功能演示,如圖2所示。
圖2 特征識(shí)別與提取功能演示