文|石鑫 王忠建 劉麗華 石夢琳 .中航工業(yè)江西洪都航空工業(yè)股份有限公司 .中南林業(yè)科技大學
AutoCAD軟件在機械制造領域已經(jīng)得到了廣泛的應用,能夠完成各種機械零件設計及圖形輸入任務,然而其所繪制的圖形數(shù)據(jù)結(jié)構不能為CAPP、CAM等相關模塊所利用,為此需要對AutoCAD的圖形數(shù)據(jù)進行讀取并轉(zhuǎn)化成數(shù)控編程系統(tǒng)所需要的數(shù)據(jù)結(jié)構。國內(nèi)外學者對此作了很多研究工作,如利用AutoLISP讀取DXF文件等方法對AutoCAD的圖形文件進行讀取識別。然而這些方法仍然有很多的局限性,不能進行信息的全面轉(zhuǎn)化。針對上述問題,本文利用ObjectARX3.0方法讀取AutoCAD2000數(shù)據(jù)庫的圖形信息及ID值來識別圖素的屬性并進行相應的數(shù)據(jù)處理,轉(zhuǎn)換成NC加工所需要的基于特征的數(shù)據(jù)結(jié)構,從而為CAPP、CAM等相關模塊提供數(shù)據(jù)源,最終實現(xiàn)NC數(shù)控編程自動化。
ObjectARX3.0是Autodesk公司針對AutoCAD 2000平臺的二次開發(fā)而推出的一個工具包,它支持面向?qū)ο蟮木幊谭椒ǎ∣OP)。ObjectARX3.0應用程序是一種Windows動態(tài)庫。
ObjectARX由以下類構成:
(1)AcRx 用于綁定應用程序和運行時類的注冊。
(2)AcEd 用于注冊內(nèi)部命令和系統(tǒng)事件通知的類。
(3)AcDb AutoCAD數(shù)據(jù)庫類。
(4)AcGi用于渲染AutoCAD實體的圖形界面。
所有ObjectARX應用程序必須與acad.Lib和raapi.Lib連接,根據(jù)使用的ObjectARX類庫和函數(shù)的前綴不同,還可能需要其它的附加鏈接庫如表1所列。
表1 附加鏈接庫
在AutoCAD環(huán)境下進行零件設計與零件工程圖的繪制,根據(jù)零件工程圖信息進行加工特征的定義和零件特征模型的描述。圖形輸入系統(tǒng)的總體結(jié)構如圖1所示。
圖1 系統(tǒng)總體結(jié)構
本程序的數(shù)據(jù)源來自AutoCAD數(shù)據(jù)庫,利用ObjectARX方法從數(shù)據(jù)庫中讀入數(shù)據(jù)需要存儲以便進一步進行數(shù)據(jù)分析,為此建立了圖素的幾何數(shù)據(jù)結(jié)構,如下:
struct STusu
long R;//若為圓弧則表示圓弧的半徑坐標,對其他圖素沒有意義
double startAngle,endAngle;//若為圓弧則表示圓弧的起、止角度值,對其他圖素沒有意義};
注:x1,y1——直線(或圓弧,或樣條曲線)的始點坐標。
x2,y2——直線(或圓弧,或樣條曲線)的末點坐標。
c1,c2——若為圓弧則表示圓弧的中心點坐標,對其他圖素沒有意義。
由于零件是以實體特征面構建的,所以各特征面的工藝信息可能是不同的,有的工藝信息是所有表面共有的,稱作全局工藝信息。實體表面工藝信息是指不同的表面類型而具有不同的工藝參數(shù)。本文主要考慮了以下工藝信息:硬度、粗糙度、表面處理、軸向尺寸公差、直徑尺寸公差、直線度、圓柱度、平行度、圓度、垂直度、同軸度、徑向全跳動和徑向圓跳動等。
本程序分為數(shù)據(jù)讀入模塊、數(shù)據(jù)處理模塊及工藝信息輸入模塊。
讀入模塊是利用ObjectARX方法從AutoCAD數(shù)據(jù)庫中讀取零件的信息,并保存在前面確定的幾何信息數(shù)據(jù)結(jié)構中,以便接下來的數(shù)據(jù)處理。讀入模塊源代碼流程圖如圖2所示。以下是讀入模塊遍歷所有實體的源代碼:
{//打開當前塊表
數(shù)據(jù)處理模塊共有三個函數(shù):
Data process1函數(shù):尋找圓點O(OX,OY),刪除中心線,把坐標系轉(zhuǎn)化為以O(OX,OY)為圓點的坐標系。
Data process2函數(shù):取圖形的上半部分,并將多余的圖素刪去。
Data process 3函數(shù):通過對零件的幾何信息進行分析,提出了一種方便快捷的圖形輪廓搜素法,從而得到圖形的外輪廓數(shù)據(jù)。它對從AutoCAD數(shù)據(jù)庫讀入的數(shù)據(jù)進行了進一步處理,從而判斷出各圖素的工藝特征(柱面、端面和錐面等)。
數(shù)據(jù)處理的具體思路:搜索初始圖素(有一端點坐標值為(0,0)的圖素),將它的末點賦給endPoint0,然后利用endPoint0的值繼續(xù)搜索下一個圖素(下一個圖素與上一個圖素首尾相接),每搜索到符合要求的點時就將它存儲到PPON結(jié)構中。如果搜索到的圖素的X坐標值等于Xmaxx(上個模塊中得到的值,它是所有圖素中X坐標的最大值),則圖形的外輪廓搜索完成。接下來判斷有沒有內(nèi)孔,通過將剩下的圖素與外輪廓的最后一個圖素進行求交,若求交成功則說明內(nèi)孔存在,然后按照外輪廓搜索的規(guī)則繼續(xù)進行搜索直到所得圖素的Y坐標值為0,再判斷是否存在左、右盲孔,若存在就繼續(xù)是使用上述方法進行搜索,直到所搜索到圖素的X值為0,全部搜索結(jié)束,得到圖形的外輪廓。
(1)直線、圓弧的處理
直線程序:利用ObjectARX類庫所提供的startPoint()及endPoint()函數(shù)得到直線的起點與終點坐標值。具體使用如下:
在進行外輪廓的搜索時,如果所搜索到的點是直線的終點,將直線的起點與終點進行調(diào)換。
圓弧程序:利用ObjectARX類庫所提供的startAngle()、endAngle()及center()函數(shù)分別得到圓弧的起始角、終止角及圓弧的中心坐標值。具體實現(xiàn)如下:
圓弧旋向的處理:在AutoCAD數(shù)據(jù)庫中圓弧無論是順時針繪制,還是逆時針繪制,其存儲都是按照逆時針進行的,在進行圖形外輪廓的搜索時,如果所搜索的點是圓弧的終止點,則將圓弧的旋向取反。
(2)樣條曲線的處理
為了從AutoCAD數(shù)據(jù)庫中讀入樣條曲線的型值點,需要利用ObjectARX所提供的函數(shù)。經(jīng)過仔細的分析從ObjectARX所提供的類庫中(dbspline.h)找到了可以得到樣條曲線型值點、始末端點及切線斜率等關鍵值的函數(shù),其聲明如下:控制端點:
其中AcGePoint3dArray& fi tPoints定義了一個動態(tài)的數(shù)組,用來存儲搜索到的型值點坐標。
函數(shù)的使用如下:
從而得到了動態(tài)數(shù)組Points,它存儲樣條曲線所有的型值點坐標。
得到了型值點的坐標后,接著利用追趕法得到繪制三次B樣條曲線所需的控制點,經(jīng)過插補得到B樣條的擬合點。將這些點存儲在點表PPON結(jié)構中,從而完成對樣條曲線的處理。
根據(jù)零件整體及各特征形面的不同工藝要求,可以輸入全局工藝信息或局部工藝信息。實驗件的軸端面的工藝信息輸入如圖3所示。
圖3 軸端面工藝信息輸入
為了考察本系統(tǒng)程序運行的結(jié)果是否達到預期的要求,及其形成的文件是否滿足NC數(shù)控加工所需的數(shù)據(jù)結(jié)構。首先在AutoCAD環(huán)境下繪制如圖4所示的回轉(zhuǎn)體實驗件。
圖4 回轉(zhuǎn)體實驗件
加載應用程序NCINTPUT.arx,讀取AutoCAD所繪制的圖形并進行數(shù)據(jù)處理,程序系統(tǒng)的主界面如圖5所示。
圖5 程序系統(tǒng)主界面
至此已經(jīng)得到了實驗件的幾何圖形信息,這還不能滿足數(shù)控加工的需要,接下來需對零件的工藝信息進行輸入,全局工藝信息輸入如圖6所示,其中,淬火C表示滲碳淬火,強度與韌性單位為MPa。
圖6 全局工藝信息輸入
為了驗證本程序所得數(shù)據(jù)的正確性,對所形成的文件進形讀取并重現(xiàn)了圖形的輪廓如圖7所示。
圖7 圖形輪廓重現(xiàn)
本文利用VC++6.0語言,通過ObjectARX3.0類庫讀取AutoCAD2000數(shù)據(jù)庫的圖形信息,從而實現(xiàn)NC自動編程系統(tǒng)的圖形輸入,可以得到以下結(jié)論:
◎ 利用ObjectARX方法可對AutoCAD數(shù)據(jù)庫進行操作;
◎ 搜索AutoCAD數(shù)據(jù)庫中的圖素時,利用ObjectARX所提供的迭代器進行搜索;
◎ 進行工藝信息的標注時,可隨機選取圖素進行工藝信息標注(例如,在點選外腔或內(nèi)腔圓柱面后,將彈出如圖8所示的對話框提示用戶輸入圓柱面工藝信息)。
圖8 圓柱面工藝信息輸入
經(jīng)過測試,利用ObjectARX方法及本系統(tǒng)程序所制定的數(shù)據(jù)轉(zhuǎn)化規(guī)則所得到的數(shù)據(jù)符合NC自動編程所需要的數(shù)據(jù)結(jié)構形式,實現(xiàn)了數(shù)控車削自動編程系統(tǒng)圖形的快速高效輸入,提高了工訓實踐能力。