張向良
摘 要:激光切割程序需要將二維圖形進(jìn)行一系列處理后導(dǎo)入到專用的軟件中進(jìn)行編制,圖形中的外緣、終孔、視口等部位的輪廓必須是封閉的,才能被激光程序識(shí)別。然而,大多數(shù)尺寸大、曲度大、形狀復(fù)雜的零件,其二維圖通常都含有許多肉眼難以發(fā)現(xiàn)的不連通位置。這些位置肉眼難以發(fā)現(xiàn),而此前業(yè)內(nèi)使用的一種圖形處理程序SYLBDxfProcess實(shí)用性較差,性能與實(shí)際需求相差甚遠(yuǎn)。文章將探討在AutoCAD工作環(huán)境下,激光切割圖形連通性的檢查方法,以期為該工作提供高效的解決方案。
關(guān)鍵詞:激光切割;圖形處理;連通性;封閉性;ObjectARX;二次開發(fā)
中圖分類號(hào):TG485 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2017)33-0079-02
引言
進(jìn)行激光切割,需要將二維圖形導(dǎo)入到專用軟件中生成切割程序。對(duì)于零件輪廓、通孔、視口等區(qū)域需要保證其圖形在激光編程程序中是連通(輪廓封閉)的,否則切割機(jī)和相關(guān)軟件無(wú)法識(shí)別。然而,大多數(shù)壁板、框等尺寸大、曲度大、形狀復(fù)雜的零件,其二維圖形中的傾斜邊、圓角、曲線結(jié)構(gòu)等位置的圖形質(zhì)量通常都不好,含有許多肉眼難以發(fā)現(xiàn)的不連通位置,如斷開、交疊、多余線條和端頭錯(cuò)位等。這些圖形缺陷肉眼難以發(fā)現(xiàn),人工處理幾乎不可能;而此前業(yè)內(nèi)使用的SYLBDxfProcess每次只能檢查一個(gè)鏈,而且運(yùn)行極慢,檢查結(jié)果也不可靠,對(duì)解決問(wèn)題助益甚微。本文將探討激光切割圖形連通性問(wèn)題及檢查算法,以及如何在基于ObjectARX(VC)開發(fā)的程序中實(shí)現(xiàn)。該方法可以一鍵式地找出上述圖形缺陷的精確位置,將為設(shè)計(jì)人員提供極大方便,同時(shí)也極大保證了工作質(zhì)量。
1 連通性檢查問(wèn)題描述
用于編制激光切割程序的二維圖形中所有的輪廓,包括外緣、視口、各種孔等,必須是連通的才能被識(shí)別。在投影圖形質(zhì)量不佳的情況下,很多肉眼看起來(lái)連通的輪廓實(shí)際上被系統(tǒng)認(rèn)為是開放的。放大圖形后可知,這是由于線與線的連接處存在著尺度極小的斷開、重疊、毛刺等。如圖1。
2 算法分析
圖元的拓?fù)潢P(guān)系判定需要考慮一個(gè)因素——公差。假設(shè)約定的公差值為geTol(長(zhǎng)度變量單位默認(rèn)為mm,下同),則兩點(diǎn)距離小于geTol時(shí),認(rèn)為兩點(diǎn)重合。這個(gè)值應(yīng)根據(jù)所選用的設(shè)備、設(shè)備的配套軟件設(shè)置和使用的CAD軟件設(shè)置來(lái)確定。
在激光切割圖形中,允許存在的圖元包括且限于直線、圓弧和圓。由于圓自封閉,不需要判斷連通性,故只需檢查直線與圓?。ㄒ韵潞?jiǎn)稱曲線)。當(dāng)曲線pCurve1的某一端點(diǎn)與曲線pCurve2的某一端點(diǎn)重合時(shí),稱兩曲線鄰接。
在一組曲線中,如果每條曲線都與其他至少1條曲線鄰接,稱這組曲線為一個(gè)鏈;如果一個(gè)鏈中每條曲線的每個(gè)端點(diǎn)最多只與其他一條曲線鄰接,則稱這個(gè)鏈為一個(gè)單鏈。如果一個(gè)單鏈?zhǔn)孜蚕嘟?,則稱該鏈連通。激光切割圖形中的輪廓最終應(yīng)達(dá)到這種狀態(tài)(由于激光切割圖形的特性,此處不考慮諸如8字形之類的曲線相交情形)。于是可根據(jù)以上條件設(shè)計(jì)出檢查連通性的算法:(1)獲得所有圖形元素,分解其中的組合元素。(2)將所有元素分成若干個(gè)鏈。(3)對(duì)于每個(gè)鏈,獲取一個(gè)元素,遞歸檢查與之鄰接的元素,以確定是否為連通鏈。(4)重復(fù)2、3步驟,檢查所有鏈。(5)在用戶界面突出顯示連通的鏈。
3 算法的實(shí)現(xiàn)
考慮到業(yè)內(nèi)普遍的工作方式,本文選擇在AutoCAD平臺(tái)上實(shí)現(xiàn)上述算法。由于基于VC++的ObjectARX程序運(yùn)行效率最高,擁有與AutoCAD自身幾乎相同的編程接口與控制能力[1],故使用ObjectARX(VC)2007開發(fā),編譯環(huán)境是Visual Studio 2005。與AutoCAD自身的功能一樣,該連通性檢查功能通過(guò)命令調(diào)用。如圖2。
部分代碼如下:
static void NITemplateAssistAutomaticChain(void)
{
std::list
std::list
AcDbObjectIdArray entIds = GlobalFunction::GetAllEntityIds();
if (entIds.isEmpty())
{
acutPrintf(_T("\nThere's no entity in this drawing!"));
return;
}
// Divide entities into several chains
TopologicalFunction::DivideIntoGroups(entIds,chainList,1);
// For each chain, check its closure and mark the ents
int count = 0;
for (iter=chainList.begin();iter!=chainList.end();iter++)
{
AcGePoint3dArray points;
if (TopologicalFunction::IsClosed(*iter,points))
{
GlobalFunction::MarkEnt(*iter);
count++;
}
}
acutPrintf(_T("\n%d loops are found."),count);
}
所述的步驟(1):獲得所選擇的圖形元素,分解其中的組合元素:將模型空間中所有實(shí)體的ID加入查找范圍數(shù)組。對(duì)獲得的所有實(shí)體執(zhí)行分解動(dòng)作,如果分解成功,則將所得的實(shí)體依次發(fā)送至模型空間,并將其ID加入查找范圍數(shù)組,然后在查找范圍數(shù)組中移除該組合元素的ID,并將該組合元素從模型空間刪除。
步驟(2):將所有元素分成若干個(gè)鏈:打開查找范圍的第一個(gè)元素pEnt,確認(rèn)其是直線或圓弧。將pEnt移入鏈,提取其兩端點(diǎn),在查找范圍數(shù)組中查找與之鄰接的元素。如果有,則將這個(gè)元素移入鏈,并檢查這個(gè)元素;否則新建一個(gè)鏈繼續(xù)查找。遞歸地執(zhí)行上述過(guò)程,直至檢查完所有元素,并獲得一個(gè)鏈列表。
步驟(3):對(duì)于每個(gè)鏈,獲取一個(gè)元素,遞歸檢查與之鄰接的元素,以確定是否為連通鏈:對(duì)鏈中的每一條曲線pEnt,檢查它與其他曲線有沒(méi)有公共端點(diǎn),所以當(dāng)所有元素都檢查完畢后,結(jié)果分為三種:a.pEnt兩端點(diǎn)均有唯一曲線鄰接;b.pEnt僅在起點(diǎn)或終點(diǎn)有唯一曲線鄰接;c.pEnt兩端點(diǎn)均無(wú)唯一曲線鄰接(無(wú)元素或多個(gè)元素)。
對(duì)于情形a,分為三種情況:一是pEnt兩端鄰接的曲線是同一個(gè)元素,則可以判定鏈連通,將這個(gè)元素移入鏈,查找結(jié)束;二是新起點(diǎn)與新終點(diǎn)重合,說(shuō)明圖形由分別與pEnt兩端相連的兩條曲線閉合,將這2個(gè)元素移入連通元素集,查找結(jié)束;否則說(shuō)明該鏈還沒(méi)有結(jié)束,對(duì)這2個(gè)元素執(zhí)行(3)的步驟。
對(duì)于情形b,分為兩種情況:一是新的起點(diǎn)與原終點(diǎn)相同,說(shuō)明原終點(diǎn)處存在多于1條鄰接曲線,圖形在此出現(xiàn)分支,一定不連通,查找結(jié)束;否則應(yīng)將這條曲線移入鏈,繼續(xù)查找以確定斷開位置。
對(duì)于情形c,由于查找是遞歸的,所以忽略該情形,查找結(jié)束。
步驟(4):重復(fù)2、3步驟,檢查所有鏈。
步驟(5):在用戶界面突出顯示連通的鏈,如果一個(gè)鏈被判斷為連通的,則將其中每條曲線變?yōu)榧t色并加粗,令使用者一目了然;否則在該鏈的兩端繪制紅色粗實(shí)線圓圈,以標(biāo)明斷開位置。
4 結(jié)束語(yǔ)
本文描述了激光切割圖形連通性缺陷的成因與情形,給出了檢查連通性的一般方法,并說(shuō)明了如何在基于ObjectARX(VC)開發(fā)的程序中實(shí)現(xiàn)。解決了激光切割圖形連通性缺陷肉眼難以察覺(jué),之前業(yè)內(nèi)使用的方法實(shí)用性較差的問(wèn)題,為相關(guān)工作提供了快速可靠的解決方案。
參考文獻(xiàn):
[1]張帆,朱文俊.AutoCAD ObjectARX(VC)開發(fā)基礎(chǔ)與實(shí)例教程[M].中國(guó)電力出版社,2014.
[2]陸桂君.激光切割的機(jī)理與機(jī)械工藝技術(shù)[J].科技創(chuàng)新與應(yīng)用,2017(03):122.
[3]胡家兵,郭宇斌,梁依忱.圖像實(shí)時(shí)檢測(cè)技術(shù)在激光切割中的應(yīng)用研究[J].科技創(chuàng)新與應(yīng)用,2016(34):75.endprint