徐 陳,方素平,顧 磊,張坤朋
(1.合肥工業(yè)大學(xué)機械工程學(xué)院,安徽 合肥 230009;2.河海大學(xué)機電工程學(xué)院,江蘇 常州 213002)
在激光切管系統(tǒng)中,為了實現(xiàn)系統(tǒng)的多功能,有必要提供一種根據(jù)已編輯好的圖形交換格式(Drawing Exchange Format,DXF)文件就能直接在圓管、矩形管、腰型管上切割出相應(yīng)圖形的功能。如何根據(jù)DXF文件提取有用信息滿足所需要求就顯得尤為重要。
在DXF文件解析方面,已有一些學(xué)者做過研究。文獻[1-4]中詳細介紹了DXF格式和文件結(jié)構(gòu),設(shè)計了DXF解析模塊。文獻[5]探討了CAD與C語言程序的數(shù)據(jù)接口設(shè)計。文獻[6]針對DXF文件中的多個圖形進行排序,利用貪婪算法進行路徑規(guī)劃。本文在綜合了文獻[1-6]所提供方法的基礎(chǔ)上,實現(xiàn)了直線、圓、圓弧、多段線等圖元的解析,并進一步在一個平面域上存在有多個圖形時,實現(xiàn)了多個圖形有序且每個圖形的圖元有序的DXF模塊解析,最終得到了有序的二維離散點。在管件展開方面,關(guān)于圓管、矩形管、腰型管展開的研究很少,文獻[7]中介紹了相貫線展開和圓錐面展開的方法,文獻[8]中介紹了異徑管件放樣的展開方法,但對于具體實現(xiàn)均未給出具體有效的方法。
針對管件上三維軌跡點的獲取問題,本文提供了一種解析DXF文件和管件展開相結(jié)合的新方法,得到了實際切割中的三維軌跡點。
DXF文件是Autodesk公司開發(fā)的用于AutoCAD與其他軟件之間進行數(shù)據(jù)交換的文件格式,有二進制和ASCII碼兩種格式,本文中所研究的DXF文件是ASCII格式文本文件。
一個完整的DXF文件由HEADER段、CLASSES段、TABLE段、BLOCKS段、ENTITIES段、OBJECTS段和文件結(jié)束標志組成。DXF文件中,所需的圖元信息都存儲在ENTITIES段,因此獲得直線、圓、圓弧、多段線的數(shù)據(jù)只需對ENTITIES段進行解析。而多段線是由直線和圓弧組成,因此多段線的存儲可以將其拆分為直線和圓弧分別存儲。
在讀DXF文件時,圖元元素是先繪制的先存儲,依次讀取到的直線、圓、圓弧、多段線是無序的,因此在設(shè)計DXF文件解析模塊時分為兩步,先將讀取到的圖元信息臨時存儲,直到所有圖元存儲完成后,再通過兩次排序使得多個圖形有序且每個圖形的圖元有序。其中,第一次排序使得多個圖形有序,第二次排序使得每個圖形內(nèi)的圖元有序。
在C語言中,共用體具有在同一塊內(nèi)存上可以存儲不同類型成員的優(yōu)點,因此可以將DXF文件中所有的直線、圓、圓弧、多段線數(shù)據(jù)存儲到一個共用體中,再將共用體和圖元類型一起封裝到結(jié)構(gòu)體中。DXF文件主要解析流程圖如圖1所示。
圖1 DXF文件主要解析流程
提取直線、圓、圓弧、多段線的數(shù)據(jù)時,方法相同,都是逐行讀取組碼和組值,來獲取圖元的參數(shù)值,通過表1中的組碼信息對DXF文件進行解析,并將這個圖元的參數(shù)值存儲到共用體數(shù)組中。
表1 DXF組碼信息
讀取直線、圓、圓弧、多段線的圖元信息時,將讀取到的組值依次與“LINE”“CIRCLE”“ARC”“LWPOLYLINE”等字符串作比較來確定圖元類型,進而對這個圖元進行解析。
二維有序離散點的獲取分為兩步。第一步,用排序算法,根據(jù)圖元特征,使得圖元由無序存儲變?yōu)橛行颍坏诙?,將有序圖元進行離散,得到有序離散點。
排序算法的作用是將所有圖元通過首尾相連的方式依次串聯(lián)起來,保證圖元在內(nèi)存中存儲位置的正確性。
已知直線的起點和終點,可以得到直線的總長度,再按照離散精度值δ1,得到直線上的離散點。圓的離散和圓弧的離散方法相同,都是用弓高值δ2作為離散的約束條件。將求得的弓高值與δ2作比較,如果求得的弓高值大于δ2,則對圓和圓弧進行二分后再次求取弓高值,依次循環(huán)下去,直到求得的弓高值不大于δ2為止。
最后,根據(jù)鏈表具有順序隨機存儲和動態(tài)申請內(nèi)存空間的優(yōu)點,將得到的離散點依次有序存儲到鏈表中。
根據(jù)上述步驟,獲得了有序的二維離散點。接下來將二維離散點轉(zhuǎn)化到圓管、矩形管、腰型管等三種管型上去。3種管型建模如圖2所示。
圖2 圓管、矩形管、腰型管建模
基于建立的圓管、矩形管、腰型管的三維模型,以O(shè)1點為起始點,Y軸方向為中軸方向,對Z軸左右兩側(cè)進行展開,展開圖如圖3所示。
圖3 圓管、矩形管、腰型管展開圖
圖3中,陰影部分表示圓弧區(qū)域,標注尺寸表示線段長度。圖3(a)中,R為圓管半徑;圖3(b)中,L表示矩形管的長,H表示矩形管的高,R為圓角半徑,當(dāng)L與H相等時,矩形管型為方管;圖3(c)中L表示腰形管的長,R表示腰型管的圓弧半徑。
經(jīng)過DXF文件解析得到的二維離散點用坐標(XSource,YSource)表示,三維管件上的軌跡點用坐標(X,Y,Z)表示。
在對圓管、矩形管、腰型管進行建模時,由于是人為定義空間坐標系原點O,那么將二維離散點轉(zhuǎn)化到管件上得到的軌跡點是絕對軌跡點。因此要實現(xiàn)管件上的任意位置切割,必須使三維軌跡點具有相對坐標系原點O偏移的功能。如果是單個圖形切割,可以直接求出這個圖形的幾何中心(CoreX,CoreY);對于多個圖形切割,先確定每個圖形的幾何中心,然后通過幾何中心作差的方式,確定每個圖形的相對位置。這里僅給出單個圖形切割,得到具有偏移功能的相對軌跡點算法:
(1)
其中,X0、Y0為偏移參數(shù)。
將二維離散點轉(zhuǎn)化為三維軌跡點之前,要先確保二維離散點能夠落在圓管、矩形管、腰型管兩側(cè)的展開區(qū)域,這里要對數(shù)據(jù)作如下處理:
對于圓管:
XSource=XSource%(2·π·R)
(2)
(3)
對于矩形管:
XSource=XSource%(2·L+2·H+2·π·R)
(4)
(5)
對于腰型管:
XSource=XSource%(2·L+2·π·R)
(6)
(7)
式(2)、(4)、(6)中“%”為取余運算。
根據(jù)圖2中建立的坐標系,每一個二維離散點轉(zhuǎn)化為三維軌跡點都滿足Y=YSource;下文中將給出每種管型上X和Z的求解算法。
根據(jù)圖3(a)中制定的圓管展開規(guī)則,將圓管劃分為①、②兩個區(qū)域。①、②兩個區(qū)域滿足的算法公式相同。圓管上三維軌跡點的獲取算法如下:
(8)
根據(jù)圖3(b)中制定的矩形管展開規(guī)則,將矩形管劃分為①~⑩十個區(qū)域。通過判斷二維離散點在矩形管展開圖上的位置,獲得轉(zhuǎn)化后矩形管上的三維軌跡點。判斷條件如下:
(9)
(10)
式(9)、(10)為①~⑩區(qū)域的判斷條件。
矩形管上三維軌跡點的獲取算法如下:
(11)
(12)
其中,θ1=(XSource-L/2)/R;θ2=(XSource-L/2-π·R/2-H)/R;θ3=(-XSource-L/2)/R;θ4=(-XSource-L/2)/R。
根據(jù)圖3(c)中制定的腰型管展開規(guī)則,將腰型管劃分為①~⑥六個區(qū)域。通過判斷二維離散點在腰型管展開圖上的位置,獲得轉(zhuǎn)化后腰型管上的三維軌跡點。判斷條件如下:
(13)
式(13)為①~⑥區(qū)域的判斷條件。
腰型管上三維軌跡點的獲取算法如下:
(14)
(15)
其中,θ1=(XSource-L/2)/R;θ2=(-XSource-L/2)/R。
圓管半徑R=17.5 mm。如圖4所示,圖4(a)是CAD畫的直線和圓弧組成的對稱圖形,直線長度L=20 mm,圓弧半徑r=14 mm;圖4(b)是由圖4(a)得到的三維軌跡點。
圖4 CAD二維圖和轉(zhuǎn)化到圓管上的三維軌跡點
矩形管長L=30 mm,高H=20 mm,圓角半徑R=2 mm。如圖5所示,圖5(a)是CAD畫的矩形,長L2=60 mm,高H2=15 mm,;圖5(b)是由圖5(a)得到的三維軌跡點,分布在矩形管的三個面和圓角上。
圖5 CAD二維圖和轉(zhuǎn)化到矩形管上的三維軌跡點
腰型管長L=40 mm,圓弧半徑R=10 mm。圖6(a)是CAD畫的帶圓角矩形,長L1=80 mm,高H1=30 mm,圓角半徑r2=4 mm;圖6(b)是由圖6(a)得到的三維軌跡點,分布在腰型管兩個面和圓弧上。
圖6 CAD二維圖和轉(zhuǎn)化到腰型管上的三維軌跡點
本文通過DXF文件解析與管件展開相結(jié)合的方式獲取了圓管、矩形管、腰型管等3種常見管型上的三維軌跡點,并給出了具體實現(xiàn)方法。以Matlab2020b為仿真軟件,驗證了獲取三維軌跡點算法的正確性。對激光切管機的研發(fā)具有實際意義,有廣泛的應(yīng)用前景。