陳旭東++劉伯穎
在數(shù)控機(jī)床的操作過(guò)程中,編程工作是枯燥而乏味的,指令測(cè)試往往伴隨著工件的浪費(fèi)。以 Visual C++為開(kāi)發(fā)工具,使用 ObjectARX開(kāi)發(fā)接口,可直接讀出 AutoCAD數(shù)據(jù)庫(kù)中的設(shè)計(jì)圖形數(shù)據(jù)。由設(shè)計(jì)圖形數(shù)據(jù)出發(fā),實(shí)現(xiàn)數(shù)控機(jī)床指令的自動(dòng)編碼與仿真,將大大提高工作的效率和準(zhǔn)確性。本文提出的算法用可以將復(fù)雜的圖形數(shù)據(jù)拆分為簡(jiǎn)單圖形序列,從而提高自動(dòng)編碼系統(tǒng)的準(zhǔn)確性,使系統(tǒng)自動(dòng)編制出的數(shù)控機(jī)床機(jī)器指令達(dá)到最優(yōu)。
一、引言
沖裁成型技術(shù)是工業(yè)中應(yīng)用廣泛的板材加工技術(shù),一般是使用數(shù)控機(jī)床進(jìn)行加工,數(shù)控機(jī)床使用特定的語(yǔ)句指令進(jìn)行編程。這種編程一般使用數(shù)控系統(tǒng)高級(jí)語(yǔ)言FAGOR,通常稱為G代碼,如:G00 G90 X400 Y300,表示快速定位,G90表示絕對(duì)坐標(biāo)。數(shù)控機(jī)床工作的過(guò)程就是執(zhí)行 G代碼的過(guò)程。使用 G代碼不僅要控制加工位置,還要控制模具的切換,代碼量較大。例如沖壓 100個(gè)間隔相等的孔,通常需要編制至少200條指令。編寫(xiě)G代碼的過(guò)程往往是繁瑣枯燥的,正確性難以保證,進(jìn)行指令的測(cè)試往往伴隨著原材料的浪費(fèi)。使用計(jì)算機(jī)輔助設(shè)計(jì)系統(tǒng)可以實(shí)現(xiàn)數(shù)控機(jī)床所需 G代碼的自動(dòng)化編程。
AutoCAD是美國(guó) Autodesk公司推出的計(jì)算機(jī)輔助設(shè)計(jì)軟件,廣泛用于二維繪圖、設(shè)計(jì)文檔和基本的三維設(shè)計(jì)。其開(kāi)放的體系結(jié)構(gòu),允許用戶進(jìn)行二次開(kāi)發(fā),根據(jù)自己的需要擴(kuò)充新的功能。ObjectARX(Object AutoCAD Runtime eXtension)是 AutoCAD系統(tǒng)配套的面向?qū)ο蟮?C++應(yīng)用程序開(kāi)發(fā)接口,使用 ObjectARX可以在運(yùn)行狀態(tài)下直接訪問(wèn) AutoCAD的內(nèi)部數(shù)據(jù)庫(kù),圖形系統(tǒng)及幾何造型核心。使用 VC++開(kāi)發(fā)基于 ObjectARX的應(yīng)用,還可充分利用Windows系統(tǒng)資源,包括MFC基本類庫(kù)和Visual C++開(kāi)發(fā)環(huán)境??梢栽谶\(yùn)行時(shí)從 AutoCAD中讀取設(shè)計(jì)圖形數(shù)據(jù)。通過(guò)分析這些圖形數(shù)據(jù),可以實(shí)現(xiàn)沖床指令的自動(dòng)編程與仿真,從而可以大大提高工作效率,降低甚至杜絕板材的測(cè)試?yán)速M(fèi),提高經(jīng)濟(jì)效益。
二、問(wèn)題的提出
數(shù)控機(jī)床對(duì)于簡(jiǎn)單的圖形,如三角形、矩形、圓形及長(zhǎng)圓孔等(以下稱為基本圖形),都有成熟的加工指令或指令序列。而工業(yè)中需要加工的形狀要復(fù)雜得多,包括凸多邊形,凹多邊形,甚至可能包括曲線邊在內(nèi)(以下稱之為復(fù)雜圖形),如圖 1所示為典型的復(fù)雜圖形示意圖。這些圖形在機(jī)床上無(wú)法簡(jiǎn)單的加工出來(lái),需要編寫(xiě)機(jī)床控制程序。如果能將這些圖形做一定的拆分,將其分解為多個(gè)矩形,就可以使用矩形的加工指令組成復(fù)雜多邊形的加工指令。
通過(guò) ObjectARX接口,可以讀出 AutoCAD中的設(shè)計(jì)圖形數(shù)據(jù),并進(jìn)行分析處理。本文提出的拆分算法的目的就是將各種各樣的復(fù)雜形狀拆分為較簡(jiǎn)單的基本圖形,即把復(fù)雜圖形看成是由基本圖形拼成的,為復(fù)雜圖形找到一組合理的基本圖形序列,從而可以使用基本圖形的加工指令進(jìn)行復(fù)雜圖形的加工。
三、復(fù)雜圖形拆分算法描述
圖形拆分算法的程序流程如圖2所示。簡(jiǎn)要敘述如下。
(1)讀取 AutoCAD中的設(shè)計(jì)圖形數(shù)據(jù),數(shù)據(jù)的順序和設(shè)計(jì)圖繪制過(guò)程有關(guān),在數(shù)據(jù)排序鏈接模塊中,需要對(duì)讀出的數(shù)據(jù)進(jìn)行預(yù)處理,按順序依次排列組成封閉圖形。因?yàn)楣ぜ弦话阈枰庸ざ嗵幙?,所以此處得到的是一個(gè)封閉圖形的序列。
(2)對(duì)序列中的圖形依次進(jìn)行處理,每次取出一個(gè)封閉圖形。檢測(cè)圖形數(shù)據(jù)的轉(zhuǎn)向,確保封閉圖形數(shù)據(jù)按逆時(shí)針轉(zhuǎn)向排列。否則對(duì)圖形數(shù)據(jù)進(jìn)行翻轉(zhuǎn)處理。
(3)在圖形數(shù)據(jù)逆時(shí)針轉(zhuǎn)向的基礎(chǔ)上,可以確定各頂點(diǎn)的內(nèi)角。對(duì)凹多邊形來(lái)講,內(nèi)角值有可能會(huì)大于 180°,確定圖形內(nèi)角對(duì)圖形拆分模塊有重要意義。
(4)圖形拆分模塊。這一部分將綜合使用圖形數(shù)據(jù)的各種信息進(jìn)行圖形的拆分,拆分的結(jié)果是形成一個(gè)基本圖形的序列。
(5)最后輸出拆分后的基本幾何圖形序列。
四、算法的實(shí)現(xiàn)
下面以L形圖形的拆分為例,介紹復(fù)雜圖形拆分的執(zhí)行過(guò)程。本文的介紹是針對(duì)由直線段組成的多邊形,在實(shí)際的應(yīng)用中,可以根據(jù)具體的需要對(duì)算法進(jìn)行擴(kuò)展。
1.圖形邊框的數(shù)據(jù)定義
通過(guò) ObjectARX接口,從 AutoCAD中讀出數(shù)據(jù)后,將邊框用以下數(shù)據(jù)結(jié)構(gòu)來(lái)表示: b(x1,y1,x2,y2,angle)
式中, x1,y1表示邊 b的起點(diǎn)坐標(biāo); x2,y2表示邊 b的終點(diǎn)坐標(biāo);angle表示其與下一條邊的內(nèi)夾角。
設(shè) L形的坐標(biāo)數(shù)據(jù)如圖 3所示。
以圖 1中L形的分析為例,假設(shè)坐標(biāo)如圖 3所示,邊框依次定義為 b1、b2、b3、b4、b5和 b6,數(shù)據(jù)自 AutoCAD中讀出后,按點(diǎn)坐標(biāo)檢測(cè)數(shù)據(jù)是否組成封閉圖形。經(jīng)過(guò)處理后,邊框數(shù)據(jù)表示如下:
2.封閉圖形轉(zhuǎn)向檢測(cè)
由于在進(jìn)行圖形數(shù)據(jù)封閉連接的運(yùn)算中,無(wú)法確定圖形數(shù)據(jù)的順序是按逆時(shí)針排序,還是順時(shí)針排序。進(jìn)行數(shù)據(jù)轉(zhuǎn)向檢測(cè)可以使用向量法,選取任一頂點(diǎn),計(jì)算其指向其他各頂點(diǎn)的向量,如圖 4所示。
計(jì)算各向量的向量角——即各向量與x軸的夾角。角度取值范圍為 0~360°。向量角計(jì)算如下: v1:(370-120)+i(100-100)=250 向量角:arctan(0/250)=0° v2:(370-120)+i(300-100)=250+i200 向量角:arctan(200/250)]=38.70° v3:(270-120)+i(300-100)=150+i200 向量角:arctan(200/150)=53.1° v4:(270-120)+i(200-100)=150+i100 向量角:arctan(100/150)=33.69° v5:(120-120)+i(200-100)=i100 向量角:90°
由此可見(jiàn),向量角從 0°增大到 90°,則可以確定封閉圖形的旋轉(zhuǎn)方向?yàn)槟鏁r(shí)針?lè)较?,符合?shù)據(jù)處理的要求。如果向量角檢測(cè)的結(jié)果為減小,則說(shuō)明數(shù)據(jù)的順序?yàn)轫槙r(shí)針?lè)较?,需要?duì)圖形邊框數(shù)據(jù)進(jìn)行反向處理。
3.計(jì)算頂點(diǎn)對(duì)應(yīng)的內(nèi)角值
在封閉圖形數(shù)據(jù)轉(zhuǎn)向確定的情況下,無(wú)論是凸多邊形,還是凹多邊形,都很容易確定圖形每個(gè)頂點(diǎn)所對(duì)應(yīng)的內(nèi)角大小。如圖5所示。
4.圖形拆分處理
將復(fù)雜圖形拆分為基本圖形是本算法的核心內(nèi)容,前面的處理都是為這一步做準(zhǔn)備。首先應(yīng)該確定拆分的最終結(jié)果有幾種基本圖形。然后才能確定圖形分割的具體過(guò)程如何。在此假設(shè)圖形分割的最終目的是得到一個(gè)三角形和矩形的序列。該過(guò)程是一個(gè)循環(huán),步驟簡(jiǎn)述如下。
(1)首先檢測(cè)剩余邊數(shù),如果等于0,表示已沒(méi)有剩余邊框數(shù)據(jù)需要處理,轉(zhuǎn)(8);如果剩余邊數(shù)小于 3且不等于0,則輸出錯(cuò)誤信息。
(2)如果等于三,則得到一個(gè)三角形。將三角形加入到基本圖形列表,轉(zhuǎn)(8)。
(3)查找內(nèi)角值最大的邊,取其下一條邊作為起始邊。檢測(cè)其與末端頂點(diǎn)的內(nèi)角,如果大于 180°,則繼續(xù)選取下一條邊。
(4)檢測(cè)當(dāng)前邊與下一條邊的夾角,如果為 90°,則繼續(xù)讀取下一條邊。
(5)查看已讀取到的邊數(shù),如果已讀取到4條邊,則轉(zhuǎn)6,否則轉(zhuǎn)(4)繼續(xù)讀取。
(6)檢測(cè)讀取到的四條邊是否組成封閉矩形。如果是則將矩形合并到數(shù)據(jù)序列,轉(zhuǎn)(1)開(kāi)始下一次循環(huán),否則轉(zhuǎn)(7)進(jìn)行圖形運(yùn)算。
(7)已讀取的四條邊,因?yàn)樽缘谝粭l邊起,到第四條邊都是 90度,而圖形現(xiàn)在沒(méi)有封閉。必然是第一條邊的起點(diǎn)和第四邊的終點(diǎn)沒(méi)有重合??梢詫⒌谝粭l邊和第四條邊轉(zhuǎn)化為直線方程,求其交點(diǎn)。求出的矩形輸出到基本圖形列表。然后轉(zhuǎn)(1)繼續(xù)執(zhí)行。
(8)得到基本圖形序列后,按一定的規(guī)則進(jìn)行優(yōu)化,對(duì)于不符合最終要求的基本圖形進(jìn)行優(yōu)化運(yùn)算。
(9)最后輸出優(yōu)化后的所有矩形。
仍以 L形為例。首先查找到內(nèi)夾角最大的點(diǎn)為p5,對(duì)應(yīng)內(nèi)角值為 270°;然后逆時(shí)針讀取到b5、b6、b1和 b2共 4條邊;進(jìn)行圖形封閉檢測(cè),可發(fā)現(xiàn)起點(diǎn)和終點(diǎn)不重合。以第一條邊 b5和第四條邊 b2為直線接方程,可求得交點(diǎn)p7,其坐標(biāo)為(250,100)。
以點(diǎn) p7為分割點(diǎn),將原有線段 p2-p3分割為兩個(gè)線段,將線段 p2-p7插入到輸出矩形中,p7-p3插入到原始數(shù)據(jù);線段p5-p7插入到原始數(shù)據(jù)組成新的封閉圖形;插入p7-p5到輸出矩形數(shù)據(jù),由于 p7-p5和 p5-p6直線方程完全相同,可以合并為線段 p7-p6。繼續(xù)循環(huán),可得 p1-p7-p3-p4為一個(gè)矩形,輸出到基本圖形列表。 然后可按照一定的規(guī)則進(jìn)行優(yōu)化,使最終的分割結(jié)果近似最優(yōu),程序成功退出。至此一個(gè)圖形拆分完成,如圖 6所示。
同理,對(duì)圖 1中的(b)的工字型執(zhí)行該算法,可得拆分結(jié)果如圖 7所示。對(duì)圖1中的(c)執(zhí)行該算法,可得拆分結(jié)果如圖8所示。對(duì)于該任意形的拆分,由于拆分后所得矩形 4的寬度太小,不符合加工的最小寬度要求。可以將其與并列的矩形 2進(jìn)行優(yōu)化運(yùn)算,得矩形 5和矩形6,如圖8(b)所示。
五、結(jié)語(yǔ)
使用 VC++程序開(kāi)發(fā)語(yǔ)言,通過(guò) ObjectARX接口對(duì)AutoCAD系統(tǒng)進(jìn)行二次開(kāi)發(fā),是擴(kuò)展 AutoCAD系統(tǒng)功能的重要手段。本文所提供的算法是在進(jìn)行轉(zhuǎn)塔沖床輔助設(shè)計(jì)制造系統(tǒng)的基礎(chǔ)上總結(jié)出來(lái)的圖形分析處理方法。在本文的敘述中,針對(duì)的是由線段組成的多邊形,一般可拆分為矩形和三角形。如果出現(xiàn)更復(fù)雜的圖形情況,如包含任意內(nèi)角值的頂點(diǎn),有圓弧或任意曲線的邊,則需要對(duì)該算法進(jìn)行擴(kuò)展。可首先對(duì)特殊邊進(jìn)行處理,再對(duì)其兩側(cè)的直線段延長(zhǎng),求其交點(diǎn),便可得到曲線圖形和直線段組成的復(fù)雜多邊形。本算法的目的不是提供萬(wàn)能的算法,而是提供一種解決問(wèn)題的思路,在實(shí)際應(yīng)用中,還需根據(jù)實(shí)際情況做相應(yīng)的處理。IM