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