文|石鑫 王忠建 劉麗華 石夢琳 .中航工業江西洪都航空工業股份有限公司 .中南林業科技大學
AutoCAD軟件在機械制造領域已經得到了廣泛的應用,能夠完成各種機械零件設計及圖形輸入任務,然而其所繪制的圖形數據結構不能為CAPP、CAM等相關模塊所利用,為此需要對AutoCAD的圖形數據進行讀取并轉化成數控編程系統所需要的數據結構。國內外學者對此作了很多研究工作,如利用AutoLISP讀取DXF文件等方法對AutoCAD的圖形文件進行讀取識別。然而這些方法仍然有很多的局限性,不能進行信息的全面轉化。針對上述問題,本文利用ObjectARX3.0方法讀取AutoCAD2000數據庫的圖形信息及ID值來識別圖素的屬性并進行相應的數據處理,轉換成NC加工所需要的基于特征的數據結構,從而為CAPP、CAM等相關模塊提供數據源,最終實現NC數控編程自動化。
ObjectARX3.0是Autodesk公司針對AutoCAD 2000平臺的二次開發而推出的一個工具包,它支持面向對象的編程方法(OOP)。ObjectARX3.0應用程序是一種Windows動態庫。
ObjectARX由以下類構成:
(1)AcRx 用于綁定應用程序和運行時類的注冊。
(2)AcEd 用于注冊內部命令和系統事件通知的類。
(3)AcDb AutoCAD數據庫類。
(4)AcGi用于渲染AutoCAD實體的圖形界面。
所有ObjectARX應用程序必須與acad.Lib和raapi.Lib連接,根據使用的ObjectARX類庫和函數的前綴不同,還可能需要其它的附加鏈接庫如表1所列。

表1 附加鏈接庫
在AutoCAD環境下進行零件設計與零件工程圖的繪制,根據零件工程圖信息進行加工特征的定義和零件特征模型的描述。圖形輸入系統的總體結構如圖1所示。

圖1 系統總體結構
本程序的數據源來自AutoCAD數據庫,利用ObjectARX方法從數據庫中讀入數據需要存儲以便進一步進行數據分析,為此建立了圖素的幾何數據結構,如下:
struct STusu

long R;//若為圓弧則表示圓弧的半徑坐標,對其他圖素沒有意義
double startAngle,endAngle;//若為圓弧則表示圓弧的起、止角度值,對其他圖素沒有意義};
注:x1,y1——直線(或圓弧,或樣條曲線)的始點坐標。
x2,y2——直線(或圓弧,或樣條曲線)的末點坐標。
c1,c2——若為圓弧則表示圓弧的中心點坐標,對其他圖素沒有意義。
由于零件是以實體特征面構建的,所以各特征面的工藝信息可能是不同的,有的工藝信息是所有表面共有的,稱作全局工藝信息。實體表面工藝信息是指不同的表面類型而具有不同的工藝參數。本文主要考慮了以下工藝信息:硬度、粗糙度、表面處理、軸向尺寸公差、直徑尺寸公差、直線度、圓柱度、平行度、圓度、垂直度、同軸度、徑向全跳動和徑向圓跳動等。
本程序分為數據讀入模塊、數據處理模塊及工藝信息輸入模塊。
讀入模塊是利用ObjectARX方法從AutoCAD數據庫中讀取零件的信息,并保存在前面確定的幾何信息數據結構中,以便接下來的數據處理。讀入模塊源代碼流程圖如圖2所示。以下是讀入模塊遍歷所有實體的源代碼:

{//打開當前塊表


數據處理模塊共有三個函數:
Data process1函數:尋找圓點O(OX,OY),刪除中心線,把坐標系轉化為以O(OX,OY)為圓點的坐標系。
Data process2函數:取圖形的上半部分,并將多余的圖素刪去。
Data process 3函數:通過對零件的幾何信息進行分析,提出了一種方便快捷的圖形輪廓搜素法,從而得到圖形的外輪廓數據。它對從AutoCAD數據庫讀入的數據進行了進一步處理,從而判斷出各圖素的工藝特征(柱面、端面和錐面等)。
數據處理的具體思路:搜索初始圖素(有一端點坐標值為(0,0)的圖素),將它的末點賦給endPoint0,然后利用endPoint0的值繼續搜索下一個圖素(下一個圖素與上一個圖素首尾相接),每搜索到符合要求的點時就將它存儲到PPON結構中。如果搜索到的圖素的X坐標值等于Xmaxx(上個模塊中得到的值,它是所有圖素中X坐標的最大值),則圖形的外輪廓搜索完成。接下來判斷有沒有內孔,通過將剩下的圖素與外輪廓的最后一個圖素進行求交,若求交成功則說明內孔存在,然后按照外輪廓搜索的規則繼續進行搜索直到所得圖素的Y坐標值為0,再判斷是否存在左、右盲孔,若存在就繼續是使用上述方法進行搜索,直到所搜索到圖素的X值為0,全部搜索結束,得到圖形的外輪廓。
(1)直線、圓弧的處理
直線程序:利用ObjectARX類庫所提供的startPoint()及endPoint()函數得到直線的起點與終點坐標值。具體使用如下:

在進行外輪廓的搜索時,如果所搜索到的點是直線的終點,將直線的起點與終點進行調換。
圓弧程序:利用ObjectARX類庫所提供的startAngle()、endAngle()及center()函數分別得到圓弧的起始角、終止角及圓弧的中心坐標值。具體實現如下:

圓弧旋向的處理:在AutoCAD數據庫中圓弧無論是順時針繪制,還是逆時針繪制,其存儲都是按照逆時針進行的,在進行圖形外輪廓的搜索時,如果所搜索的點是圓弧的終止點,則將圓弧的旋向取反。
(2)樣條曲線的處理
為了從AutoCAD數據庫中讀入樣條曲線的型值點,需要利用ObjectARX所提供的函數。經過仔細的分析從ObjectARX所提供的類庫中(dbspline.h)找到了可以得到樣條曲線型值點、始末端點及切線斜率等關鍵值的函數,其聲明如下:控制端點:

其中AcGePoint3dArray& fi tPoints定義了一個動態的數組,用來存儲搜索到的型值點坐標。
函數的使用如下:

從而得到了動態數組Points,它存儲樣條曲線所有的型值點坐標。
得到了型值點的坐標后,接著利用追趕法得到繪制三次B樣條曲線所需的控制點,經過插補得到B樣條的擬合點。將這些點存儲在點表PPON結構中,從而完成對樣條曲線的處理。
根據零件整體及各特征形面的不同工藝要求,可以輸入全局工藝信息或局部工藝信息。實驗件的軸端面的工藝信息輸入如圖3所示。

圖3 軸端面工藝信息輸入
為了考察本系統程序運行的結果是否達到預期的要求,及其形成的文件是否滿足NC數控加工所需的數據結構。首先在AutoCAD環境下繪制如圖4所示的回轉體實驗件。

圖4 回轉體實驗件
加載應用程序NCINTPUT.arx,讀取AutoCAD所繪制的圖形并進行數據處理,程序系統的主界面如圖5所示。

圖5 程序系統主界面
至此已經得到了實驗件的幾何圖形信息,這還不能滿足數控加工的需要,接下來需對零件的工藝信息進行輸入,全局工藝信息輸入如圖6所示,其中,淬火C表示滲碳淬火,強度與韌性單位為MPa。

圖6 全局工藝信息輸入
為了驗證本程序所得數據的正確性,對所形成的文件進形讀取并重現了圖形的輪廓如圖7所示。

圖7 圖形輪廓重現
本文利用VC++6.0語言,通過ObjectARX3.0類庫讀取AutoCAD2000數據庫的圖形信息,從而實現NC自動編程系統的圖形輸入,可以得到以下結論:
◎ 利用ObjectARX方法可對AutoCAD數據庫進行操作;
◎ 搜索AutoCAD數據庫中的圖素時,利用ObjectARX所提供的迭代器進行搜索;
◎ 進行工藝信息的標注時,可隨機選取圖素進行工藝信息標注(例如,在點選外腔或內腔圓柱面后,將彈出如圖8所示的對話框提示用戶輸入圓柱面工藝信息)。

圖8 圓柱面工藝信息輸入
經過測試,利用ObjectARX方法及本系統程序所制定的數據轉化規則所得到的數據符合NC自動編程所需要的數據結構形式,實現了數控車削自動編程系統圖形的快速高效輸入,提高了工訓實踐能力。