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